reverse-skill 速查手册

reverse-skill 使用教程 · APK 与 .so 逆向

面向 AI 编码客户端的网络安全技能路由包(v1.0.1,MIT 主协议)· 把 APK / 二进制 / JS 加密 / CTF 任务路由到正确方法论与工具链 · 技能按使用频率讲解,.so 反编译单独成模块

zhaoxuya520/reverse-skill ↗ Cursor / Claude Code / Codex / OpenCode 必用 · 高频 · 中频 · 低频 仅授权样本

1这是什么

把逆向任务路由到正确方法论与工具链的技能包;本页是高频路径速查,不是完整技能百科。

强制合规:任何目标动作前需 scope.md 的 auth.status=granted,或「明确授权的离线样本」。只对自己的 App / 已授权样本 / 开源项目 / CTF 做逆向。
低频技能(.NET / Go-Rust / macOS / malware / CTF 编排等)未全文展开,完整包见 GitHub 仓库 的 skills/。

2安装与初始化

先装才能用

克隆

git clone https://github.com/zhaoxuya520/reverse-skill.git
cd reverse-skill

刷新索引(Linux / macOS)

bash skills/scripts/refresh-tool-index.sh

接入客户端

# 把 skills/ 放进 Cursor / Claude Code / Codex 的 skills 目录即可

前置依赖

依赖用途
JDKjadx / apktool
Node 22.12+JS 加密链
Python3frida
自有 IDA 许可深度反编译(脚本不破解)
缺 jadx / apktool / radare2 时 refresh 脚本可 bootstrap;IDA / JEB 需你自有许可手动装。Windows 用 .ps1,Linux/macOS 用 .sh。

3推荐黄金路径

分析一个 APK 里的 .so:授权 → 解包 → 侦察 → 反编译 → 动态验证 → 证据沉淀

4必用 · 每次分析

授权 + 解包 + 快速侦察

确认授权范围(合规第一步) 必用

reverse-skill 强制的 scope 门禁:任何目标动作前需生成 scope.md,auth.status=granted + 合法网络/离线样本范围。-Force 不绕过。

skills/scripts/case-init.ps1
# 生成 scope.md;仅「提了目标名字」≠已授权
只对自己系统 / 已授权样本 / 开源项目 / CTF 做分析。范围外(如竞品专有算法提取)不进入。提目标名字不等于授权;授权范围建议固化为模板复用。

APK 解包 / 找 .so(jadx + apktool) 必用

用 jadx + apktool 解包 APK,看 AndroidManifest、smali、资源,并定位 lib/**/*.so。核心逻辑在 native 时切到 ida-reverse / radare2。

apktool d app.apk -o apktool_out
jadx -d jadx_out app.apk
grep -r 'System.loadLibrary' apktool_out/smali/
先用 jadx 看高层逻辑;.so 明显承载核心时别死磕 Java 层。解包后看 lib/ 下是否有 .so。

.so 命令行快速侦察(radare2) 必用

第一轮 triage:看架构、字符串、导入导出,再进函数级反汇编。轻量、零许可、命令行友好。

rabin2 -I libxxx.so
rabin2 -z libxxx.so
rabin2 -i libxxx.so
r2 -A -q -c 'afl;iz;ii' libxxx.so
导入表检查 MUST 落 Evidence;先侦察后深挖,别上来全量分析。交互:aaa → afl → s 函数 → pdf。

5高频 · .so 深入

深度反编译 + 动态 Hook + 证据链

.so 深度反编译(IDA F5) 高频

打开 so → 反编译 → 类型恢复 → 重命名。长期深入、要伪代码时的首选。需自有 IDA 许可。

scripts/start.ps1          # 后台起 IDA HTTP MCP
scripts/open.ps1 -Path libxxx.so -TimeoutSeconds 120
GUI:Shift+F12 字符串 → X xref → F5 反编译 → N 重命名。strip 后全 sub_xxxx,靠 xref 还原。大 so 自动分析像卡死时用 -TimeoutSeconds 轮询;MCP schema 报错用 open.ps1 HTTP 直调。

.so 运行时动态 Hook(Frida) 高频

运行时观察/验证 native 函数:打印参数与返回值,必要时改返回值。静态看不出时必用。

frida-ps -U
frida -U -f com.xxx.app -l hook.js
先 Hook Java 看调用时机,再 Hook native 导出函数。反 Frida:server 改名 + 换端口 + spawn。

Ghidra 免费反编译 高频

跨平台(含 macOS)免费方案:函数图 + 反编译可用,是 IDA 的平替。

# 打开 Ghidra → Import libxxx.so → Auto Analyze
没 IDA 许可时用 Ghidra;分析结果可与 radare2 互相印证。

证据链 Evidence(field-journal) 高频

把每个导入表/字符串/函数的关键发现写入 Evidence(如 E-imports),形成可追溯证据链。这是 reverse-skill 的硬要求。

# 每个导入表 / 字符串 / 函数发现 → 写入 Evidence(E-imports 等)
发现即记录,别事后补;便于 case-review 回写时间线与报告。

6中频 · 按需路由

方法论 / Web / 报告 / 移动端

