如何从“受保护的”JAR 文件中获取类?

逆向工程 爪哇 反编译
2021-07-08 11:13:05

我正在尝试从 JAR 文件/实际运行的 JVM 机器中获取类,但是:

当我尝试使用例如 7Zip 打开 JAR 文件时,我看不到任何类。解压后 Manifest 文件也是空的。

当我试图从正在运行的 JVM 机器“转储”类时,我得到了“非常有趣”的命名 - 空类(不是真正的空,但包含诸如“gtfo”等信息。)

JD-Gui 什么也没显示——什么也没显示。

大约一个月前,当我尝试使用 7Zip 打开它时,有同名的类和自定义扩展名。

我应该怎么做,您推荐哪些工具来执行此类操作?

链接:https : //drive.google.com/file/d/1qhfEXu-ITQLW1mi55hMqnHmWt9BM5ur3/view

编辑:我测试的每个反编译器都显示如下信息:

mv.visitMethodInsn(INVOKESTATIC, "net/minecraft/client/main/Main", "\u0000extends throws try goto 8 \n 9 * package * + finally return static * " float abstract |瞬态\n同步捕获=strictfp瞬态静态扩展而 final long ! 0 抛出 & \n % double 4 this if const \n interface ' ^ ~ do 1 ] % ? throws super long", "(Ljava/lang/String;)Ljava/lang/String;", false)

1个回答

混淆器可能使用了 '\u0000' “exploit”。该字符称为 NUL 终止符,用于终止 C/C++ 中字符串的长度。所有重命名的类都将包含该字符,这会混淆 7Zip、WinRar 等工具。

快速解释:

========

原始文件名:

  1. 主类
  2. Main2.class
  3. Main3.class

重命名的文件名:

  1. Main.class\u0000.class -> 7Zip -> Main.class (\u0000 是字符串结尾所以其他字符不会显示)
  2. Main.class\u0000 2 .class -> 7Zip -> Main.class
  3. Main.class\u0000 3 .class -> 7Zip -> Main.class

========

尝试使用https://github.com/TerriblePanda/JByteMod-Rebornhttps://github.com/GraxCode/threadtear来反编译您的 jar。

可能使用的混淆器:https : //paramorphism.dev/