Js 的 混淆 与反混淆

Js 混淆:

https://obfuscator.io/

功能很多,暂举两个:

1、Identifier Names Generator : 把变量、方法的名字变成 16进制(0xabc123) 或者 无意义的字母(a,b,c等)

2、String Array:把所有的字符串,抽取到一个数组中,调用的地方,通过一个方法算出index,然后到这个数组中取出字符串。

var _0x5a62 = ['log', 'Hello\x20World!'];

var _0x5340 = function(_0x3b4f00, _0x1c66d8) {
    _0x3b4f00 = _0x3b4f00 - 0x0;
    var _0x4d4bfa = _0x5a62[_0x3b4f00];
    return _0x4d4bfa;
};

function hi() {
    console[_0x5340('0x0')](_0x5340('0x1'));
}

3、利用JS的语法特性打乱原有的代码

 

Js反混淆:

1、先用自己写的tools1将 混淆的js中抽取到String Array中的那些字符串,还原到代码中去 (执行完后若发现还存在 _0x5461 未被替换,则将处理完的代码再处理一次即可)

原理: 从加密代码中找出 StringArrays 和 算 该数组的index的方法(比如为 _0x5461方法),再通过正则 遍历加密的js的文本,

将调用的地方(包含有_0x5461(...) 的地方)截取出来,通过eval进行运算得出真正的string,再替换回去。


2、然后将上一步处理过后的结果 放到 http://jsnice.org/ 通过 人工智能 帮忙还原部分属性和方法的命名

注意:

    a、该网站用了google CDN提供的jquery,需要fanqiang才能使用

    b、该网站无法处理es6的js,所以先需要将代码转成es5(通过 https://es6console.com/ 先将混淆的js 从es6 转为 es5)。


3、最后将 上一步处理后的代码 通过 tools2 将 剩下的_0x开头的 转换为 a1,a2,方便阅读

原理: 将上一步处理后的代码进行遍历,寻找 _0x开头的 转换为 a1,a2

补充:
所有的动作完成后,曾今尝试过 将代码放到 https://mindedsecurity.github.io/jstillery/# 进一步处理,
发现效果不明显,而且会导致代码处理后语法出错,不建议。

 

参考:estools 辅助反混淆 Javascript – 0xCC

参考文章中的 https://github.com/ChiChou/etacsufbo 已废弃,不再有用了。

另一篇文章中说的 “javascript-obfuscator对应的解混淆工具crack.js” 也是无用的。https://github.com/jscck/crack.js/blob/master/crack.js

 

posted on 2019-12-29 14:44  HB1  阅读(9768)  评论(0编辑  收藏  举报

导航