【2026亲测】UPX + JADX 安装使用教程|Windows 可执行文件压缩/解压与 Android APK 反编译
【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 静态分析与动态调试工具链。声明本文内容仅用于软件开发、兼容性测试、安全研究、个人学习以及对拥有合法授权的软件进行分析请勿用于未经授权的程序篡改、数据获取或其他违法用途。

相关新闻

C++内存管理:从内存分布到new/delete底层原理

C++内存管理:从内存分布到new/delete底层原理

一、C/C内存分布在开始讨论动态内存管理之前,我们先来搞清楚一个问题:程序中的各种变量分别存储在内存的哪个区域?先看下面这段代码:int globalvar 1; static int staticGlobalvar 1;void Test() {static int staticvar 1;int …

2026/9/21 16:19:55 阅读更多 →
免费分屏神器:Nucleus Co-Op 开启多人同屏游戏新时代

免费分屏神器:Nucleus Co-Op 开启多人同屏游戏新时代

免费分屏神器:Nucleus Co-Op 开启多人同屏游戏新时代 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 还在为无法与朋友共享同一台电脑畅…

2026/9/29 23:27:27 阅读更多 →
Godot集成WebAssembly实战:用Rust提升游戏性能与跨语言开发

Godot集成WebAssembly实战:用Rust提升游戏性能与跨语言开发

1. 项目概述:为什么要在Godot里集成WebAssembly?如果你是一个Godot开发者,最近可能听到过“WebAssembly”或者“Wasm”这个词。它不再是浏览器里的一个遥远概念,而是正在成为高性能、跨语言游戏逻辑扩展的一个现实选择。简单来说&…

2026/9/28 20:44:03 阅读更多 →

最新新闻

CentOS 8 安装图解:从镜像校验到首次登录的完整指南

CentOS 8 安装图解:从镜像校验到首次登录的完整指南

简介:这份资源是一份面向Linux初学者与运维入门者的CentOS 8安装图解教程,以PDF形式呈现,重点解决新手在虚拟机环境中安装CentOS 8时步骤不清、配置易错的问题。压缩包内共1个PDF文件,大小约1.29MB,内容以图文结合方式…

2026/9/30 15:36:16 阅读更多 →
Java异常处理实战:高频错误排查、性能优化与面试指南

Java异常处理实战:高频错误排查、性能优化与面试指南

做Java开发这些年,天天跟异常打交道。NullPointerException、ConcurrentModificationException、ClassCastException……光是这几个高频错误就已经劝退了不少刚入行的朋友。异常处理这件事,看起来只是try-catch-finally几个关键字,但真正到了…

2026/9/30 15:36:16 阅读更多 →
基于NSGA-III的梯级水电与火电联合调度优化及MATLAB实现

基于NSGA-III的梯级水电与火电联合调度优化及MATLAB实现

做电力调度优化的同行,多少都遇过这种场景:系统里既有火电也有梯级水电,火电煤耗曲线是非线性的,水电又受来水、库容和上下游关系的多重限制,两边纠缠在一起,靠人工或者单目标优化很难给出让人满意的方案。…

2026/9/30 15:36:16 阅读更多 →
从参数破解到官方API:用PyQt5搭建数据可视化小工具

从参数破解到官方API:用PyQt5搭建数据可视化小工具

今年五一没有出门凑热闹,宅在家里把一个想了很久的项目落地了:做一个小工具,把头条系账号的内容数据集中到一个可视化的界面里,方便每天查看。在动手之前圈子里不少人提过“某头条参数破解”这个方向,我一开始也确实往…

2026/9/30 15:36:16 阅读更多 →
U-Boot设备模型解析:board_init_r中的dm骨架搭建与probe机制

U-Boot设备模型解析:board_init_r中的dm骨架搭建与probe机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 15:36:16 阅读更多 →
软件测试面试高频题解析:从理论到项目实战

软件测试面试高频题解析:从理论到项目实战

面试这件事,我见过太多人把精力花错了地方。背了一堆八股文,结果面试官一句“说说你印象最深的一个Bug”就卡壳了。也有不少人简历写得花团锦簇,一到项目追问环节就露馅。做软件测试这些年,我面试过别人,也被别人面试过…

2026/9/30 15:35:15 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/30 15:27:04 阅读更多 →