Java Decompiler

2025年3月17日 | 阅读 3 分钟

Java 反编译工具是一种特殊的反编译工具,它以 class 文件为输入,以 Java 源代码为输出。反编译正是编译过程的逆过程。因此,反编译工具不会产生源代码的副本。这是因为在编译程序的过程中,一部分信息会从源代码中丢失。

但是有很多复杂性,例如,Java 代码是有结构的,而字节码则没有结构。此外,转换不是一对一的:两个不同的 Java 程序可能会产生相同的字节码。

以下是可用的 Java 反编译工具:

  • DJ Java Decompiler
  • JReversePro
  • JODE
  • JD-CORE/ JD-GUI/ JD Eclipse

JAD Decompiler

JAD 是一个命令行应用程序。它用 C++ 编写。主要功能是反汇编 .class 文件。JAD 可以从控制台部署,并将 Java 类反编译为源代码。通过这种方式,开发人员可以深入了解 Java 运行时库的代码,甚至美化代码,为重新编译做准备。存在覆盖源代码文件的风险,尤其是在使用 '-o'(无需确认即可覆盖输出文件)参数时。

示例

让我们创建一个简单的 Java 程序来添加两个数字。

请按照以下步骤将 .class 文件转换为可读的 Java 源代码。这里我们使用 JAD 反编译工具。

步骤 1:https://bit.ly/2XuRzT5 下载 JAD 工具

步骤 2: 解压缩 zip 文件并获取 jad.exe。

Java Decompiler

步骤 3: 在您解压缩 zip 文件的同一文件夹中创建一个 .java 文件(DecompilerDemo.java)。

步骤 4: 编译并运行 .java 文件。它将在相应的文件夹中生成一个 .class 文件。

Java Decompiler2

步骤 5: 现在将 .class 文件和 jad 应用程序移动到另一个文件夹。

Java Decompiler3

步骤 6: 输入命令:jad DecompilerDemo

Java Decompiler4

上面的命令将在相应的文件夹中生成一个 .jad 文件。

Java Decompiler5

步骤 7: 输入命令:jad ?s java DecompilerDemo

Java Decompiler6

它将在同一文件夹中生成 .java 文件。

Java Decompiler7

打开 DecompilerDemo.java,我们得到以下代码

我们可以观察到,编写的 .java 文件与生成的 .java 文件不同,但输出相同。

Java 类文件反汇编器

javap 命令

javap 是一个随 JDK 附带的 Java 命令行工具。它用于反汇编类文件并打印该类的可读版本。其输出取决于使用的选项。不使用任何选项时,javap 会打印传递给它的类的包、受保护的以及公共的字段和方法。如果您没有用于创建类的源文件,javap 也可用于查找一个类可用的方法。javap 命令的一般格式是

选项

javap 命令提供了许多选项。其中一些是

  • -c: 打印反汇编的代码。
  • -p: 显示所有类和成员。
  • -s: 打印内部类型签名。
  • -constants: 显示静态 final 常量。

使用 javap 命令反汇编类文件

生成上述程序的类文件,并使用以下命令反汇编类文件。

输出

以下输出显示了类文件内部的内容。

Java Decompiler8

但是我们无法通过使用 javap 命令获得 Java 源代码。因此,有许多反编译工具可以将 .class 文件转换为 .java 文件。


下一主题#