我使用此工具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
答案 0 :(得分: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>
结果 document.write
放入DOM中来实现这一切。由于OO0O
数组未在您引用的代码中定义,因此我们无法知道它的作用,因为实际(加密)代码位于OO0O
数组中。
实际上你根本不需要知道加密算法是如何工作的,因为你需要做的就是用调试器逐步完成这段代码,并在调用{{1}之前检查l0
变量。 - 在那里,你将在评估之前以普通的未加密形式获得所有实际代码。
你甚至可以把:
document.write
在调用该脚本之前,查看打印到控制台的所有代码,而不是进行评估。我使用您在问题更新中粘贴在pastebin中的代码来完成它,并且有很多“未定义”的字符串,我认为它已经破坏或不完整或者字符集编码出错了。
无论如何,你从哪里得到它?
答案 1 :(得分:0)