根据易用的zilla博客博客

,对使用多种混淆算法进行混淆的代码进行反混淆将变得更加困难。根据他们的说法,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,{}));


评论

如果您确实想要混淆的Javascript,只需将其编译为asm.js

@锑:一个好主意!

#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
}