JD-GUI 是一款流行的图形用户界面工具,能够直接查看 .class 文件、.jar、.war 和 .zip 等归档文件中的 Java 源代码,它将编译后的字节码转换回可读的 Java 代码,对于学习、调试、逆向工程和代码恢复非常有用。

(图片来源网络,侵删)
JD-GUI 是什么?为什么用它?
- 定义: JD-GUI 是一个独立的应用程序,用于查看 Java 源代码。
- 核心功能: 它通过反编译
class文件,将 Java 字节码转换回近似于原始的 Java 源代码。 - 主要用途:
- 学习: 查看第三方库(如 Spring, MyBatis)的源码,了解其内部实现原理(当没有提供源码时)。
- 调试: 当你只有
.jar包而没有源码和调试信息(.pdb或.map文件)时,可以查看代码逻辑,辅助定位问题。 - 逆向工程: 分析一个你拥有的软件是如何工作的。
- 代码恢复: 如果你丢失了项目的源代码,但还有编译好的
.jar或.class文件,可以尝试用它来恢复代码。 - 安全审计: 分析恶意软件或存在漏洞的 Java 应用程序。
如何下载和安装 JD-GUI?
使用 JD-GUI 非常简单,因为它是一个绿色软件,无需复杂安装。
-
访问官网:
- 打开浏览器,访问 JD-GUI 的官方发布页面:https://github.com/java-decompiler/jd-gui/releases
-
选择版本:
- 你会看到不同操作系统的版本,
jd-gui-windows-x64-1.6.6.zip(Windows 64位),jd-gui-linux-x64-1.6.6.tar.gz(Linux 64位),jd-gui-osx-x64-1.6.6.dmg(macOS)。 - 根据你的操作系统选择对应的最新稳定版下载。
- 你会看到不同操作系统的版本,
-
安装/解压:
(图片来源网络,侵删)- Windows: 下载
.zip文件,直接解压即可,进入解压后的文件夹,找到jd-gui.exe文件。 - Linux: 下载
.tar.gz文件,使用命令tar -zxvf jd-gui-linux-x64-1.6.6.tar.gz解压。 - macOS: 下载
.dmg文件,双击挂载,然后将 JD-GUI 应用程序拖拽到你的Applications文件夹。
- Windows: 下载
完成! 这就是全部的安装过程。
如何使用 JD-GUI?(详细步骤)
以 Windows 系统为例,使用流程非常直观。
步骤 1: 启动 JD-GUI
双击运行 jd-gui.exe 程序,你会看到一个简洁的界面,通常包含菜单栏和主窗口。
步骤 2: 打开文件或文件夹
你有两种主要方式来加载需要反编译的 Java 代码:

(图片来源网络,侵删)
打开单个文件
- 点击菜单栏的
File->Open File...(或者直接将.class文件拖拽到 JD-GUI 窗口中)。 - 在弹出的文件选择对话框中,选择你想要反编译的
.class文件。 - JD-GUI 会立即在右侧窗口中显示反编译后的 Java 源代码。
打开整个归档文件(最常用)
- 点击菜单栏的
File->Open Archive...(或者直接将.jar,.war,.zip文件拖拽到窗口中)。 - 选择你的归档文件(
my-app.jar)。 - JD-GUI 会像一个文件管理器一样,在左侧显示归档文件内部的目录结构,并在右侧显示你选中文件的反编译代码。
步骤 3: 查看和导航代码
- 浏览代码: 在左侧的包/文件树中点击不同的类,右侧会立即显示其对应的反编译代码。
- 查看内部类: 如果一个类包含内部类,它们会像嵌套结构一样显示在左侧树中。
- 代码格式化: JD-GUI 会自动格式化代码,使其具有良好的可读性,包括缩进和换行。
- 搜索功能: 你可以使用
Ctrl+F(或Cmd+F在 Mac 上) 在当前反编译的文件中搜索文本。
步骤 4: 保存反编译的代码
如果你想把反编译的代码保存下来以便离线查看或进一步分析:
- 在左侧文件树中,选择一个或多个你想要保存的类(可以按住
Ctrl或Shift多选)。 - 点击菜单栏的
File->Save All Sources...。 - 选择一个文件夹,JD-GUI 会将所有选中的类保存为
.java文件,并保持原有的包目录结构。
高级功能和技巧
-
设置:
- 点击菜单栏的
Settings->Preferences。 - 在这里你可以调整字体大小、主题(亮色/暗色)、代码缩进等。
- 你还可以选择不同的反编译器后端(如
Fernflower或CFR),不同的引擎在处理某些复杂代码时的效果可能略有不同。
- 点击菜单栏的
-
查看字节码:
- JD-GUI 不仅显示源码,还允许你查看原始的字节码。
- 在代码窗口中,右键点击,选择
Show bytecode,这对于深入理解 JVM 和进行底层调试非常有帮助。
-
拖拽操作:
- 如前所述,直接将
.class或.jar文件拖到 JD-GUI 窗口是最快的方式。
- 如前所述,直接将
重要注意事项与局限性
-
代码不完美: 反编译的代码是近似于原始源码的,不一定是 100% 准确的。
- 变量名丢失: 编译后的字节码不包含原始的变量名和方法名,JD-GUI 会自动生成通用的名称(如
param1,field1,method_1()),这是反编译固有的最大限制。 - 逻辑可能改变: 对于非常复杂的逻辑(如
goto语句、异常处理等),反编译后的代码流程可能与原始代码不完全一致。 - 注释和注解: 通常会丢失。
- 变量名丢失: 编译后的字节码不包含原始的变量名和方法名,JD-GUI 会自动生成通用的名称(如
-
反编译器引擎: JD-GUI 默认使用
Fernflower作为反编译引擎,你也可以尝试其他优秀的反编译工具,如:- CFR: https://www.benf.org/other/cfr/ (通常被认为反编译质量很高)
- Procyon: https://github.com/Procyon-IDE/Procyon
-
法律和道德:
- 仅用于你拥有所有权的软件,请勿使用 JD-GUI 来反编译你没有授权的商业软件,这可能违反软件许可协议和相关法律。
- 尊重知识产权,反编译的代码仅用于学习和分析目的,不应直接用于商业产品中。
JD-GUI 是一个功能强大且易于使用的 Java 反编译工具,是任何 Java 开发者工具箱中的利器,掌握它可以让你在没有源码的情况下,也能窥探 Java 世界的奥秘,记住它的局限性,并合法合规地使用它,你就能充分发挥它的价值。
