JADX
2026/5/29工具工具逆向工程AndroidJADX大约 4 分钟
JADX
链接
是什么
JADX 是 Android APK 反编译工具,可以把 dex 字节码反编译成接近 Java 的代码,并查看资源、Manifest、字符串和调用关系。
CTF Android 逆向入门常用它做第一轮静态分析。
安装与配置
从 GitHub Releases 下载 jadx:
https://github.com/skylot/jadx/releases或用包管理器:
sudo apt install jadx启动图形界面:
jadx-gui app.apk命令行反编译:
jadx -d out app.apk基本用法
打开 APK
jadx-gui challenge.apk搜索字符串
在 GUI 中搜索:
flag
check
verify
native
secret查看 Manifest
关注入口 Activity、权限、导出组件、包名。
导出源码
jadx -d source_out challenge.apk更多功能
反编译选项
# 不反混淆
jadx --no-res -d out app.apk
# 显示不一致代码
jadx --show-bad-code -d out app.apk
# 跳过资源
jadx --no-res -d out app.apk
# 指定线程数
jadx -j 4 -d out app.apk
# 反编译为 Gradle 项目
jadx --gradle -d out app.apkGUI 功能
导航:
- 类树视图
- 搜索类/方法/字段
- 字符串搜索
- 代码跳转
分析:
- 反编译代码
- Smali 代码
- 资源文件
- Manifest
- 字符串常量
导出:
- 导出为 Gradle 项目
- 保存反编译代码搜索功能
Ctrl+Shift+F — 全局搜索字符串
Ctrl+N — 搜索类
Ctrl+Shift+N — 搜索文件
Ctrl+F — 当前文件搜索代码导航
Ctrl+Click — 跳转到定义
Alt+Left — 返回
Alt+Right — 前进
Ctrl+G — 跳转到行反编译 DEX 文件
# 反编译单个 DEX
jadx classes.dex -d out
# 反编译多个 DEX
jadx classes.dex classes2.dex -d outAndroid 分析工作流
第一轮:快速概览
1. 打开 APK
2. 查看 AndroidManifest.xml
3. 找到入口 Activity
4. 搜索 flag/check/verify
5. 查看资源文件第二:定位关键逻辑
1. 从入口 Activity 开始
2. 追踪按钮点击事件
3. 找到校验函数
4. 分析校验逻辑
5. 记录输入要求第三:深入分析
1. 分析加密/编码算法
2. 查看 native 调用
3. 检查网络请求
4. 查看 SharedPreferences
5. 分析 ContentProvider常见入口点
AndroidManifest.xml:
- 主 Activity (action.MAIN)
- 导出组件 (exported=true)
- 权限声明
- Content Provider
代码搜索:
- onClick
- check
- verify
- password
- loginCTF常用技巧
先找入口
从 AndroidManifest.xml 找启动 Activity,再追按钮点击和校验逻辑。
注意 native 层
如果 Java 层出现:
System.loadLibrary
native
JNI真实逻辑可能在 .so 中,需要回到 JNI 和 native 逆向。
资源也可能藏线索
查看:
res/values/strings.xml
assets/
raw/
res/xml/
res/layout/搜索常见关键词
flag
password
check
verify
correct
wrong
success
fail
secret
key
encrypt
decrypt分析加密逻辑
1. 找到加密函数
2. 分析算法类型
3. 提取密钥
4. 编写解密脚本Smali 修改
如果需要修改 APK:
# 使用 apktool 解包
apktool d app.apk -o apk_out
# 修改 Smali 代码
# 重新打包
apktool b apk_out -o modified.apk
# 签名
jarsigner -keystore debug.keystore modified.apk androiddebugkey反混淆技巧
混淆特征
类名: a, b, c, aa, ab, ac
方法名: a, b, c, d
字段名: a, b, c
包名: com.a.a.a应对方法
1. 搜索字符串定位关键代码
2. 查看调用关系追踪逻辑
3. 使用 Frida 动态 hook
4. 分析方法参数和返回值
5. 结合资源文件理解功能ProGuard/R8 混淆
特点:
- 类名/方法名被替换
- 代码逻辑不变
- 字符串常量保留
- 控制流可能被改变
应对:
- 从字符串入手
- 分析方法调用链
- 使用动态分析常见问题
反编译代码很乱
可能开启混淆。先看字符串、资源、调用关系,再定位关键函数。
找不到 flag
Android 题通常不是明文 flag,而是校验输入。找 check、verify、按钮事件。
JADX 和 apktool 区别
JADX 适合看 Java 逻辑,apktool 更适合拆资源和 smali 修改。
内存不足
# 增加 JVM 内存
jadx -Xmx4g -d out app.apk反编译失败
1. 检查 APK 是否完整
2. 尝试 jadx --show-bad-code
3. 使用不同版本 jadx
4. 先用 apktool 解包再分析多个 DEX 文件
# 反编译所有 DEX
jadx classes*.dex -d out
# 或在 GUI 中打开 APK(自动处理多 DEX)关联
- APK逆向基础
- JNI深入
- 字符串、交叉引用与控制流
- Ghidra
- Frida