首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使您的Jar不被反编译

使您的Jar不被反编译
EN

Stack Overflow用户
提问于 2009-05-28 07:52:51
回答 5查看 8.8K关注 0票数 6

如何将Java应用程序打包到无法反编译的可执行jar中(例如,通过Jadclipse)?

EN

回答 5

Stack Overflow用户

发布于 2009-05-28 08:08:50

如果JRE可以运行它,那么应用程序就可以反编译它。

你所能希望的最好的结果就是让它变得非常难以阅读(用“l”和“1”以及“O”和“0”的组合替换所有的符号,放入大量无用的代码等等)。你会惊讶地发现,即使用一个相对愚蠢的翻译工具,你也能写出难以阅读的代码。这就是所谓的混淆,虽然不是完美的,但有时是足够的。

记住,你不能阻止下定决心的黑客,就像阻止下定决心的窃贼一样。你要做的就是让随意的攻击者很难做。当看到符号O001l1ll10OO001llll10OOO01l1ll10OO0Ol11ll10OO001l1ll1OO,以及看起来没有任何用处的代码时,大多数人会放弃。

票数 11
EN

Stack Overflow用户

发布于 2009-05-28 11:54:06

首先,你无法避免人们对你的代码进行逆向工程。JVM字节码必须是纯文本才能执行,并且有几个程序可以对其进行反向工程(同样适用于.NET CLR)。你只会让看到和理解你的代码变得越来越困难(即成本)。

通常的方法是用一些工具对源代码进行obfuscate。在整个代码库中,类、方法和字段都会被重命名,即使您选择使用无效的标识符,这使得代码几乎无法理解。在过去,我使用JODE有很好的效果。在混淆之后,使用反编译器来查看代码是什么样子的…

除了模糊处理之外,你还可以用某种方法加密你的类文件(除了一个小的起始类),并使用一个自定义的类加载器来解密它们。不幸的是,类加载器类本身不能被加密,所以人们可以通过阅读类加载器的反编译代码来找出解密算法。但是攻击你的代码的窗口变小了。再说一次,这并不能阻止人们看到你的代码,只是增加了临时攻击者的难度。

您还可以尝试将Java应用程序转换为某些windows EXE,这将隐藏它是Java的线索(在某种程度上),或者真正编译为机器码,这取决于您对JVM功能的需求。(我没有尝试过这个。)

票数 3
EN

Stack Overflow用户

发布于 2009-05-29 01:56:43

GCJ是一个免费的工具,可以编译成字节码或本机代码。请记住,这在某种程度上违背了Java的目的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/919690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档