资讯动态

【2026亲测】UPX + JADX 安装使用教程|Windows 可执行文件压缩/解压与 Android APK 反编译

发布时间:2026/8/10 10:02:29 来源:尧图企业网站定制
【2026亲测】UPX JADX 安装使用教程Windows 可执行文件压缩/解压与 Android APK 反编译本文整理两个在软件分析、Android 开发与逆向分析中非常常见的工具UPX和JADX。文章主要以 Windows 10 / Windows 11 为例介绍下载、安装、环境变量配置、常用命令以及 APK 反编译的基本流程。截至本文整理时GitHub 最新正式版UPX5.2.0JADX1.5.6官方项目地址UPXhttps://github.com/upx/upxJADXhttps://github.com/skylot/jadx一、UPX 和 JADX 分别是做什么的很多第一次接触 Android 逆向或者程序分析的朋友会把 UPX、JADX、Apktool、IDA 等工具混在一起。实际上它们的用途完全不同。1. UPXUPX 全称UPX - the Ultimate Packer for eXecutables它本质上是一个可执行文件压缩工具 / Packer。可以用于压缩Windows EXEWindows DLLLinux ELF部分其他可执行文件例如一个几十 MB 的 EXE通过 UPX 压缩之后体积可能会明显降低。UPX 官方介绍中提到对于很多程序和 DLL压缩后通常能够减少大约 50%70% 的文件体积。当然UPX 不只是可以“加壳”也可以对由 UPX 压缩过的程序执行解压。常见命令upx test.exe压缩程序。upx-dtest.exe解压 UPX 压缩过的程序。需要注意UPX 只能解压 UPX 自己支持的压缩格式并不是万能脱壳工具。2. JADXJADX 是一个非常常用的 Android 反编译工具。官方介绍jadx - Dex to Java decompiler它能够将 Android 中的DEX APK AAB AAR JAR CLASS XAPK APKM等文件转换为相对容易阅读的 Java 源码。同时还可以解析AndroidManifest.xml resources.arsc以及 APK 中的大部分资源文件。JADX 提供两种使用方式jadx命令行版本。以及jadx-gui图形界面版本。日常分析 APK我个人更推荐直接使用jadx-gui因为支持Java 源码查看语法高亮跳转到定义查找调用查找引用全局文本搜索AndroidManifest.xml 查看资源查看Smali 调试混淆代码辅助处理对于快速分析一个 APK 来说非常方便。二、下载安装 UPXUPX GitHubhttps://github.com/upx/upxRelease 页面https://github.com/upx/upx/releasesWindows 64 位系统推荐下载类似upx-5.2.0-win64.zip如果是 32 位 Windows则可以选择upx-5.2.0-win32.zip现在绝大多数电脑基本都是 64 位所以通常下载 Win64 即可。三、Windows 安装 UPXUPX 不需要传统意义上的安装。下载 ZIP 后直接解压即可。例如解压到D:\tools\upx目录结构大概如下D:\tools\upx ├─ upx.exe ├─ COPYING ├─ LICENSE └─ ...打开 CMDcd /d D:\tools\upx执行upx --version如果能够看到版本信息就说明 UPX 可以正常使用。例如upx 5.2.0四、配置 UPX 环境变量如果不配置环境变量每次都需要进入 UPX 所在目录。比较麻烦。建议把D:\tools\upx加入 Windows PATH。操作路径此电脑 → 属性 → 高级系统设置 → 环境变量 → Path → 编辑 → 新建添加D:\tools\upx保存。重新打开 CMD。执行upx --version如果可以直接识别就配置成功了。五、UPX 常用命令1. 查看帮助upx--help2. 查看版本upx--version3. 压缩 EXE假设当前目录存在demo.exe执行upx demo.exeUPX 会直接压缩该程序。4. 使用更高压缩率upx--bestdemo.exe或者upx--best--lzmademo.exe通常压缩率会更高但是压缩过程可能更慢。5. 查看文件 UPX 信息upx-ldemo.exe也可以用于判断目标文件是否能够被 UPX 正常识别。6. 测试压缩文件upx-tdemo.exe用于测试文件完整性。7. 解压 UPX这是软件分析过程中比较常用的命令。upx-ddemo.exe如果程序本身确实使用 UPX 压缩一般会看到类似解压成功的信息。如果出现NotPackedException通常表示这个程序并不是标准 UPX 压缩文件或者已经被修改、二次保护。六、UPX 使用注意事项UPX 并不是代码保护工具。虽然压缩程序之后从文件结构上看起来发生了一些变化但是它并不能真正防止程序被分析。同样upx-d也只适用于 UPX 支持的文件。如果程序使用ThemidaVMProtectEnigma自定义壳二次修改 UPX虚拟机保护那么 UPX 通常无法直接解压。另外某些安全软件可能会对经过 Packer 处理的程序更加敏感因此正式发布的软件是否使用 UPX需要结合实际场景测试。官方也特别提醒对文件执行 packing、unpacking、testing 或 listing 时都应该按照执行该文件相同的安全级别对待。简单来说不要随便拿来源不明的 EXE 进行测试。七、下载安装 JADXJADX GitHubhttps://github.com/skylot/jadxReleasehttps://github.com/skylot/jadx/releases截至本文整理时最新正式版本为JADX 1.5.6Windows 用户可以直接下载 Release 中的压缩包。如果只是想快速使用 GUI可以优先选择带 JRE 的 Windows 版本例如jadx-gui-1.5.6-with-jre-win.zip这种版本已经携带运行环境使用起来最省事。八、JADX 对 Java 的要求如果下载的是普通 JADX 压缩包而不是带 JRE 的 GUI 版本那么电脑需要安装 Java。JADX 官方目前要求Java 11 或更高版本并且 Windows 推荐使用64 位 Java可以先执行java -version检查 Java。例如openjdk version 17.x或者java version 21.x都可以正常使用。如果提示java 不是内部或外部命令说明没安装 Java或者 Java 没有配置 PATH。九、Windows 安装 JADX假设下载jadx-1.5.6.zip解压到D:\tools\jadx目录大概如下D:\tools\jadx ├─ bin │ ├─ jadx.bat │ ├─ jadx-gui.bat │ └─ ... └─ lib进入D:\tools\jadx\bin可以看到两个重要文件。命令行版本jadx.batGUI 版本jadx-gui.batWindows 下直接双击jadx-gui.bat即可启动图形界面。十、配置 JADX 环境变量如果后面经常使用命令行可以把D:\tools\jadx\bin加入PATH然后重新打开 CMD。执行jadx --help如果出现帮助信息说明安装成功。十一、使用 JADX GUI 反编译 APK这是最简单的方式。启动jadx-gui.bat打开之后可以直接File → Open File选择 APK。例如test.apk也可以直接把 APK 拖到 JADX 窗口。等待 JADX 分析完成。十二、JADX GUI 界面怎么看打开 APK 后左侧一般可以看到Source code Resources其中Source code主要是反编译出来的 Java / Kotlin 相关代码。例如com.example.demo继续展开可能看到MainActivity LoginActivity ApiService UserManagerResources可以查看 APK 的资源。例如AndroidManifest.xml res assets resources.arsc分析一个 APK 时我一般第一个先看AndroidManifest.xml因为可以快速了解包名ApplicationActivityServiceReceiverProvider权限DeepLinkExported 组件十三、JADX 全局搜索JADX 最实用的功能之一就是全局搜索比如分析网络接口可以搜索httphttpsbaseUrlapiretrofitokhttp如果分析登录logintokenauthorization如果分析蓝牙BluetoothGattBluetoothGattCharacteristicUUIDBLE如果分析 WebViewWebViewaddJavascriptInterfaceloadUrl相比一个目录一个目录翻代码全局搜索效率高很多。十四、查找方法调用位置假设找到一个方法publicvoidlogin(Stringusername,Stringpassword)想知道它在哪里被调用。在 JADX GUI 中可以右键 → Find Usage这样就可以看到相关调用位置。这个功能在分析登录流程网络请求加密算法蓝牙通讯数据解析Token 生成时非常有用。十五、跳转到定义看到一个方法userManager.login();可以点击login直接跳到方法定义。也可以通过快捷方式完成跳转。对于大型 APK 来说这比手动搜索类名方便很多。十六、JADX 命令行反编译 APKJADX 不只是 GUI也支持 CLI。基本命令jadx app.apkJADX 会开始分析 APK。更推荐指定输出目录jadx-doutput app.apk其中app.apk是 APK。output是反编译输出目录。完成后通常能够看到output ├─ sources └─ resources十七、只反编译 DEX如果已经从 APK 中提取classes.dex可以直接jadx classes.dex或者jadx-doutput classes.dex同样支持classes2.dex classes3.dex等多 DEX 文件。十八、JADX 常用参数指定输出目录jadx-doutput app.apk不解析资源jadx-rapp.apk也就是--no-res只关注代码时可以使用。不反编译源码jadx-sapp.apk也就是--no-src指定线程数量jadx-j8app.apk例如使用 8 个线程。导出 Gradle 项目JADX 支持jadx-e-doutput app.apk对应--export-gradle需要注意JADX 导出的 Gradle 项目不代表一定可以直接编译运行。它主要还是用于辅助分析。十九、为什么 JADX 反编译之后会报错这个问题非常常见。很多人第一次用 JADX 会发现顶部出现errors occurred during decompilation或者某些 Java 文件里面出现thrownewUnsupportedOperationException(...)这并不一定说明 JADX 安装错了。JADX 官方也明确说明大多数情况下JADX 无法保证 100% 正确反编译所有代码因此出现部分反编译错误是正常现象。常见原因包括ProGuard 混淆R8 混淆Kotlin 编译结构优化后的 DEX控制流混淆加固动态加载 DEXNative 层实现特殊字节码JADX 当前版本反编译器限制所以JADX 输出的 Java 源码是“反编译后的近似代码”并不是原始项目源码。这一点非常重要。二十、APK 中看到大量 a、b、c 类怎么办例如a.a.a a.a.b b.c.a或者代码publicvoida(Stringstr){b(str);}这通常是代码混淆最常见的就是ProGuard R8JADX 内置了一些反混淆辅助能力但是不可能自动恢复原始变量名、原始方法名。比如a()原始方法可能叫login()但是原始名称已经在编译过程中删除那么反编译器一般无法凭空恢复。这种情况下只能通过调用关系字符串网络请求参数返回值日志Android 组件动态调试来推断功能。二十一、JADX 搜索不到关键代码怎么办如果 APK 中搜索不到关键逻辑可能有几种情况。情况 1代码在 Native 层APK 解压后查看lib例如lib/arm64-v8a/libxxx.so说明一部分功能可能通过JNI / C / C实现。这时候 JADX 只能看到 Java 调用入口。真正代码需要继续分析SO情况 2动态加载 DEX有些程序会运行时加载dex jar apk这部分代码可能不会直接出现在主 classes.dex 中。情况 3APP 加固例如应用经过某些加固方案处理。此时静态打开 APK可能只能看到壳代码。真正业务 DEX 需要程序运行后才会加载。二十二、UPX 和 JADX 在 Android 分析中的关系很多人会问Android APK 分析为什么会同时出现 UPX 和 JADX这里需要明确JADX → 主要分析 DEX / Java / Kotlin 层而UPX → 主要处理 Native 可执行文件APK 本质上是 ZIP。可以直接使用 7-Zip 解压app.apk然后可能看到lib ├─ arm64-v8a │ └─ libxxx.so └─ armeabi-v7a └─ libxxx.so如果某个libxxx.so使用了 UPX那么可能可以尝试upx-tlibxxx.so或者upx-dlibxxx.so但是UPX 不是用于反编译 APK 中 classes.dex 的。DEX 应该交给JADX处理。二十三、一个比较实用的 APK 静态分析流程如果只是初步分析一个 APK我一般会按照下面顺序。第一步JADX 打开 APKjadx-gui app.apk第二步查看 AndroidManifest.xml重点看package activity service receiver provider permission exported第三步找 Application例如android:name.App找到 Application 初始化逻辑。第四步搜索网络相关代码搜索http https retrofit okhttp baseUrl api第五步搜索业务关键词例如login token user bluetooth device encrypt decrypt sign signature第六步查看 Native 库查看lib/arm64-v8a是否存在.so第七步查找 JNIJADX 搜索native例如publicnativeStringgetToken();看到这种代码就说明真正实现可能在 SO 中。二十四、常见问题1. JADX GUI 双击没有反应首先执行java -version确认 Java 是否安装。如果没有 Java可以安装 Java 11或直接下载带 JRE 的 JADX GUI Windows 包2. 提示 UnsupportedClassVersionError一般是 Java 版本太低。升级 Java。例如安装JDK 17或者更高版本。3. APK 打开很慢大型 APK 可能有几十万个类。可以增加内存使用 SSD减少同时打开的程序等待 JADX 建立索引第一次打开大型 APK 较慢属于正常情况。4. 搜索一直没结果先等 JADX 完成Indexing索引完成之后再搜索。5. UPX 提示 NotPackedException说明目标文件不是标准 UPX 文件或者 UPX 头被修改。不能直接upx-d解决。二十五、推荐目录结构如果后面经常进行 Android 分析可以专门建立D:\reverse-tools例如D:\reverse-tools ├─ jadx ├─ upx ├─ adb ├─ apktool ├─ 7zip ├─ frida └─ platform-tools然后统一加入环境变量。以后执行jadxupxadb都会方便很多。二十六、总结本文介绍了两个比较实用的工具。UPX主要用于EXE / DLL / ELF 等可执行文件压缩常用命令upx test.exe高压缩upx--besttest.exe测试upx-ttest.exe解压upx-dtest.exeJADX主要用于APK / DEX → Java 源码最推荐jadx-gui命令行反编译jadx-doutput app.apk它非常适合Android 源码分析APK 静态分析接口定位登录流程分析蓝牙通讯分析WebView 分析JNI 入口定位APP 问题排查不过需要记住反编译代码 ≠ 原始源码。JADX 只是尽量把 DEX 还原成便于人阅读的 Java 代码。遇到混淆、加固、Native、动态加载等情况时仍然需要结合其他工具进一步分析。二十七、项目地址UPXhttps://github.com/upx/upxJADXhttps://github.com/skylot/jadx如果只是刚开始学习 Android APK 分析我建议先把JADX ADB 7-Zip这几个工具熟悉起来。后续再逐步学习Apktool Frida Ghidra IDA Wireshark基本就可以形成一套比较完整的 Android 静态分析与动态调试工具链。声明本文内容仅用于软件开发、兼容性测试、安全研究、个人学习以及对拥有合法授权的软件进行分析请勿用于未经授权的程序篡改、数据获取或其他违法用途。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价