Java反编译器

Java Decompiler是一种特殊的反编译器, 它将类文件作为输入并产生Java源代码作为输出。反编译恰恰是相反的编译过程。因此, 反编译器不会生成源代码的副本。这是因为在程序编译期间源代码中丢失了一些信息。
但是有很多复杂性, 例如, Java代码是结构化的, 而字节码不是结构化的。而且, 转换不是一对一的:两个不同的Java程序可能会产生相同的字节码。
有以下可用的Java反编译器:

  • DJ Java反编译器
  • JReversePro
  • 乔德
  • JD-CORE / JD-GUI / JD Eclipse
JAD反编译器 JAD是一个命令行应用程序。它是用C ++编写的。主要功能是反汇编.class文件。可以从控制台部署JAD, 它将Java类反编译为源代码。这样, 开发人员可以深入研究Java运行时库的代码, 甚至美化行, 为重新编译做准备。存在覆盖源代码文件的风险, 尤其是在使用’ -o’ (覆盖未经确认的输出文件)参数时, 尤其如此。

让我们创建一个简单的Java程序, 将两个数字相加。
import java.util.*; class DecompilerDemo{public static void main(String args[]){int a, b, c; Scanner sc=new Scanner(System.in); System.out.print("Enter the value of a: "); a=sc.nextInt(); System.out.print("Enter the value of b: "); b=sc.nextInt(); c=a+b; System.out.println("sum of a and b is: "+c); }}

请按照以下步骤将.class转换为可读的Java源代码。在这里, 我们正在使用JAD反编译器。
步骤1:从https://bit.ly/2XuRzT5下载JAD工具
步骤2:解压缩zip文件并获取jad.exe。
Java反编译器

文章图片
步骤3:在提取zip文件的同一文件夹中创建一个.java文件(DecompilerDemo.java)。
步骤4:编译并运行.java文件。它将在相应的文件夹中生成一个.class文件。
Java反编译器

文章图片
步骤5:现在将.class文件和jad应用程序移动到另一个文件夹。
Java反编译器

文章图片
步骤6:输入命令:jad DecompilerDemo
Java反编译器

文章图片
上面的命令在相应的文件夹中生成一个.jad文件。
Java反编译器

文章图片
步骤7:键入命令:jad?s java DecompilerDemo
Java反编译器

文章图片
它在同一文件夹中生成.java文件。
Java反编译器

文章图片
打开DecompilerDemo.java, 我们得到以下代码:
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.// Jad home page: http://www.kpdus.com/jad.html// Decompiler options: packimports(3) // Source File Name:DecompilerDemo.javaimport java.io.PrintStream; import java.util.Scanner; class DecompilerDemo{DecompilerDemo(){}public static void main(String args[]){Scanner scanner = new Scanner(System.in); System.out.print("Enter the value of a: "); int i = scanner.nextInt(); System.out.print("Enter the value of b: "); int j = scanner.nextInt(); int k = i + j; System.out.println((new StringBuilder()).append("sum of a and b is: ").append(k).toString()); }}

我们可以观察到, 编写的.java文件与生成的.java文件不同, 但是输出相同。
Java类文件反汇编程序
javap命令
javap是JDK随附的Java命令行工具。它用于反汇编类文件并打印该类的可读版本。其输出取决于所使用的选项。不使用任何选项, javap将打印传递给它的类的包, 受保护的字段和公共字段以及方法。如果你没有用于创建该类的源代码, 则还可以使用javap找出可用于该类的方法。 javap命令的一般格式为:
javap [options] filename

选件
使用javap命令, 可以使用许多选项。他们之中有一些是:
  • -c:打印反汇编的代码。
  • -p:显示所有类和成员。
  • -s:打印内部类型签名。
  • -constants:显示静态最终常量。
使用javap命令反汇编类文件
class DisassembleDemo{public static void main(String args[]){System.out.println("Java"); }}

生成上述程序的类文件, 并使用以下命令反汇编该类文件。
javap -c -p DisassembleDemo

输出量
以下输出显示了类文件中包含的内容。
Java反编译器

文章图片
【Java反编译器】但是, 我们无法使用javap命令获得Java源代码。因此, 有许多反编译器可以将.cl??ass文件转换为.java文件。

    推荐阅读