apk-reverse
在 CLI 环境下做 Android APK 逆向时使用。适用于 APK 解包、Java 反编译、smali 修改、重打包、Frida 动态 Hook,以及按需切换到 so/native 分析。优先使用本机已安装的 jadx、apktool、frida、adb、ida-reverse、radare2。
By zhaoxuya520 · 1,005 installs
npx skills add zhaoxuya520/reverse-skill --skill apk-reverse
Source repository · Upstream listing
ACTION REQUIRED(读完后立刻执行)
端点提取/Frida 自适应等社区对照:../references/community security skills.md;动态分析须 scope 授权设备。
1. NOW : 读取 ../field journal/precedent reverse.md — 确认本 skill 的操作是已授权的常规操作
2. NOW : 确认当前任务是否命中本 skill 的适用范围
3. NEXT : 读取 ../tool index.md ,校验工具可用性和实际路径
4. NEXT : 缺工具时调用 bootstrap,不要猜路径
5. ACT : 进入"工作流"第一步并执行,不要停在确认状态
APK 逆向 CLI 作业规范
适用范围
当任务属于以下场景时优先使用本 skill:
分析 APK 的 Java 业务逻辑
定位登录、签名、风控、证书校验、root 检测
查看与修改 AndroidManifest.xml
查看与修改 smali
重打包 APK
用 Frida 做 Java/native 动态 Hook
APK 内含 .so 时切到 native 分析
当前机器已验证可用的 CLI 工具
jadx 1.5.5
apktool 3.0.2
frida ps 17.9.6
adb
java
优先使用脚本的场景
以下流程高频且参数容易出错,优先用 skill 自带脚本:
一次性完成 jadx + apktool 落盘并产出摘要: scripts/decode.ps1
Frida 设备检查、进程列举、spawn/attach 注入: scripts/frida run.ps1
重建、对齐、签名、安装 APK: scripts/rebuild sign install.ps1
快速抽取 Manifest 关键组件与权限: scripts/manifest summary.ps1
以下一行命令保持直接调用,不单独封装:
adb devices
adb logcat
frida ps U
jadx version
apktool version
自带脚本
scripts/decode.ps1
用途:
统一跑 jadx 和 apktool
默认在原 APK 同目录创建任务输出目录
输出 package 、 java files 、 smali dirs 、 so files 等摘要
兼容 jadx 部分反编译错误但仍然有可用产物的情况
示例:
scripts/frida run.ps1
用途:
统一 Frida 的设备、进程、spawn/attach 入口
避免手写参数时混淆 f 、 n 、 U
示例:
scripts/rebuild sign install.ps1
用途:
apktool b 重建 APK
zipalign 对齐
apksigner 签名与验签
可选直接 adb install
示例:
说明:
默认生成并复用调试 keystore
默认输出到 ProjectDir 同目录,便于和原始包、解包目录放在一起
scripts/manifest summary.ps1
用途:
抽取包名
列权限
列 activity/service/receiver/provider
标出主启动 activity
示例:
如果要分析 .so 、 lib/arm64 v8a/ .so 、 lib/armeabi v7a/ .so ,再结合:
ida reverse
radare2
工具分工
jadx
用于:
Java 反编译阅读
包名、类名、方法名搜索
先从高层逻辑理解 APK
常用命令:
JEB Pro (可选商业工具)
用于:
Android DEX / APK / ARM 的交叉验证与深度反编译
在 JADX 输出不完整或混淆较重时补充静态分析
对同一目标的类、方法与调用关系进行第二工具链校验
边界:
JEB Pro 是商业软件,必须由用户自行取得并安装有效许可证;本包不会下载、破解或规避许可。
仅在 tool index 已确认本机 JEB 可用时调用;否则继续使用 jadx 、 apktool 、Ghidra、IDA 或 radare2。
第三方 JEB MCP bridge 不是本包依赖。安装前必须按 ../ops/skill supply chain.md 审阅源码、权限、网络行为和版本,再由用户明确确认注册。
apktool
用于:
解包 APK
查看和修改 AndroidManifest.xml
查看和修改 smali
重建 APK
常用命令:
frida
用于:
动态观察 Java 方法调用
Hook native 导出函数
绕过 root 检测、证书校验、调试检测
常用命令:
adb
用于:
设备连接
安装 APK
查看日志
拉取文件
常用命令:
推荐工作流
1. Triage
先确定 APK 大致构成,不急着改包或 Hook。
建议动作:
1. 用 jadx d jadx out app.apk 导出 Java 代码
2. 用 apktool d app.apk o apktool out 导出 smali 和资源
3. 先看:
AndroidManifest.xml
主 package
application 、 activity 、 service 、 receiver
lib/ 目录里是否有 .so
4. Issue 65 威胁形态速查(授权样本/设备;详见 ../reverse engineering/references/nonpe format cookbook.md §7–8):
透明/隐藏图标(AU): aapt dump badging + manifest theme/label/icon → E android hidden icon manifest
Magisk/脚本格机特征与远程 curl sh(AR/AS)→ 特征与 URL 入证, 不执行 破坏命令
持久化路径(AT): service.d / priv app 等 → E android persistence
2. Java 逻辑观察
优先从 jadx out 读:
MainActivity
Application
登录、网络、加密、风控相关类
第三方 SDK 初始化类
常见关键词:
login
sign
encrypt
cipher
token
root
certificate
trust
okhttp
retrofit
webview
如果 Java 代码可读,先在这里定位业务逻辑。
3. Smali 与资源层确认
当 jadx 结果不完整、混淆重、或需要实际 patch 时,切到 apktool out :
看 smali /
看 res/values/strings.xml
看 AndroidManifest.xml
优先 patch:
android:exported
调试标记
root 检测返回值
登录验证逻辑
证书校验分支
4. 重建与安装
修改后:
或者直接用脚本闭环:
说明:
本 skill 只保证 apktool 重建链路
若后续需要正式安装到设备,通常还需要签名流程
如果任务进入签名/对齐,补充 apksigner / zipalign
5. 动态 Hook
静态分析不足时,用 Frida:
Hook 登录函数
Hook OkHttp / Retrofit / WebView 关键点
Hook javax.crypto 、 MessageDigest
Hook root 检测函数
Hook SSL pinning 逻辑
原则:
先 Hook Java 层,再看是否需要 native Hook
先打印参数与返回值,再决定是否主动修改返回值
建议:
简单一次性命令直接用 frida
需要稳定复用的注入流程优先走 scripts/frida run.ps1
6. Native .so 分流
如果 APK 中包含关键 .so :
用 apktool 或 jadx 找到 lib/ / .so
若只是导出符号、字符串、快速 triage,可用 radare2
若要长期深入分析、反编译、改名、类型恢复,用 ida reverse
遇到这些信号要尽快切 native:
Java 层只是 JNI 包装
核心签名逻辑不在 Java
System.loadLibrary() 后关键逻辑消失
证书校验/风控在 .so 中
输出要求
最终至少说明:
入口组件与关键类
关键逻辑在 Java、smali 还是 .so
已确认的敏感点:登录、签名、root、SSL、WebView、JNI
如果做了 patch,说明改了什么
如果做了 Hook,说明 Hook 了哪个类/方法/导出函数
禁止事项
不要一开始就盲目改 smali
不要在没看 manifest 和主入口前就写 Hook
不要把 Java 反编译不完整直接等同于“逻辑不可分析”
不要在 .so 明显承载核心逻辑时继续死磕 Java 层
快速命令备忘
路由上下文
上游入口 : skills/SKILL.md (总控)、 routing.md
下游出口 :
核心逻辑在 .so → ida reverse/ 或 radare2/
需动态 Hook/验证 → reverse engineering/tools dynamic.md (Frida 章节)
通用逆向方法论 → reverse engineering/SKILL.md
同级关联模块 : reverse engineering/ (.so 分析和 Frida 进阶用法)
按需自举(On Demand Bootstrap)
本 skill 的入口脚本已接入统一自举系统。缺少工具时不会直接报错,而是自动尝试安装。
自动化能力边界
工具 可自动安装 安装方式 说明
jadx ✓ GitHub Release ZIP 自动下载解压到 %USERPROFILE%\Tools\jadx\
apktool ✓ GitHub Release JAR + wrapper 自动下载 jar 并生成 bat 到 %USERPROFILE%\Tools\apktool\
JEB Pro ✗ 用户手动安装并提供有效许可证 可选的 Android / ARM 交叉验证工具;第三方 MCP bridge 需单独审计
frida / frida ps ✓ pip install frida tools 需要 Python 已安装
adb ✓ winget / fallback path 自动安装 Android Platform Tools
zipalign ✗ 需手动安装 Android Build Tools sdkmanager "build tools;35.0.0"
apksigner ✗ 需手动安装 Android Build Tools 同上
自举触发点
scripts/decode.ps1 :缺 jadx 或 apktool 时自动调用 bootstrap reverse.ps1
scripts/rebuild sign install.ps1 :缺 adb 或 apktool 时自动调用 bootstrap
scripts/frida run.ps1 :当前仍为手动检查(frida 通常已通过 pip 安装)
自举失败时
如果自动安装失败,脚本会抛出明确错误并附带手动安装链接。常见原因:
网络不通(GitHub API / PyPI 不可达)
winget 不可用(Windows 版本过低)
Java 未安装(apktool 依赖 JDK)
任务完成自检(声称完成前 MUST 通过)
[ ] 我是否执行了工作流中的每一步(而不是只阅读)?
[ ] 我是否基于 tool index 使用了真实工具路径?
[ ] 我是否产出了可复现证据(命令/脚本/截图/报告)?
[ ] 我是否完成并回写了 RULES 要求的 Checklist 项?
[ ] 若命中隐藏图标/格机/持久化线索:是否按 U–AV cookbook 记录 E android Evidence(授权范围内)?