,对使用多种混淆算法进行混淆的代码进行反混淆将变得更加困难。根据他们的说法,jsbeautifier无法修复该混淆的代码。您是否可以找到另一种消除这种混淆的方法?如果没有,您能得到的最接近的是什么?
var _0x2815=["\x33\x20\x31\x28\x29\x7B\x32\x20\x30\x3D\x35\x3B\x34\x20\x30\x7D","\x7C","\x73\x70\x6C\x69\x74","\x78\x7C\x6D\x79\x46\x75\x6E\x63\x74\x69\x6F\x6E\x7C\x76\x61\x72\x7C\x66\x75\x6E\x63\x74\x69\x6F\x6E\x7C\x72\x65\x74\x75\x72\x6E\x7C","\x72\x65\x70\x6C\x61\x63\x65","","\x5C\x77\x2B","\x5C\x62","\x67"];eval(function (_0xf81fx1,_0xf81fx2,_0xf81fx3,_0xf81fx4,_0xf81fx5,_0xf81fx6){_0xf81fx5=function (_0xf81fx3){return _0xf81fx3;} ;if(!_0x2815[5][_0x2815[4]](/^/,String)){while(_0xf81fx3--){_0xf81fx6[_0xf81fx3]=_0xf81fx4[_0xf81fx3]||_0xf81fx3;} ;_0xf81fx4=[function (_0xf81fx5){return _0xf81fx6[_0xf81fx5];} ];_0xf81fx5=function (){return _0x2815[6];} ;_0xf81fx3=1;} ;while(_0xf81fx3--){if(_0xf81fx4[_0xf81fx3]){_0xf81fx1=_0xf81fx1[_0x2815[4]]( new RegExp(_0x2815[7]+_0xf81fx5(_0xf81fx3)+_0x2815[7],_0x2815[8]),_0xf81fx4[_0xf81fx3]);} ;} ;return _0xf81fx1;} (_0x2815[0],6,6,_0x2815[3][_0x2815[2]](_0x2815[1]),0,{}));
#1 楼
使用Malzilla,我能够在约30秒内消除混淆。步骤1,打开Malzilla,选择“解码器”标签,然后粘贴JavaScript。
步骤2,您可以选择按“ “格式化代码”按钮可对JS进行基本的重新格式化。
步骤3,选中Override eval(),然后单击“运行脚本”按钮。
您会注意到,在输出框中打印了去混淆的代码:
function myFunction(){var x=5;return x}
评论
伟大的手册:)
–丹尼斯·拉斯科夫(Denis Laskov)
13年5月28日下午5:35
#2 楼
为什么限制自己进行静态去混淆?如果通过JavaScript调试器运行该脚本并中断return
语句,则可以看到_0xf81fx1
= function myFunction(){var x=5;return x}
,这是对该函数进行混淆之前的纯文本。此外,如果您通过http://jsbeautifier.org运行它,输出的最后一行是:
}('3 1(){2 0=5;4 0}', 6, 6, 'x|myFunction|var|function|return|' ['split']('|'), 0, {}));
可以看出,
'3 1(){2 0=5;4 0}'
字符串仅保存了索引。字符串数组'x|myFunction|var|function|return|'
中的字符串。因此,无论如何,http://jsbeautifier.org几乎总是对其进行了模糊处理。评论
我不知道如何解释“ 3 1(){2 0 = 5; 4 0}”
–user101579
2013年6月1日7:36
#3 楼
实际上,jsbeautifier.org不是JS反混淆的来源。有关更多详细信息,请参见此问题。分析高度混淆的JavaScript经过多次混淆后,似乎后面的代码为:
//eval function myFunction(){var x=5;return x}
http: //jsunpack.jeek.org/?report=24921f4d96d1e05abfc0affd2233bd69874056c9
#4 楼
您可以尝试使用de4js。对于原始帖子中的javascript代码段,de4js产生以下输出:var _0x2815 = ["3 1(){2 0=5;4 0}", "|", "split", "x|myFunction|var|function|return|", "replace", "", "\w+", "\b", "g"];
eval(function (_0xf81fx1, _0xf81fx2, _0xf81fx3, _0xf81fx4, _0xf81fx5, _0xf81fx6) {
_0xf81fx5 = function (_0xf81fx3) {
return _0xf81fx3;
};
if (!_0x2815[5][_0x2815[4]](/^/, String)) {
while (_0xf81fx3--) {
_0xf81fx6[_0xf81fx3] = _0xf81fx4[_0xf81fx3] || _0xf81fx3;
};
_0xf81fx4 = [function (_0xf81fx5) {
return _0xf81fx6[_0xf81fx5];
}];
_0xf81fx5 = function () {
return _0x2815[6];
};
_0xf81fx3 = 1;
};
while (_0xf81fx3--) {
if (_0xf81fx4[_0xf81fx3]) {
_0xf81fx1 = _0xf81fx1[_0x2815[4]](new RegExp(_0x2815[7] + _0xf81fx5(_0xf81fx3) + _0x2815[7], _0x2815[8]), _0xf81fx4[_0xf81fx3]);
};
};
return _0xf81fx1;
}(_0x2815[0], 6, 6, _0x2815[3][_0x2815[2]](_0x2815[1]), 0, {}));
选择
eval
单选按钮时,它减少为function myFunction() {
var x = 5;
return x
}
评论
如果您确实想要混淆的Javascript,只需将其编译为asm.js@锑:一个好主意!