很多星友问我,拿到一段混淆的代码不知道该如何下手,更不知道怎么还原,我在这里做个经验总结。
一. 变量定义的还原
如果初始值为字面量或者 Identifier 节点时,如果该变量的值没有被更改过,是可以进行还原的。
诸如:
var a = 123,b = -5,c = window....
等这类定义。
详细见星球里的 restoreVarDeclarator 插件。
如果变量是这么定义的:
var a = 123 + 456;
则可以先调用 constantFold 插件,再调用 restoreVarDeclarator 插件。
还有一类就是Array对象的还原,例如:
var a = [1,2,3,4,5];
等这类定义,其元素全部为字面量,并且变量a没有被更改时,也可以进行还原。
详细见星球里的 replaceArrayElements 插件。
总之,应该想方设法的对字面量进行还原。