强烈推荐的一款 Java 反编译工具:JAD

简介: 强烈推荐的一款 Java 反编译工具:JAD

01、JAD 是什么


JAD 是一款老牌的、经典的、使用起来简单的 Java 反编译工具。大家都知道,将源代码转换成二进制执行代码的过程叫“编译”,比如将 Java 源代码编译成 .class 字节码文件;那么把字节码文件转换成代码的过程就叫“反编译”。


JAD 镜像下载的官网是 https://varaneckas.com/jad/


如果镜像的链接地址失效了,请使用下面这个链接下载:https://download.csdn.net/download/qing_gee/10921233


02、JAD 的环境变量配置


下载好 JAD 并解压后(镜像),你将看到:


jad.exe (无法直接运行)

Readme.txt (使用说明)

为了更便捷的使用 jad,我们可以将其加入到环境变量中。


新建 JAD_HOME 环境变量。

image.png

加入到系统 PATH 变量中。

image.png


03、JAD 的使用方法


假如有这样一段代码。


package com.cmower.java_demo.fourteen;
public class Cmower3 {
  public static void main(String[] args) {
  String cmowers = "";
  for (int i = 0; i < 10; i++) {
    cmowers += "沉默王二";
  }
  System.out.println(cmowers);
  }
}


保存后的文件名为 Cmower3.java。


打开 CMD,进入该文件所在的路径(如果之前未编译,请先使用 javac 进行编译,生成 class 文件),输入以下命令:


jad Cmower3.class

1

如果提示信息如下,则证明反编译成功。


Parsing Cmower3.class... Generating Cmower3.jad

1

与此同时,Cmower3.class 所在的文件夹下会多出来一个新的文件 Cmower3.jad,用文本编辑器打开即可查看。


// 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:   Cmower3.java
package com.cmower.java_demo.fourteen;
import java.io.PrintStream;
public class Cmower3
{
    public Cmower3()
    {
    }
    public static void main(String args[])
    {
        String s = "";
        for(int i = 0; i < 10; i++)
            s = (new StringBuilder()).append(s).append("\u5A0C\u5910\u7CAF\u941C\u5B29\u7C29").toString();
        System.out.println(s);
    }
}


04、和 JD-GUI 的不同之处


需要注意的是:JAD 不是 JD-GUI,两者都是反编译工具,但并不相同。


比如上面这段代码,JD-GUI 反编译后的结果如下所示:

image.png



可以看得出来,JD-GUI 显示的是最原始的 Java 源代码。而 JAD 显示的是更贴近事实的源代码:+ 号操作符在编译的时候其实是会转成 StringBuilder 的。


这特别的关键,如果你想知道编译器的工作内容,就可以使用 JAD。就像 javap 一样,只不过更加的清晰明了,javap 一般人看不太懂,如下:


D:\program\java.git\java_demo\src\main\java\com\cmower\java_demo\fourteen>javap -c Cmower3

警告: 二进制文件Cmower3包含com.cmower.java_demo.fourteen.Cmower3

Compiled from "Cmower3.java"
public class com.cmower.java_demo.fourteen.Cmower3 {
  public com.cmower.java_demo.fourteen.Cmower3();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return
  public static void main(java.lang.String[]);
    Code:
       0: ldc           #2                  // String
       2: astore_1
       3: iconst_0
       4: istore_2
       5: iload_2
       6: bipush        10
       8: if_icmpge     37
      11: new           #3                  // class java/lang/StringBuilder
      14: dup
      15: invokespecial #4                  // Method java/lang/StringBuilder."<init>":()V
      18: aload_1
      19: invokevirtual #5                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      22: ldc           #6                  // String 娌夐粯鐜嬩簩
      24: invokevirtual #5                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      27: invokevirtual #7                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      30: astore_1
      31: iinc          2, 1
      34: goto          5
      37: getstatic     #8                  // Field java/lang/System.out:Ljava/io/PrintStream;
      40: aload_1
      41: invokevirtual #9                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
      44: return
}


相关文章
|
3月前
|
数据采集 编解码 Java
解锁Hutool魔法箱:Java开发者不可错过的神奇工具集
解锁Hutool魔法箱:Java开发者不可错过的神奇工具集
70 0
|
2月前
|
Java
java中日期处理的一些工具方法
java中日期处理的一些工具方法
20 1
|
3天前
|
Java
探索Java世界的奇妙工具——运算符与表达式运算符
探索Java世界的奇妙工具——运算符与表达式运算符
5 0
|
13天前
|
算法 安全 Java
性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
【4月更文挑战第28天】性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
30 1
性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
|
5天前
|
存储 安全 Java
深入理解Java字节码与反编译技术
深入理解Java字节码与反编译技术
13 0
|
5天前
|
监控 Java Maven
揭秘Java Agent技术:解锁Java工具开发的新境界
作为JDK提供的关键机制,Java Agent技术不仅为Java工具的开发者提供了一个强大的框架,还为性能监控、故障诊断和动态代码修改等领域带来了革命性的变革。本文旨在全面解析Java Agent技术的应用场景以及实现方式,特别是静态加载模式和动态加载模式这两种关键模式。
27 0
|
14天前
|
Arthas 监控 IDE
去哪儿网开源的一个对应用透明,无侵入的Java应用诊断工具
今天 V 哥给大家带来一款开源工具Bistoury,Bistoury 是去哪儿网开源的一个对应用透明,无侵入的java应用诊断工具,用于提升开发人员的诊断效率和能力。
|
1月前
|
IDE Java 开发工具
Lombok 详解:简化 Java 开发的神奇工具
Lombok 是一款 Java 工具,通过注解自动处理如 getter/setter、toString、equals 和 hashCode 等常见代码,减少样板代码。安装 Lombok 需要在 IDE(如 IntelliJ IDEA)中添加插件,并在 Maven 或 Gradle 项目中配置依赖。常用注解包括 @Getter/@Setter 生成访问器,@ToString 生成对象描述,@EqualsAndHashCode 生成比较方法,@NoArgsConstructor/@AllArgsConstructor 生成构造器,@Data 综合应用这些注解。
116 9
|
1月前
|
监控 Java
Java项目jar性能监控工具CPU内存等
Java项目jar性能监控工具CPU内存等
17 0