JavaScript双重混淆

4
首先,我知道混淆并不能防止反向工程;它只是使得反向工程变得更加困难和耗时,这正是我想要的。

我的代码使用了jquery,这是唯一的依赖。我正在考虑使用谷歌闭包编译器和jscrambler,这两个工具似乎都很受好评。如果我先将代码通过谷歌闭包编译器,然后再通过jscrambler,会发生什么?

这样做后,代码是否仍然能够像现在这样在每个浏览器/平台上正常工作?双重混淆是否增加了反向工程源代码的复杂性?


@epascarello:不,双重混淆看起来非常像病毒,谁会尝试呢?:D - Tamara Wijsman
将代码放在 jsPerformance 或 jsFiddle 上,然后点击“美化代码”,你会惊讶地发现代码变得易于理解。 - ajax333221
嗯,这取决于你需要多少混淆。Closure Compiler的高级模式做得非常好,但不幸的是它对你的代码有很多限制。它有jQuery的绑定。如果你想使用它,你的代码需要重新调整一下,以确保它仍然能正常工作。 - Stephen Chung
2个回答

1
代码在每个浏览器/平台上是否像现在一样仍然有效?
是的,外部脚本将执行其内部脚本,再次告诉您的浏览器执行内部脚本。换句话说,您可以在eval中放置一个eval。
双重混淆是否增加了反向工程源代码的复杂性?
它不一定会增加复杂性,但确实需要额外的步骤才能接近您的源代码。请注意,您使用的内部混淆本身被外部混淆所混淆,因此在单次传递中,反向工程师被呈现出您的内部混淆的混淆代码,但不是您的实际源代码本身。
过去当我进行反向工程(以确定某个可执行文件是否为病毒)时,我曾经遇到过一个C#程序,以混淆的方式首先解压缩另一个文件,该文件再次解压缩另一个DLL文件,然后加载该DLL文件中的资源中的代码,最终执行并连接到某个在线服务的恶意代码。
底线是,这需要我花费更多的时间才能到达那个混淆的恶意代码。

是的,双重混淆可能会增加复杂度并使代码难以获取。

但是,请确保你不会因此引入性能或维护成本。

而且,最终所有他们混淆访问的东西都可以被反向工程化。...


0
混淆的工作原理是将变量重命名为"a"、"b"、"c"等,以使其更不易读取。它通常还会删除代码的所有格式,使整个类从数百行的输入中变成只有几行。
任何真正想要找出代码在做什么的人都可以做到。这将使阅读和反向工程变得更加困难。不幸的是,由于无法编译JavaScript,因此需要使用纯文本,所以保护并不是一个很好的选择。
我知道有一些产品可以让您加密脚本,但脚本仍然可以通过在本地运行脚本来解密。因此,稍微努力一下就可以生成未加密的脚本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接