java 如何保护jar免受“简单/容易”的反编译

4ioopgfo  于 2022-12-21  发布在  Java
关注(0)|答案(2)|浏览(209)

我知道这是一个很常见的问题,一个很好的主题其实就在这里:
How to lock compiled Java classes to prevent decompilation?
但我要求的是不同的东西,不是绝对的保护,但至少有一些基本的保护反编译器。
我试过一些反编译器,如JD和Jode与一些. jar文件,他们不能反编译所有的. 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文件来说已经足够好了

smdncfj3

smdncfj31#

一个非常简单的方法是给你的类添加lambda。很多反编译器不能处理lambda。你可以做的另一件事是给予你的类一个Unicode名字,特别是使用星形字符的。Unicode类名很难正确实现,所以大多数反编译器不会。尝试资源是另一个值得尝试的好事情,因为它很复杂,在普通Java代码中没有任何等价物。
这不会破坏一个好的反编译器,但这不是你所要求的。

axr492tv

axr492tv2#

看看这个http://www.thegeekstuff.com/2008/06/protect-your-java-code-from-reverse-engineering。如果你以JAR的形式发布一个程序,你实际上就失去了控制。这个程序可以被修改/复制。你唯一能做的就是通过混淆代码或类似的技术使这些事情变得更难。

相关问题