android-reverse-engineering-skill
Introduction: 这是一套专为 Codex 适配的 Android 逆向分析 skill,支持在 Codex 会话中反编译 APK、XAPK、JAR、AAR,并结合 jadx、Fernflower/Vineflower 梳理 Manifest、包结构、网络层和调用链。它可辅助提取接口、URL、鉴权头、token 与签名逻辑,并提供 Frida、抓包、JNI/SO 分析前的静态侦察方法,适合接口分 析、安全研究和授权测试。
Tags:
Android 逆向分析全家桶 — 从 APK 反编译到 Frida 动态插桩、从 HTTP 接口提取到 JNI/SO 原生层逆向,覆盖静态分析→动态分析→流量解密→签名追踪的完整链路。支持 Claude Code / Codex 双平台,兼容 macOS、Linux、Windows(PowerShell),一套技能打通 Android 安全研究与授权渗透测试的绝大部分需求。
亮点
- 双引擎反编译:jadx + Fernflower/Vineflower,自动对比、择优输出
- 完整调用链追踪:从 Activity/Fragment → ViewModel → Repository → Retrofit/OkHttp,一路不迷路
- API 全量提取:Retrofit 接口、OkHttp 请求、硬编码 URL、鉴权头、Token、签名参数一键搜出
- Frida 脚本武装:9 个实战级 Frida 脚本开箱即用 — SSL 日志、DEX/SO dump、JNI 追踪、加密 hook、Root/Frida 检测绕过、KeyStore 证书导出
- Native 层分析:JNI 注册追踪、SO 符号/导出分析、签名/加密边界定位、unidbg 模拟前的完整静态侦察
- XAPK / 套壳 APK 自动解包:自动识别分包结构,直取业务核心 base.apk
- 跨平台:Bash 脚本 + PowerShell 脚本双栈,macOS/Linux/Windows 通吃
- 智能依赖安装:一键检查 + 自动安装缺失工具,无 sudo 时自动降级为手动指引
与原项目的差异
基于 SimoneAvogadro/android-reverse-engineering-skill 做了大幅扩展:
| 方面 | 原项目 | 本仓库 |
|---|---|---|
| 平台支持 | Claude Code | Claude Code + Codex 双平台 |
| 反编译引擎 | jadx | jadx + Fernflower/Vineflower 双引擎对比 |
| 动态分析 | 概念提及 | 完整 Frida 实战指导 + 9 个开箱即用脚本 |
| Native 分析 | 无 | JNI/SO 完整分析流程 + rizin 命令参考 |
| Windows 支持 | 无 | 完整 PowerShell 脚本栈 |
| XAPK/套壳 | 基础支持 | 自动递归解包 + 分包识别 |
| 依赖管理 | 手动 | 一键检查 + 跨平台自动安装 |
| Frida 脚本 | 无 | 9 个实战脚本(SSL、DEX dump、SO dump、JNI trace、加密 hook、检测绕过、证书导出) |
| 文档语言 | 英文 | 中文 |
功能总览
静态分析
- jadx / Fernflower / Vineflower 三种引擎反编译 APK、XAPK、JAR、AAR
- 自动解析 AndroidManifest.xml、包结构、架构模式(MVP/MVVM/Clean Architecture)
- 混淆代码处理:ProGuard/R8 混淆下的字符串锚点定位策略
API 与网络层
- 自动提取 Retrofit 接口、OkHttp 调用、硬编码 URL、鉴权头、Token
- 请求/响应结构还原,Base URL + Path + Headers + Body 完整文档化
- 签名参数与加密入口定位
调用链追踪
- Activity → ViewModel/Presenter → Repository → API Service → HTTP Call
- Dagger/Hilt 依赖注入绑定映射
- 混淆类名下的 Retrofit 注解锚点导航
Frida 动态插桩(9 个脚本开箱即用)
| 脚本 | 功能 |
|---|---|
ssl_log.js |
TLS 密钥日志导出,解密 HTTPS 流量 |
dump_dex.js |
内存 DEX dump,对抗加固/动态加载 |
dump_so.js |
内存 SO dump,保留完整 ELF 结构 |
jni_method_trace.js |
JNI 调用全量追踪,可指定目标 SO |
hook_artmethod_register.js |
ART Method 注册 hook,追踪 Native→Java 绑定 |
hook_encryption_algo.js |
AES/DES/RSA/哈希等加密算法调用拦截 |
keystore_dump.js |
双向认证场景下客户端证书导出为 p12 |
bypass_root_detect.js |
通用 Root 检测绕过(含 Magisk 检测) |
bypass_frida_svc_detect.js |
Frida SVC 指令级检测绕过(ARM32/ARM64) |
Native / JNI / SO 分析
native方法声明 →System.loadLibrary→ SO 定位JNI_OnLoad→RegisterNatives动态注册追踪- rizin/readelf/nm/objdump 多工具栈 SO 分析
- 签名/加密生成边界判断:Java 层还是 Native 层?
依赖要求
必需:
- Java JDK 17+
- jadx 命令行工具
可选但推荐:
- Vineflower / Fernflower — 复杂 Java 代码更优输出
- dex2jar — APK/DEX 配合 Fernflower 使用
- Rizin — SO / JNI / Native 导出符号与反汇编
- Frida — 运行时动态插桩
- adb — 设备连接与脚本推送
安装
# 克隆仓库
git clone https://github.com/SimoneAvogadro/android-reverse-engineering-skill.git
# 创建技能符号链接
mkdir -p ~/.claude/skills
ln -sfn $(pwd)/android-reverse-engineering-skill/android-reverse-engineering/skills/android-reverse-engineering ~/.claude/skills/android-reverse-engineering
# 创建命令符号链接
mkdir -p ~/.claude/commands
ln -sfn $(pwd)/android-reverse-engineering-skill/android-reverse-engineering/commands/decompile.md ~/.claude/commands/decompile.md
使用方式
Slash 命令
/decompile path/to/app.apk
自动完成:依赖检查 → 反编译 → 结构分析 → 下一步建议。
自然语言触发
- "反编译这个 APK"
- "逆向分析这个应用"
- "提取这个应用的接口和签名"
- "从 LoginActivity 开始跟调用链"
- "分析这个 AAR/JAR 库"
- "找出这个 sign 是在 Java 还是 native 层生成的"
- "用 Frida 分析请求加密链路"
- "dump 这个加固应用的 DEX"
- "绕过这个 app 的 SSL pinning 和 root 检测"
- "分析这个 SO 的 JNI 导出函数"
手动执行脚本
SKILL_DIR="android-reverse-engineering/skills/android-reverse-engineering/scripts"
# === 依赖管理 ===
bash $SKILL_DIR/check-deps.sh
bash $SKILL_DIR/install-dep.sh jadx
bash $SKILL_DIR/install-dep.sh vineflower
bash $SKILL_DIR/install-dep.sh rizin
# === 反编译 ===
bash $SKILL_DIR/decompile.sh app.apk # jadx 默认
bash $SKILL_DIR/decompile.sh --engine fernflower library.jar # Fernflower
bash $SKILL_DIR/decompile.sh --engine both app.apk # 双引擎对比
bash $SKILL_DIR/decompile.sh app-bundle.xapk # XAPK 自动解包
# === API 提取 ===
bash $SKILL_DIR/find-api-calls.sh output/sources/
bash $SKILL_DIR/find-api-calls.sh output/sources/ --retrofit
bash $SKILL_DIR/find-api-calls.sh output/sources/ --urls
bash $SKILL_DIR/find-api-calls.sh output/sources/ --auth
Windows / PowerShell
$SKILL_DIR="android-reverse-engineering/skills/android-reverse-engineering/scripts"
& "$SKILL_DIR/check-deps.ps1"
& "$SKILL_DIR/install-dep.ps1" jadx
& "$SKILL_DIR/decompile.ps1" app.apk
& "$SKILL_DIR/find-api-calls.ps1" output/sources/ -Retrofit
Frida 脚本使用
# SSL 密钥日志(配合 Wireshark 解密 HTTPS)
frida -U -f com.example.app -l ssl_log.js --no-pause
# Dump 内存中的 DEX(对抗加固/动态加载)
frida -U -f com.example.app -l dump_dex.js --no-pause
# Dump 内存中的 SO(保留 ELF 完整结构)
frida -U -f com.example.app -l dump_so.js --no-pause
# 追踪指定 SO 的 JNI 调用
frida -U -f com.example.app -l jni_method_trace.js --no-pause
# Hook 加密/解密算法调用
frida -U -f com.example.app -l hook_encryption_algo.js --no-pause
# 绕过 Root 检测
frida -U -f com.example.app -l bypass_root_detect.js --no-pause
# 绕过 Frida SVC 指令级检测
frida -U -f com.example.app -l bypass_frida_svc_detect.js --no-pause
# 导出双向认证客户端证书
frida -U -f com.example.app -l keystore_dump.js --no-pause
# Hook ART Method 注册(追踪 Native→Java 绑定)
frida -U -f com.example.app -l hook_artmethod_register.js --no-pause
SO / Native 分析
当 Java 层分析看到 native 方法、System.loadLibrary() 或 RegisterNatives 时:
# ELF 元数据
rz-bin -I libfoo.so && rz-bin -s libfoo.so && rz-bin -i libfoo.so
# 字符串速查
rz-strings -a libfoo.so | rg 'http|https|Java_|JNI_OnLoad|encrypt|sign|ssl|socket'
# JNI_OnLoad 反汇编
rizin -qc "aaa; pdf @ sym.JNI_OnLoad; q" libfoo.so
# 无 rizin 时回退
readelf -Ws libfoo.so && nm -D libfoo.so | rg 'JNI_OnLoad|Java_'
objdump -d libfoo.so > libfoo.asm
反编译命名策略
首次反编译不要加 --deobf:
- 类名更接近 dex 运行时真实名称
- 适合后续
FindClass、Class.forName、Frida hook、unidbg 模拟
--deobf 适用于:
- 代码严重混淆,优先提升阅读体验
- 纯静态分析、不需要对接运行时类名
- 作为第二份输出与原始版本对照
仓库结构
android-reverse-engineering-skill/
├── .claude-plugin/
│ └── marketplace.json
├── android-reverse-engineering/
│ ├── .codex-plugin/
│ │ └── plugin.json
│ ├── .claude-plugin/
│ │ └── plugin.json
│ ├── commands/
│ │ └── decompile.md
│ └── skills/
│ └── android-reverse-engineering/
│ ├── SKILL.md
│ ├── references/
│ │ ├── setup-guide.md
│ │ ├── jadx-usage.md
│ │ ├── fernflower-usage.md
│ │ ├── api-extraction-patterns.md
│ │ ├── call-flow-analysis.md
│ │ ├── dynamic-analysis.md
│ │ └── native-analysis.md
│ └── scripts/
│ ├── check-deps.sh / .ps1 # 依赖检查
│ ├── install-dep.sh / .ps1 # 自动安装
│ ├── decompile.sh / .ps1 # 反编译
│ ├── find-api-calls.sh / .ps1 # API 提取
│ ├── ssl_log.js # TLS 密钥导出
│ ├── dump_dex.js # 内存 DEX dump
│ ├── dump_so.js # 内存 SO dump
│ ├── jni_method_trace.js # JNI 调用追踪
│ ├── hook_artmethod_register.js # ART 注册 hook
│ ├── hook_encryption_algo.js # 加密算法 hook
│ ├── keystore_dump.js # 证书导出
│ ├── bypass_root_detect.js # Root 检测绕过
│ └── bypass_frida_svc_detect.js # Frida 检测绕过
├── LICENSE
└── README.md
参考项目
- jadx — DEX to Java 反编译器
- Fernflower — JetBrains 反编译器
- Vineflower — Fernflower 社区分支
- dex2jar — DEX 转 JAR
- apktool — Android 资源解码
- Rizin — 开源二进制逆向工具链
- Frida — 动态插桩框架
- unidbg — 无设备 SO 模拟执行
免责声明
本工具仅可用于合法用途:
- 安全研究与经授权的渗透测试
- 适用法律范围内的互操作性分析
- 恶意软件分析与应急响应
- 教学用途与 CTF 比赛
你需自行确保使用行为符合所在司法辖区法律、法规及目标软件服务条款。对未授权软件进行逆向可能触犯知识产权或计算机相关法律。作者不对任何滥用行为承担责任。
许可证
Apache 2.0,见 LICENSE
