具体哪个网站就不细说了,此篇文章主要是针对网站做一个AST反混淆,同时,这里也不会涉及AST基础,只会讲解反混淆逻辑,每个人反混淆的想法都不同,所以大家尽量抱着一个求同存异的态度去看待,谢谢
来看一下整体js代码的混淆形式,由于混淆代码太多,大概9k多行,不好全部放上来,所以我截取了部分代码做参考,最后还原的结果压缩成6k多行,删除了3千行垃圾代码(由于安全考虑,本文只会放出部分截图做参数,本文只提供反混淆的一些思路)
从上述混淆代码来看,混淆的形式包括:成员变量混淆、全局函数混淆、控制流平坦化、函数花指令、十六进制混淆、二项式混淆等等,我们根据整体js代码大概的混淆逻辑来做反混淆
几个前提点
这段混淆代码,做了console.log的重写,所以console得最先赋值出来
我先把反混淆的步骤写出来,最后贴出代码
1、还原十六进制字符串解混淆和二项式解混淆,方便后续还原成员变量混淆和全局字符串加密函数混淆
2、还原成员变量混淆,方便后续还原全局字符串加密函数混淆
3、全局字符串加密函数被二次、三次等定义过,需要将其全部替换为统一的字符串加密函数
4、还原字符串加密函数
5、第二次还原成员变量混淆
6、还原函数花指令(仅针对于代码块只有一行并且是return语句)
7、还原逗号表达式混淆
8、还原流程平坦化混淆
9、删除无用函数和变量
10、第二次还原十六进制字符串解混淆和二项式解混淆
11、还原if条件表达式混淆和三元表达式混淆
12、删除全局函数
下面是具体代码(由于安全考虑,只放出部分截图,需要代码请私信):
通过还原完成后,部分代码如下:
可以说,最后的代码逻辑还原的非常清晰了