js 奇葩技巧之隱藏代碼

來源:互聯網
上載者:User

當然,作者算了留了一個小小的練習給我們,因為他只用了兩個字元,導致轉換後的資料是未經處理資料的 8倍。他給我們提供了4個零寬字元,我們就可以縮小至4倍。 好了,我們來看下代碼吧。 文本(function(window) {    var rep = { // 替換用的資料,使用了4個零寬字元,資料量減少了一半。        '00': '\u200b',        '01': '\u200c',        '10': '\u200d',        '11': '\uFEFF'    };     function hide(str) {        str = str.replace(/[^\x00-\xff]/g, function(a) { // 轉碼 Latin-1 編碼以外的字元。            return escape(a).replace('%', '\\');        });         str = str.replace(/[\s\S]/g, function(a) { // 處理位元據並且進行資料替換            a = a.charCodeAt().toString(2);            a = a.length < 8 ? Array(9 - a.length).join('0') + a : a;            return a.replace(/../g, function(a) {                return rep[a];            });        });        return str;    }     var tpl = '("@code".replace(/.{4}/g,function(a){var rep={"\u200b":"00","\u200c":"01","\u200d":"10","\uFEFF":"11"};return String.fromCharCode(parseInt(a.replace(/./g, function(a) {return rep[a]}),2))}))';     window.hider = function(code, type) {        var str = hide(code); // 產生零寬字元串         str = tpl.replace('@code', str); // 產生模版        if (type === 'eval') {            str = 'eval' + str;        } else {            str = 'Function' + str + '()';        }         return str;    }})(window);來測試下效果。(點代碼框右上方運行即可) 文本運行var code = hider('alert("測試一下。。")');console.log(code);再來試試產生後的資料。(如果上一步沒執行,直接執行這裡會報錯。) 文本運行eval(code);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.