【发布时间】:2017-05-21 17:35:44
【问题描述】:
我知道这是一个很常见的问题,一个很好的话题其实就在这里:
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 文件来说已经足够了
【问题讨论】:
-
使用 Java 8 会使不支持它的反编译器感到困惑。 Fernflower(内置于 InteliJ)似乎可以很好地处理 Java 8。
标签: java jar decompiler