通用逆向方法论 / OLLVM

遇到 OLLVM 控制流扁平化(F5 出来一堆 while+switch)时,参考去扁平化文档,或动态跑通关键分支再反推。

# 参考 skills/reverse-engineering/references/ollvm-deobfuscation.md

前端 / Web 加密参数逆向

anything-analyzer + Reqable MCP + js-reverse:分析 Web/JS 端加密参数、签名逻辑。同样需落在授权范围内。

# anything-analyzer + Reqable MCP + js-reverse/

案例审查与报告交接

产出 timeline + Evidence→Finding→Path + report,把分析结论沉淀成可交接报告。

# skills/case-review/ 产出 timeline + Evidence→Finding→Path + report

移动端逆向(iOS / 反检测)

iOS 的 dylib/Mach-O 等价物、反检测绕过、objection 深入用法。Android 与 iOS 反检测思路互通。

# skills/mobile-reverse/references/ 含反检测绕过、objection 深入

7深度模块 · 反编译整个 .so 库

流程 / 注意事项 / 常见坑

合规前提:强制授权门禁。只对自己的 App / 已授权样本 / 开源项目 / CTF 做逆向;研究通用修图算法请走公开论文与开源实现(OpenCV、GPUImage 等),自己独立实现。

0. 前置:从 APK 取出 .so

apktool d app.apk -o apktool_out          # 解包 APK
ls apktool_out/lib/                       # arm64-v8a / armeabi-v7a / x86_64
cp apktool_out/lib/arm64-v8a/libxxx.so ./ # 取出目标 so
file libxxx.so                           # 确认架构与位数
真机多用 arm64-v8a(aarch64);模拟器可能 x86_64。先 file 确认架构。先在 Java 层 grep -r "System.loadLibrary" apktool_out/smali/ 确认哪个 so 承载核心逻辑。

1. 工具决策树

只快速看导出 / 字符串 / 导入

用 radare2:命令行、快、零许可。适合第一轮 triage。

要 F5 伪代码 / 类型恢复

用 IDA Pro(需自有许可):反编译最深、交互最强。

没有 IDA 预算

用 Ghidra:免费、跨平台(含 macOS)、函数图 + 反编译可用,是 IDA 的平替。

2. 静态分析(radare2 快速流)

rabin2 -I libxxx.so     # 基本信息:架构/位数/入口/是否 stripped
rabin2 -z libxxx.so     # 字符串(搜 "encrypt"/"key"/"secret"/"http")
rabin2 -i libxxx.so     # 导入表(MUST 先记录,再进函数级)
rabin2 -E libxxx.so     # 导出函数
r2 -A -q -c "afl;iz;ii" libxxx.so   # 自动分析 + 列函数/字符串/导入
r2 libxxx.so            # 交互:aaa → afl → s 函数 → pdf 反汇编
定位关键逻辑:从字符串 axt <addr> 找谁引用;afl~JNI 找 JNI 函数;s JNI_OnLoad 看动态注册。未 rabin2 -i 落 Evidence 不得进入函数级深挖。

3. 深度反编译(IDA)

scripts/start.ps1        # 后台静默起 IDA HTTP MCP
scripts/open.ps1 -Path libxxx.so -TimeoutSeconds 120   # 带超时轮询打开

IDA GUI:Shift+F12 字符串 → G 跳地址 → X 交叉引用 → F5 反编译 → N 重命名 / Y 改类型。符号被 strip 后靠字符串引用 + xref + 参数类型推断逐步还原,必要时写 IDAPython 批量标注。

4. 动态验证(Frida)

frida-ps -U                          # 连设备列进程
frida -U -f com.xxx.app -l hook.js  # spawn 注入
# hook.js:拦截 JNI 函数,打印参数/返回值
先 Hook Java 层确认调用时机,再 Hook native 导出函数。遇反调试/反 Frida:frida-server 改名 + 换端口 + spawn,或先脱壳再分析。

5. 注意事项(技术)

  • 先备份原 .so,只读分析优先;patch 前必须 r2 -w 且清醒确认(radare2 默认只读)。
  • 导入表硬门禁:未 rabin2 -i 落 Evidence 不得进函数级深挖。
  • IDA 自动分析大 so 可能长时间无输出——用 open.ps1 -TimeoutSeconds 轮询,别误判,更别 taskkill /T 杀(会连 GUI 一起干掉)。
  • 架构要匹配:arm64 so 用对应 IDA/radare2;混用反汇编会乱码。
  • 所有关键发现写入 Evidence,便于回写报告。

6. 常见坑

