您的位置:首页 > Web前端 > JavaScript

关于js eval 的解密方法

2014-07-15 18:53 190 查看
关于 js eval 的解密方法 二

首先,贴个网址 http://www.jb51.net/tools/eval/,在这里可以对一般的 eval 加密的 js 进行解密

但是在实际使用中,发现这里解密的结果并不是很理想

然后想起来不知道从哪里听说的一个方法,把 eval 修改成 alert 就可以得到结果了,尝试了一下,果然如此

然后,开始尝试去解密这些已经加密过的 js ,附两个帖子 http://bbs.csdn.net/topics/390816941http://bbs.csdn.net/topics/390835326
在这两个帖子中的 js ,我是这么处理的

首先,把 js 复制到一个 html 文件中,然后通过浏览器打开

再把 /**/这些注释的内容全部删除

1)然后,把 eval 修改成 document.write,刷新一下,我们就得到了一个新的 eval

然后把原来的 js 全部注释掉,把页面上显示出来的 js 复制到文件中,并把 eval 修改成 document.write

这里需要注意的是 %3C这个符号,因为他是<,所以document.write会出错,我们需要手动把 %3C替换成<,这样得到的新的 js 才是正确的

然后重复 1)

一直到 不在产生eval

这样就可以得到了加密前的 js 代码了

当然,把最后一次得到的 eval 信息直接复制到最开始我贴的那个网址上进行解密,可以得到带格式的 js ,这样也方便我们阅读了
http://bbs.csdn.net/topics/390835326 解密过程,使用下边的 js 即可清晰明了的看出来了

<textarea id="jscode" style="width:100%;height:300px;"></textarea>
<button onclick="decode();">decode</button>
<div id="decode_step"></div>
<script>
var step = 0;
function decode(){
if (document.getElementById('jscode'))
{
var code = document.getElementById('jscode').value;
code = de_code(code);
}
}

function de_code(code){
    if (/^eval/gi.test(code))
    {
        try{
            eval(code.replace(/^eval/gi,'var a=').replace('/(','('));
        }catch(e){
            alert(e);
        }
        var el = document.createElement('div');
        el.style.border = '1px solid black';
        el.style.margin = '10px';
        el.style.padding = '10px';
        if (!/^eval/gi.test(a))
        {
            var b = a;
            b = b.replace('<','<');
            b = b.replace(/\{(?!<br(?!\w))/gi,'{<br/>');
            b = b.replace(/\}(\s*([,;]?|else)(?!\s*([,;]|else)))/gi,'<br/>}$1');
            b = b.replace(/\}(?!\s*(else(?!\w)|<br\/>|[,;\(\)]))/gi,'}<br/>');
            b = b.replace(/(([^;'"]|'[^']*'|"[^"]*")+);\s*/gi,'$1;<br/>');
            while (/\{[^\{\}]+\}/gi.test(b))
            {
                var c = /\{([^\{\}]*)\}/gi.exec(b);
                b = b.replace(c[0],'{'+c[1].replace(/(<br\/>(?!$))/gi,'$1    ')+'}');
            }
            el.innerHTML = b;
        }else{
            el.innerHTML = a.replace('<','<');
        }
        document.getElementById('decode_step').appendChild(el);
        step ++;
        return de_code(a);
    }else{
        return code;
    }
}

</script>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: