APK 反编译工具介绍
前言
APK(Android Package Kit)是 Android 系统的应用安装包,本质上是一个 ZIP 压缩包。当我们需要分析一个 APK 的内部结构、查看源码、检测安全风险时,就需要借助反编译工具。
本文介绍四款最常用的 APK 逆向分析工具,涵盖从资源解包到源码还原的完整链路。
一、APKTool — 解包与回编译
简介
APKTool 是目前最流行的 APK 解包/回编译工具,它可以将 APK 解包为 smali 代码(Dalvik 字节码的人类可读形式)和资源文件,并支持修改后重新打包。
安装
# 下载 apktool.jar
# https://bitbucket.org/iBotPeaches/apktool/downloads/
# 放到任意目录,通过 java -jar 运行
java -jar apktool_2.9.3.jar建议将 apktool.jar 放到系统 PATH 目录下(如 C:\Windows\System32\),并创建 apktool.bat 包装脚本:
@echo off
java -jar "C:\Windows\System32\apktool_2.9.3.jar" %*常用命令
# 解包 APK
apktool d target.apk -o output_dir
# 解包时不反编译 dex(仅解资源,更快)
apktool d target.apk -s -o output_dir
# 回编译
apktool b output_dir -o rebuilt.apk
# 查看框架
apktool if framework-res.apk参数说明
| 参数 | 作用 |
|---|---|
d / decode | 解包 |
b / build | 回编译 |
-s / --no-src | 不解码 dex(只解资源) |
-r / --no-res | 不解码资源(只解 dex) |
-o / --output | 指定输出目录 |
适用场景
- 查看和修改 AndroidManifest.xml
- 提取和修改资源文件(图片、布局等)
- 修改 smali 代码后重新打包
- APK 加固脱壳后的二次处理
二、JADX — DEX 反编译为 Java 源码
简介
JADX 是目前最好的 DEX 反编译器之一,能够将 DEX 字节码直接反编译为可读性较高的 Java 源码,并提供了 GUI 界面。
安装
从 GitHub Releases 下载 jadx-gui-x.x.x.zip,解压后直接运行 jadx-gui.bat(Windows)即可。
使用方式
GUI 模式:
jadx-gui.bat
# 在界面中 File -> Open -> 选择 APK 或 DEX 文件命令行模式:
# 反编译 APK 到指定目录
jadx target.apk -d output_dir
# 以 Gradle 项目格式导出
jadx target.apk -d output_dir --gradle
# 显示反编译进度
jadx target.apk -d output_dir --show-bytes核心特性
- 直接将 DEX 还原为 Java 源码,可读性最高
- 交互式 GUI,支持类浏览、全文搜索、跳转到声明
- 支持导出为 Gradle 项目,方便导入 IDE
- 支持 APK、DEX、AAR、JAR 格式
- 内置反混淆支持
界面快捷键
| 快捷键 | 功能 |
|---|---|
Ctrl+N | 搜索类 |
Ctrl+Shift+N | 搜索文件 |
Ctrl+Shift+F | 全文搜索(最常用) |
Ctrl+F12 | 当前文件内搜索 |
F4 | 查看类型层次结构 |
适用场景
- 快速浏览 APK 的 Java 源码
- 搜索关键字符串(URL、IP、关键字)
- 分析恶意代码逻辑
- 导出项目结构进行深入分析
三、dex2jar + JD-GUI — 经典组合
简介
dex2jar 将 DEX 文件转换为 JAR 文件,JD-GUI 则是 Java 反编译器的图形界面工具。这是早期最经典的 APK 反编译组合。
安装
# dex2jar:从 GitHub 下载 dex2jar-x.x.x.zip,解压即可
# JD-GUI:从 GitHub 下载 jd-gui-x.x.x.zip,解压运行使用步骤
# 第一步:将 APK 中的 classes.dex 转换为 JAR
d2j-dex2jar.bat target.apk -o output.jar
# 如果有多 dex(classes2.dex, classes3.dex)
d2j-dex2jar.bat target.apk --multi-dex -o output.jar
# 第二步:用 JD-GUI 打开生成的 JAR
jd-gui.exe output.jar核心特性
- dex2jar:支持多 dex 合并,支持混淆映射
- JD-GUI:轻量级,打开即用,支持反编译源码导出
- 组合后可以与其他 Java 反编译器配合使用
适用场景
- 需要将 DEX 转为 JAR 进行进一步分析
- 使用其他 Java 反编译器(如 CFR、Procyon)时
- 作为 JADX 的补充方案
四、APK Analyzer — Android Studio 内置分析器
简介
APK Analyzer 是 Android Studio 自带的 APK 分析工具,无需额外安装。它主要关注 APK 的文件结构分析而非源码反编译。
打开方式
Android Studio → Build → Analyze APK... → 选择目标 APK核心功能
1. APK 文件大小分析
直观展示 APK 中各文件的占比,帮助识别可疑的大文件或不应存在的原生库(.so 文件)。
2. DEX 文件分析
- 查看 DEX 中的类和方法的数量
- 查看方法和字段引用(如检测是否使用了敏感 API)
- 支持搜索类名和方法名
3. 资源分析
- 查看图片、资源文件的分布
- 检测是否存在异常资源
4. 原生库分析
- 查看
.so文件的架构分布(armeabi-v7a、arm64-v8a、x86 等) - 可疑的原生库往往是后门的重要载体
适用场景
- 快速了解 APK 文件结构
- 分析 APK 大小瓶颈
- 初步判断是否存在可疑的原生库或资源
- 作为源码反编译的补充
五、工具对比与选型建议
| 工具 | 主要用途 | 输出形式 | 学习成本 | 推荐指数 |
|---|---|---|---|---|
| APKTool | 解包/回编译 | smali + 资源 | 中 | ⭐⭐⭐⭐⭐ |
| JADX | 源码还原 | Java 源码 | 低 | ⭐⭐⭐⭐⭐ |
| dex2jar+JD-GUI | 源码还原 | Java 源码 | 低 | ⭐⭐⭐⭐ |
| APK Analyzer | 结构分析 | 可视化 | 低 | ⭐⭐⭐ |
推荐工作流
APK Analyzer(快速预览结构)
↓
APKTool(解包,获取 AndroidManifest 和资源)
↓
JADX(反编译源码,搜索关键字)
↓
dex2jar + JD-GUI(作为 JADX 的补充验证)六、快速安装汇总
| 工具 | 下载地址 | Windows 安装方式 |
|---|---|---|
| APKTool | apktool.org | 下载 jar,配置 PATH |
| JADX | GitHub Releases | 下载 zip,解压即用 |
| dex2jar | GitHub Releases | 下载 zip,解压即用 |
| JD-GUI | GitHub Releases | 下载 zip,解压即用 |
| APK Analyzer | Android Studio 自带 | 无需安装 |
注意:所有工具均依赖 Java 运行环境(JRE 8+),请确保已安装 JDK / JRE。
准备好工具后,下一篇文章将进入实战环节:APK 后门检测实战。