我知道这是一个很常见的问题,这里有一个很好的话题:
How to lock compiled Java classes to prevent decompilation?
但我要求的是一些不同的东西,不是绝对的保护,至少是一些防止反编译的基本保护。
我用一些.jar文件尝试过像JD和Jode这样的反编译程序,它们无法对所有的.java类进行反编译,在其中许多类中,我得到了一个错误,还有许多只是一个非常基本的代码。
他们是如何保护jar文件不受反编译器的影响?当我在jar中使用相同的反编译器时,所有的类都会使用完整的细节进行解压缩。
基本上,我的问题是,是什么导致了这些反编译程序的错误?是因为java类是加密的吗?
编辑:
我注意到Jode在一些java文件中显示了这个错误:
Exception while decompiling:java.lang.NoClassDefFoundError: [package.ClassName]
at jode.bytecode.ClassInfo.loadInfo(ClassInfo.java:631)
at jode.decompiler.ClassAnalyzer.<init>(ClassAnalyzer.java:86)
at jode.decompiler.ClassAnalyzer.<init>(ClassAnalyzer.java:123)
at jode.decompiler.Decompiler.decompile(Decompiler.java:191)
at jode.swingui.Main.run(Main.java:204)
at java.lang.Thread.run(Unknown Source)也尝试使用FernFlower反编译程序,但有以下错误:
java.lang.ClassCastException: g cannot be cast to T
at bK.a(Unknown Source)
at T.a(Unknown Source)
at bK.<init>(Unknown Source)
at bW.a(Unknown Source)
at bW.<init>(Unknown Source)
at bW.<init>(Unknown Source)
at i.a(Unknown Source)
at i.a(Unknown Source)
at i.a(Unknown Source)
at de.fernflower.main.decompiler.ConsoleDecompiler.addSpace(Unknown Source)
at de.fernflower.main.decompiler.ConsoleDecompiler.main(Unknown Source)那里有什么保护措施?我觉得这对我的jar文件来说已经足够了
发布于 2017-05-21 18:00:04
一个非常简单的方法是将lambda添加到您的类中。许多反编译器无法处理lambdas。您可以做的另一件事是给类一个Unicode名称,特别是使用星体字符的名称。Unicode类名很难正确实现,所以大多数反编译程序都不这样做。使用资源进行尝试是另一件好事,因为它很复杂,而且在普通Java代码中没有任何等效的地方。
这不会破坏一个好的反编译器,但这不是你想要的。
发布于 2017-05-21 17:44:47
看看这个http://www.thegeekstuff.com/2008/06/protect-your-java-code-from-reverse-engineering.If,您可以以JAR的形式发布一个程序,您实际上已经失去了控制。这个程序可以修改/复制。您唯一能做的就是通过混淆代码或类似的技术来使这些事情变得更加困难。
https://stackoverflow.com/questions/44099855
复制相似问题