Java 反混淆器支持变量重命名?

Java deobfuscator supporting variable renaming?

我正在尝试对 .jar 文件(基本上是一组 .class 文件)进行逆向工程。但是,有两个难点:

  1. 部分变量、方法和类命名为unicode字符,无法正常显示。这使得源代码编辑非常不方便。

  2. 一些 类 以 Java 关键字命名 (例如 if)。因此 Java 编译器在重新编译反向工程源文件时会报错。

是否有任何 Java 反混淆器可以克服这些困难?

有几种工具可以重命名 Java 标识符。例如,您可以只 运行 Proguard 重命名所有内容。

话虽这么说,我建议重新考虑您的方法。 Java 编译和反编译都是有损过程。反编译对于逆向工程很有用,但你一般不能指望能够重新编译反编译后的代码。如果之前被混淆过,那你还是算了吧。

修改混淆代码的最佳方法是使用Krakatau assembler and disassembler。 Krakatau 程序集可以可逆地转换为字节码和从字节码转换,这意味着您可以编辑任意 类 而不会搞砸,无论它们如何被混淆。唯一的缺点是您必须熟悉 Java 字节码。

Cuchaz 的 Enigma 支持重命名局部变量。它不再更新并在 BCEL 上运行,BCEL 也不再更新。只要你不反编译任何 BCEL 无法处理的东西,它应该可以正常工作。