如何为 javascript 代码编写混淆器?

How to write a obfuscater for javascript code?

我想编写一个扫描 javascript 代码的程序,并用简短、无意义的标识符替换变量名,而不破坏代码。

我知道 YUI 压缩器和 google 的闭包编译器可以做到这一点。我想知道如何实现它?

是否需要构建抽象语法树?如果没有,如何找到重命名的候选变量?

大多数现代 javascript 压缩器实际上是编译器。他们将 javascript 输入解析为抽象语法树,对树执行操作(有些安全,有些不安全),然后使用语法树打印出代码。 Uglify 和 Closure-Compiler 都是真正的编译器。

实现自己的编译器是一个大工程,需要大量的计算理论知识。 dragon book 是一个很好的入门资源。

您可以利用现有的工作。我建议从 non-optimizing compiler 开始参考。

我制作了 http://www.whak.ca for whacking scripts to unreadable obfuscation, over 75 algorithms ready for you to obfuscate your code. There are also 20 compression JavaScript packers on http://www.whak.ca/packer/ 来混淆您的代码。如果有人想要你的代码足够糟糕,这些都可以被逆向工程。但是人家会开锁,我们还是锁着门...