本文目录导读:

- 反编译 Java 包(.jar / .class)
- 反编译 Android 包(.apk)
- 反编译 .NET 包(.exe / .dll / .nupkg)
- 反编译 Python 包(.pyc / .pyo / .egg / .whl)
- 反编译 EXE 安装包(如 Inno Setup / NSIS)
- 总结 & 注意事项
反编译工具通常用于将已编译的代码(如 .class、.jar、.apk、.exe 或 .dll 文件)还原为可读的源代码(如 Java、C#、Python 字节码等),具体操作取决于你所要反编译的“包”类型(JAR 包、APK 包、NuGet 包等)。
以下是几种常见场景下的反编译方法和工具:
反编译 Java 包(.jar / .class)
这是最常见的需求之一,Java 的 .jar 文件本质是一个包含 .class 文件的 ZIP 压缩包。
推荐工具:
-
JD-GUI (图形界面,最直观)
- 步骤:
- 下载并打开 JD-GUI。
- 直接将
.jar文件拖入窗口,或点击File -> Open File选择xxx.jar。 - 左侧会显示包结构,点击类名,右侧会显示反编译出的
.java源代码。 - 点击
File -> Save All Sources可以导出全部源代码为.zip文件。
- 步骤:
-
CFR (命令行,对较新版本的 Java 特性支持最好)
- 步骤:
- 下载 CFR jar 文件(
cfr-0.152.jar)。 - 打开命令行(终端),执行:
java -jar cfr-0.152.jar xxx.jar --outputdir ./output
- 所有反编译出的
.java文件会放在./output目录下。
- 下载 CFR jar 文件(
- 步骤:
-
IntelliJ IDEA / Eclipse (专业 IDE 自带)
- 步骤:
- IntelliJ IDEA:双击任意
.class文件,IDE 会自动反编译并显示源代码(需要安装 Java Bytecode Decompiler 插件,通常默认自带)。 - Eclipse:安装 Enhanced Class Decompiler 插件,之后双击
.class文件即可。
- IntelliJ IDEA:双击任意
- 步骤:
手动解包先行(有时需要): 由于 JAR 是 ZIP 格式,在某些高级混淆(如字符串加密)情况下,可能先需要解压查看资源文件。
unzip xxx.jar -d ./extracted_folder
然后再针对解压出的 .class 文件使用反编译工具。
反编译 Android 包(.apk)
APK 包含 DEX 文件(Dalvik 字节码),需要专门的工具。
推荐工具:
-
jadx (最推荐,图形+命令行)
- 步骤:
- 下载 jadx-gui(Windows 下为
jadx-gui.bat)。 - 打开 jadx-gui,拖入
.apk文件。 - 自动分析并展示反编译后的 Java 源代码(也会包含资源文件
res/)。 - 点击
File -> Save as gradle project导出完整工程。
- 下载 jadx-gui(Windows 下为
- 步骤:
-
APKTool (主要用于解包资源,源代码反编译为 smali 汇编)
- 步骤:
apktool d xxx.apk -o ./output
- 这会解出资源文件和
smali/目录(汇编代码),如果需要 Java 源码,通常需要与 dex2jar + JD-GUI 组合使用,但 jadx 通常能一步到位。
- 步骤:
-
enjarify / dex2jar + JD-GUI (老式方法)
- 将 DEX 转为 JAR:
d2j-dex2jar.sh xxx.apk - 使用 JD-GUI 反编译生成的
xxx-dex2jar.jar。
- 将 DEX 转为 JAR:
注意:APK 经常经过混淆(如 ProGuard),反编译后会出现
a、b等无意义类名和变量名,代码逻辑也会被打乱。
反编译 .NET 包(.exe / .dll / .nupkg)
.NET 编译成 MSIL (CIL) 中间语言,反编译恢复度高。
推荐工具:
-
dnSpy / ILSpy (业界标准)
- 步骤:
- 打开 dnSpy。
- 拖入
.exe或.dll文件,或者点击File -> Open。 - 左侧树状菜单会显示命名空间、类、方法,双击任何方法即可查看反编译后的 C# 或 VB.NET 代码。
- 可以修改代码并重新编译(右键 ->
Edit Method-> 修改后按Compile,File -> Save Module)。
- 步骤:
-
dotPeek (JetBrains 出品,免费但不开源)
类似 dnSpy,同样支持直接查看源码和导出项目。
反编译 Python 包(.pyc / .pyo / .egg / .whl)
Python 打包后通常是源码或字节码。
-
如果你的包是
.whl或.egg: 它们本质是 ZIP 包,直接重命名为.zip并解压即可看到.py文件。 -
如果只有
.pyc文件(编译后的字节码):- Python 3.9+:使用
pycdc或decompyle3(成功率较高)。# 安装 decompyle3 pip install decompyle3 # 反编译 decompyle3 xxx.pyc > xxx.py
- Python 2.7:使用
uncompyle6。 - 工具:PyLingual (在线网站,支持多种 Python 版本)。
- Python 3.9+:使用
反编译 EXE 安装包(如 Inno Setup / NSIS)
这类不是代码编译,而是安装脚本打包。
- Inno Setup Unpacker:
innoextract或innounp。 - NSIS:使用
7-Zip打开或使用nsis_unpacker。 - 通用:使用 Resource Hacker 查看资源,但通常很难得到原始代码。
& 注意事项
- 先看格式,再选工具:右键查看文件属性,确认它是 JAR、APK、DLL 还是 ZIP。
- 混淆与加密:商业软件或恶意软件通常会混淆、加壳、或使用
ProGuard、Obfuscator、VMProtect等,反编译后代码可读性会非常差,甚至报错,你可能需要额外进行脱壳操作(比如针对 APK 使用Frida)。 - 法律风险:请确保你有权反编译这个包(例如你自己的代码、开源软件、或出于安全研究目的),反编译受版权保护的商业软件可能涉及法律问题。
- 命令行万能公式:如果提供命令的工具(CFR/APKTool/jadx)操作正确但报错,通常是因为版本的兼容性问题,请尽量保持工具版本最新,并确认你输入的路径正确。
快速选择:
- 见到
.jar-> JD-GUI - 见到
.apk-> jadx-gui - 见到
.dll或.exe-> dnSpy - 见到
.pyc-> decompyle3 - 见到
.whl/.egg-> 改成.zip解压即可
标签: 反编译工具