如何将Java应用程序打包到无法反编译的可执行jar中(例如,通过Jadclipse)?
发布于 2009-05-28 08:08:50
如果JRE可以运行它,那么应用程序就可以反编译它。
你所能希望的最好的结果就是让它变得非常难以阅读(用“l”和“1”以及“O”和“0”的组合替换所有的符号,放入大量无用的代码等等)。你会惊讶地发现,即使用一个相对愚蠢的翻译工具,你也能写出难以阅读的代码。这就是所谓的混淆,虽然不是完美的,但有时是足够的。
记住,你不能阻止下定决心的黑客,就像阻止下定决心的窃贼一样。你要做的就是让随意的攻击者很难做。当看到符号O001l1ll10O、O001llll10O、OO01l1ll10O、O0Ol11ll10O和O001l1ll1OO,以及看起来没有任何用处的代码时,大多数人会放弃。
发布于 2009-05-28 11:54:06
首先,你无法避免人们对你的代码进行逆向工程。JVM字节码必须是纯文本才能执行,并且有几个程序可以对其进行反向工程(同样适用于.NET CLR)。你只会让看到和理解你的代码变得越来越困难(即成本)。
通常的方法是用一些工具对源代码进行obfuscate。在整个代码库中,类、方法和字段都会被重命名,即使您选择使用无效的标识符,这使得代码几乎无法理解。在过去,我使用JODE有很好的效果。在混淆之后,使用反编译器来查看代码是什么样子的…
除了模糊处理之外,你还可以用某种方法加密你的类文件(除了一个小的起始类),并使用一个自定义的类加载器来解密它们。不幸的是,类加载器类本身不能被加密,所以人们可以通过阅读类加载器的反编译代码来找出解密算法。但是攻击你的代码的窗口变小了。再说一次,这并不能阻止人们看到你的代码,只是增加了临时攻击者的难度。
您还可以尝试将Java应用程序转换为某些windows EXE,这将隐藏它是Java的线索(在某种程度上),或者真正编译为机器码,这取决于您对JVM功能的需求。(我没有尝试过这个。)
发布于 2009-05-29 01:56:43
GCJ是一个免费的工具,可以编译成字节码或本机代码。请记住,这在某种程度上违背了Java的目的。
https://stackoverflow.com/questions/919690
复制相似问题