个性化阅读
专注于IT技术分析

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反编译器2

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

Java反编译器3

步骤6:输入命令:jad DecompilerDemo

Java反编译器4

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

Java反编译器5

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

Java反编译器6

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

Java反编译器7

打开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.java
import 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反编译器8

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


赞(0)
未经允许不得转载:srcmini » Java反编译器

评论 抢沙发

评论前必须登录!