1

このツールhttp://code.google.com/p/cremebrulee/を使用して、難読化されたコードを読みやすくしましたが、出力は非常に無意味に見えます

function ____(_O0){eval(unescape(_O0))} var l2=window.opera?1:0;function l3(l4){l5=/zc/g;l6=String.fromCharCode(0);l4=l4.replace(l5,l6);var l7=new Array(),l8=_1=l4.length,l9,lI,il=16256,_1=0,I=0,li='';do{l9=l4.charCodeAt(_1);lI=l4.charCodeAt(++_1);l7[I++]=lI+il-(l9<<7)}while(_1++<l8);var l1=new Array(),l0=new Array(),Il=128;do{l0[Il]=String.fromCharCode(Il)}while(--Il);Il=128;l1[0]=li=l0[l7[0]];ll=l7[0];_l=1;var l_=l7.length-1;while(_l<l_){switch(l7[_l]<Il?1:0){case 0 :l0[Il]=l0[ll]+String(l0[ll]).substr(0,1);l1[_l]=l0[Il];if(l2){li+=l0[Il]};break;default:l1[_l]=l0[l7[_l]];if(l2){li+=l0[l7[_l]]};l0[Il]=l0[ll]+String(l0[l7[_l]]).substr(0,1);break};Il++;ll=l7[_l];_l++};if(!l2){return(l1.join(''))}else{return li}};var lO='';for(ii=0;ii<OO0O.length;ii++){lO+=l3(OO0O[ii])};if(naa){document.write('<scr'+'ipt>'+lO+'</sc'+'ript>')};

このコードの次のステップは何ですか?

更新: これは元のコードですhttp://pastebin.com/qG4DX7qy

4

2 に答える 2

2

jsbeautifierによる処理後は次のようになります。

function ____(_O0) {
    eval(unescape(_O0))
}
var l2 = window.opera ? 1 : 0;

function l3(l4) {
    l5 = /zc/g;
    l6 = String.fromCharCode(0);
    l4 = l4.replace(l5, l6);
    var l7 = new Array(),
        l8 = _1 = l4.length,
        l9, lI, il = 16256,
        _1 = 0,
        I = 0,
        li = '';
    do {
        l9 = l4.charCodeAt(_1);
        lI = l4.charCodeAt(++_1);
        l7[I++] = lI + il - (l9 << 7)
    } while (_1++ < l8);
    var l1 = new Array(),
        l0 = new Array(),
        Il = 128;
    do {
        l0[Il] = String.fromCharCode(Il)
    } while (--Il);
    Il = 128;
    l1[0] = li = l0[l7[0]];
    ll = l7[0];
    _l = 1;
    var l_ = l7.length - 1;
    while (_l < l_) {
        switch (l7[_l] < Il ? 1 : 0) {
            case 0:
                l0[Il] = l0[ll] + String(l0[ll]).substr(0, 1);
                l1[_l] = l0[Il];
                if (l2) {
                    li += l0[Il]
                };
                break;
            default:
                l1[_l] = l0[l7[_l]];
                if (l2) {
                    li += l0[l7[_l]]
                };
                l0[Il] = l0[ll] + String(l0[l7[_l]]).substr(0, 1);
                break
        };
        Il++;
        ll = l7[_l];
        _l++
    };
    if (!l2) {
        return (l1.join(''))
    } else {
        return li
    }
};
var lO = '';
for (ii = 0; ii < OO0O.length; ii++) {
    lO += l3(OO0O[ii])
};
if (naa) {
    document.write('<scr' + 'ipt>' + lO + '</sc' + 'ript>')
};

次のステップは、すべての変数と関数を調べて、より適切な名前を付けることです (読者の課題として残しておきます)。

もちろん、このコードは完全ではありません。一部の関数は呼び出されず、一部の配列は取り込まれません。

このコードが行うことは、OO0O配列のすべての要素をl3()関数 (単純な自作暗号化アルゴリズムを使用して暗号化されたテキストを復号化する関数) を介して配置し、それらを結合し、<script>結果</script>を を使用して DOM に配置することによってすべてを評価しますdocument.write。引用したコードではOO0O配列が定義されていないため、実際の(暗号化された)コードが配列内にあるため、配列が何をするのかわかりませんOO0O

実際には、暗号化アルゴリズムがどのように機能するかを知る必要はまったくありません。必要なのは、このコードをデバッガーでステップ実行し、l0への呼び出しの直前に変数を調べることだけdocument.writeです。実際のコードはすべてそこにあります。評価される直前のプレーンな暗号化されていない形式で。

あなたも置くことができます:

document.write = console.log;

そのスクリプトが呼び出される直前に、評価される代わりにコンソールに出力されたすべてのコードを確認します。質問の更新でペーストビンに投稿したコードを使用して実行しましたが、「未定義」の文字列が非常に多いため、壊れているか不完全であるか、文字セットエンコーディングに問題があると思います。

とにかく、どこから入手したのですか?

于 2013-01-29T01:15:43.603 に答える
0

コードをきれいにすることができます:

http://jsbeautifier.org/

しかし、あなたは本当に一人でいます。可読性、変数/関数名などの感覚は永遠に失われます。これを回避する唯一の方法は、元のソースを入手することです。

于 2013-01-29T01:16:02.907 に答える