正如我们所知,有大量的Java反编译工具,可以的.class转换为java文件。
因此,我们需要保护我们的.java文件反编译反对。 我知道这是一个很大的话题,也许没有结局。
通常情况下,有两种方法:混淆和定制的类加载器。
有没有成熟的解决方案和开源框架,相结合的两种方式?
另一方面是与exe4j的,包装瓶为exe文件,该文件,好像它可以保护的Java代码相关的,因为我们可以看到的是exe文件,而不是罐子或类文件。 不过说实在的,当它运行时,它分解全部罐子文件到临时目录,这意味着它很容易得到的类文件反编译。 因此,对于保护的Java代码从exe4j的方面任何考虑?
感谢您的意见和建议。
更新
感谢大家对你的建议或经验分享。 这对我很有用处。 做一个总结,我会放弃任何混淆或自定义类加载器加密的东西。 因为最后的Java代码可以聪明的黑客之前予以披露。
我将使用的技巧,比如在C语言“#ifdef”之后,在编译时间删除一些核心代码。 在Java中,静态和最终布尔类变量可以用来做同样的工作。 然后compilered类文件将不包含需要保护的Java代码。
你不能保护类文件从反编译和恶意用户。 然而,反编译器的输出可能不是有效的Java。
最好的方法是记录您的API(假设这是供客户使用)和应用非常非常好。 和你的支持人员能够解决API和应用问题。 然后,您的客户将没有理由要使用反编译器,探讨为什么事情都无法正常工作。
- 您可以使用混淆,像ProGard或Ygard,但它不是太复杂,解密字符串和重命名类,字段和方法。
- 你可以用私钥加密你的类,并使用定制的ClassLoader加载到内存中之前用公钥来解密您的类,但它不是太复杂,修改类加载器保存到加载的所有类的光盘。
- 你可以试试撞车反编译。 JAD是最好的反编译器之一,但如果你在常量池添加条目损坏,所有产品搭载JAD崩溃。 然而,一些反编译器仍在工作。
保护你的软件的唯一方法,就是它在SaaS / PaaS的部署。
但是发奋图强:大多数人使用反编译器,因为他们有一个技术问题和文档较差或不存在。 写一个好的文档,并使用了坚实的EULA是更好的解决方案。
这是特别有效的唯一办法就是:把你的程序作为某种形式的网络服务,使编译后的代码是从来没有一个最终用户的机器上,甚至可用。
下一个最有效的解决方案,这是一个被广泛应用于实践,就是让你的程序太可怕了,没有人愿意使用它,或者花时间逆转摆在首位工程吧。 我怀疑,当发生这种情况通常是偶然的,但是。
事实上,不仅是Java的,Silverlight和闪光灯也有同样的问题。 任何人谁下载的软件包可以解压缩,然后反编译的反向工程的代码。
我同意萨斯将是最好的解决方案,具有web服务来处理所有的基础逻辑,并且提供数据建立一个相对固定&隔离层到最终客户消耗的数据。
我的建议是,如果你是这个认认真真的,你应该只演示软件发布给谁已经签署了一份具有法律约束力的保密协议的人。 并准备去法院,如果他们违反了协议。
通过一切手段,混淆您的演示应用等为好,但不要以为这将在应用程序中发现了“秘密武器”停止的黑客。 这是不可能的 ,以防止这种情况,在理论和实践。 如果你使用你的货币化软件的付费的许可模式盗版是必然的。
(实际上,它在理论上是可能的,但只有像一个完全安全的平台, TPM ,而这是不适合你的选择。相信我。)
怎么样加密你的类文件,并使用自定义类加载器加载类文件?
一切都是容易被破解。 只要有一个坚实的EULA,把工作在那里,而不是他们浪费无望试图保护的代码。