坑现象解法
加固 / 加壳(360/腾讯/梆梆)dex 加密、so 段被加密先 dump 脱壳(frida-dexdump / 内存 dump),再分析原始 so
OLLVM 控制流扁平化F5 出来一堆 while+switch去扁平化脚本(参考 ollvm-deobfuscation.md),或动态跑通关键分支
动态注册 JNIJava 层搜不到 native 实现去 JNI_OnLoad 里找 RegisterNatives 的真实函数偏移表
符号剥离 stripped全 sub_xxxx字符串 + xref + 类型恢复;写 IDAPython 批量标注
IDA 打开卡死 / 超时一直无输出open.ps1 -TimeoutSeconds 轮询;别 taskkill /T
MCP schema 报错idb_open 报 output schema 不符用 scripts/open.ps1 HTTP 直调绕过校验层
反调试 / 反 Fridahook 失败、App 闪退frida-server 改名换端口 + spawn;先脱壳
浮点 / NEON 指令伪代码可读性差结合动态跑、查 ARM 手册,或看汇编
架构不匹配反汇编全乱码file 确认架构后用对应工具
红线:对竞品的 .so 做逆向、把其中的专有修图算法提取出来复用到自己产品——会触对方 EULA + 商业秘密 / 著作权。合法做法是:只观察输入输出表现自行设计,或研究公开学术资料与开源实现独立重写。

8深度模块 · IDA / Ghidra / radare2 怎么选

定位对比 / 决策 / 能力矩阵 / macOS 适配

三个工具都能分析 .so,但定位不同:radare2 是命令行侦察刀,IDA 是工业级深度显微镜,Ghidra 是免费平替显微镜。

一句话定位

radare2(r2)

开源免费、纯命令行。快、轻、零许可。强在侦察与脚本化;伪代码弱,需 r2ghidra 插件补。

IDA Pro

商业付费、GUI。反编译(F5)最强、交互最顺。需自有许可,贵。

Ghidra

NSA 开源、免费、跨平台(含 macOS)。自带反编译器 + 函数图。大文件比 IDA 慢,日常够用。

能力对比矩阵

能力radare2IDA ProGhidra
价格免费商业(贵)免费
界面命令行/脚本GUIGUI
反编译伪代码弱(需 r2ghidra)最强强(够用)
反汇编强强强
函数图/控制流有最强有
类型恢复手工为主最强强
macOS 原生brewida64跨平台
上手成本高(命令多)中中

决策:标准组合拳

# ① 第一轮:radare2 看全貌(免费、快)
rabin2 -I libxxx.so && rabin2 -z libxxx.so && rabin2 -i libxxx.so
r2 -A -q -c 'afl~JNI;iz' libxxx.so

# ② 要 F5 / 类型恢复:IDA(有许可)或 Ghidra(无预算)
#    IDA:   scripts/open.ps1 -Path libxxx.so -TimeoutSeconds 120
#    Ghidra: Import → Auto Analyze

# ③ 运行时看输入输出:Frida
经验法则:只想知道导出了啥、字符串里有没有 key → radare2;要读懂算法逻辑 → IDA 或 Ghidra;怀疑静态看错 → Frida。

macOS 适配

  • radare2:brew install radare2,终端直接跑。
  • IDA:官方有 macOS 版 ida64。仓库自带 scripts/*.ps1 偏 Windows,Mac 上需手动起 IDA + HTTP MCP,或直接 GUI 打开。
  • Ghidra:Java 写的,macOS 直接 ./ghidraRun。
  • 三者都能在 Mac 分析 arm64 的 .so(aarch64),架构匹配即可。

选型常见坑

坑解法
IDA 许可贵 / 没预算直接上 Ghidra,反编译覆盖 80% 场景;剩下靠 radare2 + 耐心
Ghidra 大 so 卡慢先 radare2 圈定关键函数,再把那几个丢 Ghidra,别全量 Auto Analyze
radare2 命令太多记不住记核心 5 条:rabin2 -I/-z/-i、r2 aaa→afl→s→pdf;其余现查
三者伪代码不一致静态为主、Frida 动态交叉验证;Ghidra 与 IDA 互相印证更稳
工具怎么选是技术自由;对谁的目标用仍受授权门禁约束——只对自己 App / 授权样本 / 开源 / CTF。

9常见路由速查

任务类型 → 先走哪条技能

你手上是…先走再走
一个陌生 APK授权门禁 → apktool/jadx 解包有 .so 则 radare2 → IDA/Ghidra → Frida → Evidence
已知 .so 文件rabin2 侦察(导入表必落 Evidence)IDA/Ghidra 深挖 + Frida 验证
Web/JS 加密参数确认授权范围js-reverse / anything-analyzer 链
F5 全是 while+switchollvm-deobfuscation 参考动态跑通关键分支
要出报告交接Evidence 齐全case-review 产出 timeline + report
练手 / 竞赛开源 CTF 样本仓库 CTF-Sandbox-Orchestrator(完整包)

10完整技能包与省略项

本页优先高频路径;其余见仓库

技能(低频 / 特定场景)说明
dotnet-reverse.NET / C#:dnSpy / IL 元数据等价锚点
go-rust-reverseGo / Rust 符号与 runtime 结构
macos-reverseMach-O 段/节/符号/签名
malware-analysisYARA / 行为分析(仅授权样本)
ctf-orchestratorCTF 42 子技能沙盒
scope-contract授权范围模板化(ops/scope-contract)
完整 SKILL.md 与脚本见 https://github.com/zhaoxuya520/reverse-skill。

本文档基于 zhaoxuya520/reverse-skill 公开内容梳理 · 聚焦 APK / .so 合规学习路径 · 按使用频率排序