jar-analyzer / jar-obfuscator

Jar Obfuscator - 一个 JAR/CLASS 字节码混淆工具,支持包名/类名/方法名/字段名/参数名引用分析和重命名混淆方式,支持字符串加密/整型异或混淆/垃圾代码花指令混淆/等方式,支持方法和字段的隐藏,支持 NATIVE 层的 JVMTI 代码加密,配置简单,文档教程齐全,容易上手
MIT License
313 stars 29 forks source link

[BUG] 类名混淆后启动时 NoClassDefFoundError #12

Closed SuXuan520 closed 3 months ago

SuXuan520 commented 4 months ago

使用类名混淆 会提示找不到这个类

SuXuan520 commented 4 months ago

Exception in thread "Client thread" java.lang.NoClassDefFoundError: cn/hackedmc/apotheosis/util/interfaces/InstanceAccess at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1022) at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800) at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527) at net.minecraft.client.main.Main.main(Main.java:101) Caused by: java.lang.ClassNotFoundException: cn.hackedmc.apotheosis.util.interfaces.InstanceAccess at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527) ... 10 more Exception in thread "Client Shutdown Thread" java.lang.NoClassDefFoundError: cn/hackedmc/apotheosis/util/interfaces/InstanceAccess at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1022) at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800) at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527) at net.minecraft.client.main.Main$2.run(Main.java:97) Caused by: java.lang.ClassNotFoundException: cn.hackedmc.apotheosis.util.interfaces.InstanceAccess at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527) ... 10 more

4ra1n commented 4 months ago

注意配置 obfuscatePackage 填写你需要混淆的包名 rootPackages 填写你项目的根包(分析和修改引用的范围)

例如你需要混淆 cn.hackedmc.apotheosis 包,你的 cn.hackedmc.xxx.A 类调用了 cn.hackedmc.apotheosis.B 但是你不需要混淆 cn.hackedmc 下的其他包只需要混淆 apotheosis 包。理论上正确配置 obfuscatePackage: [ cn.hackedmc.apotheosis ]rootPackages: [ cn.hackedmc ] 即可做到混淆 apotheosis 下类的同时修改 cn.hackedmc.Any 的引用

如果按照我这样的做法还是有问题,可以再反馈细节

如果你觉得麻烦,要最简单快速的混淆,参考 README

以下混淆不修改引用,相对稳定靠谱,如遇报错可以搭配使用以下配置
- 开启 enableEncryptString 和 enableAdvanceString 加密字符串
- 开启 enableJunk 花指令混淆
- 开启 enableXOR 对数字进行异或加密