大家都知道,一个标准的ob
混淆主要分成四大部分
- 大数组(这个很容易就可以看出来哪里是大数组)
- 自执行函数,里面包含了shift和push这些,用于数组移位,打乱数组顺序的
- 解密函数(我认为是被调用的次数最多,或者是多重return返回的函数调用的就是这个解密函数) 要好好定位才行
- 剩下的就是被加密过后的实际调用函数,也就是我们要进行混淆还原的主要对象
首先手动将前三部分按照一定的顺序放到代码的前头,按照大数组,自执行,解密函数这三个顺序进行排列,如图所示:
至于为什么确定解密函数是_0x1a4b呢?
从上图可以知道,这份代码中也是存在多级return函数的,所以要先进行第一步,过程不再赘述,执行完之后的结果如下:
还原之后对解密函数的匹配果然是更多了,足足有101次匹配,这也再一次验证了我的猜测
ok,接下来进入正题,对解密函数的还原,目标如下:
2.1 将前三部分加载到内存中
只有将大数组,自执行函数和解密函数加载到内存当中之后,才能直接执行解密函数得到调用了解密函数的结果。
先将代码放入到ast网站中来看一看:
代码如下:
**补充: **加上了前三部分的删除
2.2 定位解密函数的调用和还原
首先拿到解密函数的函数名,然后通过traverse遍历这个函数的调用即可:
结果: