强烈推荐的一款 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
}


相关文章
|
9天前
|
人工智能 缓存 监控
使用LangChain4j构建Java AI智能体:让大模型学会使用工具
AI智能体是大模型技术的重要演进方向,它使模型能够主动使用工具、与环境交互,以完成复杂任务。本文详细介绍如何在Java应用中,借助LangChain4j框架构建一个具备工具使用能力的AI智能体。我们将创建一个能够进行数学计算和实时信息查询的智能体,涵盖工具定义、智能体组装、记忆管理以及Spring Boot集成等关键步骤,并展示如何通过简单的对话界面与智能体交互。
171 1
|
6月前
|
监控 Java Unix
6个Java 工具,轻松分析定位 JVM 问题 !
本文介绍了如何使用 JDK 自带工具查看和分析 JVM 的运行情况。通过编写一段测试代码(启动 10 个死循环线程,分配大量内存),结合常用工具如 `jps`、`jinfo`、`jstat`、`jstack`、`jvisualvm` 和 `jcmd` 等,详细展示了 JVM 参数配置、内存使用、线程状态及 GC 情况的监控方法。同时指出了一些常见问题,例如参数设置错误导致的内存异常,并通过实例说明了如何排查和解决。最后附上了官方文档链接,方便进一步学习。
668 4
|
5月前
|
机器学习/深度学习 消息中间件 存储
【高薪程序员必看】万字长文拆解Java并发编程!(9-2):并发工具-线程池
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的强力并发工具-线程池,废话不多说让我们直接开始。
193 0
|
4月前
|
Java 数据安全/隐私保护 计算机视觉
银行转账虚拟生成器app,银行卡转账截图制作软件,java实现截图生成工具【仅供装逼娱乐用途】
本内容提供Java生成自定义图片的示例代码,涵盖基础图像创建、文本添加及保存功能,适合学习2D图形编程。包括教学示例图片生成、文本图层处理和数字水印技术实现方案。
|
4月前
|
安全 Java 编译器
JD-GUI,java反编译工具及原理: JavaDecompiler一个Java反编译器
Java Decompiler (JD-GUI) 是一款由 Pavel Kouznetsov 开发的图形化 Java 反编译工具,支持 Windows、Linux 和 Mac Os。它能将 `.class` 文件反编译为 Java 源代码,支持多文件标签浏览、高亮显示,并兼容 Java 5 及以上版本。JD-GUI 支持对整个 Jar 文件进行反编译,可跳转源码,适用于多种 JDK 和编译器。其原理基于将字节码转换为抽象语法树 (AST),再通过反编译生成代码。尽管程序可能带来安全风险,但可通过代码混淆降低可读性。最新版修复了多项识别错误并优化了内存管理。
1967 1
|
4月前
|
Java 数据安全/隐私保护
银行转账虚拟生成器app,银行卡转账截图制作软件,java实现截图生成工具【仅供装逼娱乐用途】
本项目提供了一套基于Java的图片处理教学方案,包含自定义图片生成、图像水印添加及合法电子凭证生成技术示例。
|
11月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
212 9
|
12月前
|
监控 Java 测试技术
Java开发现在比较缺少什么工具?
【10月更文挑战第15天】Java开发现在比较缺少什么工具?
137 1
|
10月前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
1995 65
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
11月前
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
250 83