简易静态 Javascript 反混淆
所有元素都是常量。我简单地将其还原为字符串数组,并用 hash 表与变量名(标识符)关联起来。接下来进入第二个 pass,也就是将数组元素的引用替换为原本的字面量(内联)。取数组成员的表达式将被解析为 MemberExpression 节点,其 property 即是下标。在这里下标直接取了数字,我们直接读出先前暂存的数组内容,替换上去即可。如果混淆器再猥琐一点,是可以无限次迭代,将数字继续展开为更复杂的表达式的(如 2 转换为 (Math.log(1024) / Math.log(2)) / (Math.pow(2, 2) + 1))。说个题外话,其实作用域管理是有现成的模块(escope