Skill: AI Mobile Reverse Skills
定位
本 Skill 是整套移动安全分析体系的根入口,也是唯一的阶段调度入口。
它面向以下典型场景:
- Android App 静态逆向分析
- 抓包结果与源码实现联动分析
- SO / JNI / native 通信与加密逻辑分析
- 弱加密、认证授权、组件安全、业务逻辑等高风险问题筛查
- 授权环境下的最小验证方案设计
- 渗透测试报告与交付物生成
它不替代具体阶段做细节分析,而是负责:
- 识别用户当前要执行的阶段。
- 识别当前已连接的 MCP、已提供的输入材料和已有的中间产物。
- 检查当前阶段的最低启动条件是否满足。
- 将任务路由到正确的阶段 Agent。
- 约束各阶段按统一输入输出契约推进。
进入某一步后,必须以对应阶段文件为直接执行标准。
运行方式
本 Skill 采用固定 6 阶段执行模式。所有模式都从 Phase 1 开始,区别只在于:
- 每一阶段结束后是否默认挂起,等待人工确认
- 自动化从哪一段开始接管后续流程
运行入口统一分为两大类,且允许用户在开始时显式选择:
- Phase 1:APK 静态侦察
- Phase 2:流量与代码对齐
- Phase 3:SO 与 JNI 深度分析
- Phase 4:弱加密与高风险漏洞筛查
- Phase 5:最小验证 POC 设计
- Phase 6:渗透报告汇总
模式选择规则
用户在开始时可以显式声明:
run_mode: step_by_steprun_mode: auto_chain
若 run_mode = auto_chain,则还可以继续声明:
auto_chain_mode: Aauto_chain_mode: Bauto_chain_mode: C
总控执行原则:
- 若用户已显式声明模式,则总控必须优先按该模式执行,不再自行猜测。
- 若用户未声明模式:
- 默认进入
step_by_step - 只有当用户明确表达“自动推进”“一条提示词跑完”“后面自动继续”等含义时,才进入
auto_chain
- 默认进入
- 若用户声明了
auto_chain但未声明auto_chain_mode,总控应根据当前最早可行切入点推断:- 若用户强调“第一阶段后人工处理抓包与前置准备,再自动推进后续”,优先按
A - 若用户强调“前 1-3 阶段人工控制,后 4-6 自动收口”,优先按
B - 若用户强调“从第一阶段起全流程自动推进”,优先按
C
- 若用户强调“第一阶段后人工处理抓包与前置准备,再自动推进后续”,优先按
- 无论选择哪种模式,总控都必须先执行 Phase 1,不允许因为选择了自动链而跳过第一阶段。
类别一:逐阶段步进模式
对应值:
run_mode: step_by_step
适用场景:
- 测试人员希望人工控制每一步推进节奏
- 每一阶段结束后先人工复核 JSON / Markdown 产物
- 只有确认当前阶段结论后,才进入下一阶段
运行机制:
- 用户先声明运行模式。
- 总控仍从 Phase 1 开始返回标准输入模板。
- 用户补充当前阶段所需材料。
- 总控路由到对应 Agent 执行。
- 当前阶段完成后默认挂起,等待人工确认是否继续下一阶段。
人工介入点:
- 每个阶段结束后都可以人工停下复核
- 可人工调整下一阶段是否继续、继续到哪一步、是否更换输入材料
类别二:自动链
对应值:
run_mode: auto_chain
自动链再细分为以下三条链路。三条链路都从 Phase 1 开始,只是自动化生效的起点不同。
自动链 A:分析闭环
对应值:
run_mode: auto_chainauto_chain_mode: A
适用场景:
- 希望整个流程从 Phase 1 开始
- 但第一阶段结束后,需要人工完成检测绕过、代理配置、抓包准备等前置操作
- 用户明确说明后续
burp-mcp/yakit-mcp与ghidra-mcp/ida-mcp已接通 - 希望在这些前置动作完成后,由系统自动推进后续阶段
运行范围:
- Phase 1 人工确认
- Phase 2 -> Phase 3 -> Phase 4 -> Phase 5 -> Phase 6 自动推进
运行机制:
- 总控先执行 Phase 1。
- Phase 1 完成后默认挂起,等待人工完成抓包与其他前置准备。
- 当用户确认“前置准备已完成”后,总控检查:
- Phase 1 结果是否存在
- 抓包材料是否真实可用或抓包 MCP 是否可用
- Native 分析 MCP 或本地 native 材料是否可用
- 即使用户已人工完成前置操作,本 Skill 仍必须先做前置检查,而不是直接跳过检测结论、抓包材料和 JNI / so 线索判断。
- 若条件成立,则从 Phase 2 自动推进到 Phase 6。
- 若关键条件不成立,则在缺失点暂停,并明确指出阻塞项。
人工介入点:
- 人工负责完成 Phase 1 之后的抓包与前置环境准备
- 一旦用户明确“前置准备已完成”,后续分析链默认自动推进
自动链 B:验证闭环
对应值:
run_mode: auto_chainauto_chain_mode: B
适用场景:
- 希望整个流程从 Phase 1 开始
- 前 1-3 阶段由人工主导并逐步确认
- 从 Phase 4 开始不再停下,而是自动推进到验证与报告阶段
运行范围:
- Phase 1 -> Phase 2 -> Phase 3 人工确认
- Phase 4 -> Phase 5 -> Phase 6 自动推进
运行机制:
- 总控仍从 Phase 1 开始执行。
- Phase 1、2、3 每一阶段结束后默认挂起,等待人工确认是否继续。
- 进入 Phase 4 后,总控检查
vuln_analysis.json、risk_matrix.json及相关前序材料是否存在。 - 若条件成立,则从 Phase 4 自动进入 Phase 5,再自动进入 Phase 6。
- 若验证设计或报告所需关键材料缺失,则暂停并提示缺失项。
人工介入点:
- 人工负责完成并确认前 1-3 阶段
- 人工可在进入 Phase 4 前取消自动链,改为全程逐步执行
自动链 C:直通车
对应值:
run_mode: auto_chainauto_chain_mode: C
适用场景:
- 测试人员在一开始就已经完成全部人工前置准备
jadx-mcp、burp-mcp/yakit-mcp、ghidra-mcp/ida-mcp已全部接通- 抓包结果已经准备完毕
- 希望从 Phase 1 一路自动推进到 Phase 6
运行范围:
- Phase 1 -> Phase 2 -> Phase 3 -> Phase 4 -> Phase 5 -> Phase 6
运行机制:
- 总控先执行 Phase 1,生成 APK 静态侦察结果。
- 即使用户已经人工确认“抓包可行”,本 Skill 仍必须执行 Phase 1 的检测与入口识别,不能跳过样本画像和环境检测检查。
- Phase 1 完成后,总控检查以下条件:
- 抓包材料是否已存在或抓包 MCP 已可用
- Native 分析 MCP 是否已接通
- 是否具备进入 Phase 2 与 Phase 3 的最低输入
- 若条件成立,则自动进入
auto_chain,从 Phase 2 连续推进到 Phase 6。 - 若条件不成立,则在最早阻塞阶段暂停,并提示缺失条件。
人工介入点:
- 人工负责在启动前完成 MCP 接入、抓包准备与其他前置环境操作
- 一旦启动直通车模式,后续阶段默认自动推进,除非用户主动中断
自动衔接总原则
当用户明确表达“只输入一次,后续自动衔接”“尽量连续推进到报告”“从头跑到尾”时,总控应优先进入 auto_chain 模式。
在 auto_chain 模式下,总控必须:
- 只在开始时收集一次最小必需输入。
- 自动识别
{output_dir}下已有中间产物,避免重复询问。 - 在每个阶段结束后自动判断是否满足下一阶段最低条件。
- 若满足条件,直接推进下一阶段。
- 若不满足条件,只在真正缺失关键输入时暂停,并明确指出缺少什么。
- 默认目标是从当前最早可行阶段推进到 Phase 6。
默认原则如下:
- 默认只要求最基本输入项
- 不要求用户手动指定
focus - 每个 Agent 默认完成本阶段的标准分析范围
- 已提供
output_dir时,应优先落盘标准产物,而不是只输出对话摘要 - 若
output_dir不存在,应先创建后再写入结果
补充说明:
- 当前仓库提供的是 Skill 总控规范、阶段 Agent 文档与本地索引脚本
- 当前并未内置独立 CLI、对话路由器或“一键跑完整 6 阶段”的程序入口
- 文档中提到的“总控返回模板并路由”,指的是上层 AI / Skill 按本文件执行,而不是仓库内已有单独命令行程序
模式启动模板
以下模板用于在任务开始时显式声明运行模式。
第一步:先声明模式
模板 1:逐阶段步进模式
run_mode: step_by_step
说明:
- 整个流程从第一步开始
- 每个阶段结束后默认挂起
- 等人工复核当前阶段产物后再继续
模板 2:自动链 A(分析闭环)
run_mode: auto_chain
auto_chain_mode: A
说明:
- 整个流程从第一步开始
- 第一阶段结束后,等待人工完成抓包准备、MCP 接通和其他前置动作
- 从第二阶段开始自动推进到第六阶段
模板 3:自动链 B(验证闭环)
run_mode: auto_chain
auto_chain_mode: B
说明:
- 整个流程从第一步开始
- 前 1-3 阶段默认人工确认
- 从第四阶段开始自动推进到第六阶段
模板 4:自动链 C(直通车)
run_mode: auto_chain
auto_chain_mode: C
说明:
- 整个流程从第一步开始
- 一开始就假定人工前置准备已全部完成
- 从第一阶段开始按自动链持续推进到第六阶段
- 直通车模式仍必须先执行 Phase 1 的样本侦察与检测确认
第二步:进入第一阶段
无论选择哪种模式,后续都应先进入第一阶段模板:
step: 1
analysis_mode: local_source/jadx_mcp_session
target_dir: sample_target/decompiled
output_dir: analysis_runs/current_run
jadx_mcp: yes/no
补充说明:
- 若选择
auto_chain_mode: A或auto_chain_mode: C,可以在第一阶段模板之后继续补充抓包、Native、报告相关参数 - 若选择
auto_chain_mode: B,可先完成第一阶段,后续在进入第四阶段前补充验证与报告参数
使用时机
当用户要分析以下任一材料时,应启用本 Skill:
- 脱壳后、反编译后的 Android 目录
- Jadx 反编译结果
- Burp / Yakit / mitmproxy 抓包结果
- so 文件、JNI 线索、IDA / Ghidra 工程
- 前序阶段输出的
raw_*.json、*_analysis.json、report.md
总控执行铁律
- 只允许按当前 6 个阶段执行,不得新增主阶段,不得修改顺序,不得偷换名称。
- Phase 1 只分析已经得到的脱壳后、反编译后的材料,不得表述成“本 Skill 负责脱壳”。
- 默认顺序推进;若用户明确要求“开始第 N 步”,且材料足够,可直接进入该步。
- 默认采用“AI 主导分析 + 阶段脚本组合”:
- 若当前 MCP 与材料足够,优先直接由 AI 执行阶段分析。
- 当阶段走本地代码分析路径时,对应脚本默认执行,用于补齐批量索引与结构化原始命中。
- 脚本不取代阶段分析结论。
- 所有结论必须尽量绑定证据:
- 代码路径
- 行号或符号名
- 抓包字段
- JNI / so 伪代码片段
- 或
raw_*.json原始命中
- 若当前阶段材料不足,只能指出缺失项和下一步需要准备什么,不能编造上下文。
- 当前阶段完成后,应尽量产出可供下一阶段消费的标准产物。
- Phase 1 在用户提供
{target_dir}与{output_dir}时,默认应生成:file_inventory.jsontech_stack.jsonentrypoints.jsonenv_guard_report.json除非用户明确要求“只口头分析,不写文件”,否则不得只给对话总结而不落盘。
{output_dir}一旦在第一次输入中确认,就应视为整个会话的统一输出根目录,不得在后续阶段随意变更,除非用户显式覆盖。- 统一输出根目录确认后,总控应默认采用按阶段分目录落盘的方式,而不是把所有产物平铺在根目录。
统一输入变量
总控优先识别并沿用以下变量:
{target_name}:目标 App 名称{apk_path}:APK 路径,可选,仅用于补充样本元信息{target_dir}:脱壳后、反编译后的目录{traffic_source}:Burp / Yakit / mitmproxy 导出结果{native_analysis_source}:IDA / Ghidra 工程、伪代码或 so 样本路径{output_dir}:输出目录raw_*.json:脚本索引结果*_analysis.json:阶段分析结果report.md/security_report.md:最终报告类文档
会话级路径继承规则
一旦用户在当前任务中明确提供了以下路径或标识,总控必须把它们视为当前会话的默认上下文,后续阶段自动继承,除非用户显式覆盖:
{target_name}{apk_path}{target_dir}{traffic_source}{native_analysis_source}{output_dir}
继承原则如下:
- 用户第一次提供后,后续阶段不得重复要求再次填写相同路径。
- 若用户只说“继续第二步”“继续第三步”“继续第四步”,总控应优先复用已记录的路径上下文。
- 若用户启动
4/5/6一体化模式,只需在开始时说明一次{output_dir},后续 Phase 5、Phase 6 自动继承。 - 若用户重新提供了新的路径,则以最新值覆盖旧值。
- 若当前阶段缺失某类路径,但可以从已有产物推断,例如已知
{output_dir}中存在前序文件,则应优先从已知上下文推断,而不是再次要求用户手工填写。
统一输出目录规则
当用户第一次提供 {output_dir} 时,总控必须将其视为“统一输出根目录”,并在其下默认创建以下阶段子目录:
{output_dir}/step1{output_dir}/step2{output_dir}/step3{output_dir}/step4{output_dir}/step5{output_dir}/step6
各阶段默认输出位置如下:
- Phase 1 ->
{output_dir}/step1/ - Phase 2 ->
{output_dir}/step2/ - Phase 3 ->
{output_dir}/step3/ - Phase 4 ->
{output_dir}/step4/ - Phase 5 ->
{output_dir}/step5/ - Phase 6 ->
{output_dir}/step6/
默认要求:
- 第一阶段开始前,应先确保统一输出根目录存在。
- 第一阶段执行时,应至少创建
step1,并建议同时预创建step2到step6。 - 后续阶段默认只向自己的阶段目录写入产物。
- 后续阶段读取前序产物时,应优先从对应
stepN/目录中读取,而不是要求用户重新指定文件路径。 - 若仓库或用户已有旧版“平铺输出”结果,可兼容读取,但新的默认写入方式应为分阶段目录。
产物路径别名规则:
- 新流程默认将 Phase 1 产物解析为
{output_dir}/step1/<artifact>。 - Phase 2 产物默认解析为
{output_dir}/step2/<artifact>。 - Phase 3 产物默认解析为
{output_dir}/step3/<artifact>。 - Phase 4 产物默认解析为
{output_dir}/step4/<artifact>。 - Phase 5 产物默认解析为
{output_dir}/step5/<artifact>。 - Phase 6 产物默认解析为
{output_dir}/step6/<artifact>。 - 读取时可以兼容旧版根目录平铺产物,写入时默认不得再平铺到根目录。
推荐同时在根目录维护:
{output_dir}/analysis_state.json
用于记录:
- 当前目标名称
- 会话级路径上下文
- 当前执行到的阶段
- 各阶段状态
- 各阶段产物路径
analysis_state.json 角色说明
analysis_state.json 是整条 1-6 阶段工作流的状态记录文件,不负责保存具体分析结论,而负责记录当前任务的运行状态。
它的主要作用是:
- 记录当前任务的基本上下文,例如
{target_name}、{target_dir}、{output_dir}、运行模式和自动链模式; - 记录当前执行到的阶段,以及每个阶段是
pending、running、waiting_review、completed、blocked还是failed; - 为自动链 A / B / C 提供切换依据,判断当前是否允许自动进入下一阶段;
- 为中断恢复提供依据,使流程在挂起、阻塞或失败后能够从正确阶段继续;
- 索引各阶段输出目录,避免后续阶段重复询问前序产物路径。
职责划分如下:
agents/*.md负责执行各阶段分析;analysis_state.json负责记录流程状态;- 总控负责在阶段开始、结束、挂起、阻塞或失败时更新该文件。
最小字段建议包括:
target_namerun_modeauto_chain_modetarget_diroutput_dircurrent_phaseoverall_statusmanual_readyphases
阶段状态字段
总控与各阶段默认应统一使用以下状态值:
pending:尚未开始running:正在执行waiting_review:当前阶段已执行完毕,等待人工确认completed:当前阶段已完成,可供下游消费blocked:缺少输入、条件不满足或被人工要求暂停failed:执行报错或结果不可用
默认规则如下:
run_mode = step_by_step时,阶段执行结束后默认写为waiting_review- 人工确认允许继续后,当前阶段再写为
completed run_mode = auto_chain时,满足切换条件后,当前阶段写为completed并自动进入下一阶段- 缺少关键材料时应写为
blocked,而不是假装继续推进 - 执行报错或关键产物无效时应写为
failed
自动链切换条件
自动链不是“时间到了自动跳转”,而是必须满足前置条件后才能进入下一阶段。
链路 A
适用逻辑:
- Phase 1 正常执行并人工确认
- 人工完成抓包准备、MCP 接通和其他前置动作后
- 从 Phase 2 自动推进到 Phase 6
最小切换条件:
phase_1.status = completedmanual_ready.traffic_ready = truemanual_ready.mcp_burp_ready = true或{traffic_source}已提供manual_ready.mcp_native_ready = true或{native_analysis_source}已提供
链路 B
适用逻辑:
- Phase 1-3 由人工逐步确认
- 从 Phase 4 自动推进到 Phase 6
最小切换条件:
phase_1.status = completedphase_2.status = completedphase_3.status = completed
链路 C
适用逻辑:
- 从 Phase 1 开始执行
- 人工已在开始前完成全部环境、抓包与 MCP 准备
- 满足条件后持续自动推进至 Phase 6
最小切换条件:
analysis_mode = local_source或manual_ready.mcp_jadx_ready = truemanual_ready.traffic_ready = truemanual_ready.mcp_burp_ready = true或{traffic_source}已提供manual_ready.mcp_native_ready = true或{native_analysis_source}已提供phase_1.status = completed
补充要求:
- 所有自动链都必须先执行 Phase 1,不得跳过样本侦察与检测确认
- 若任一条件不满足,应写入
blocked并等待人工处理,而不是继续跳转 - 若产物存在但关键字段缺失,应优先进入
blocked或failed,不得视为completed
主阶段文件
总控只能路由到以下文件:
agents/agent-01-sample-recon.mdagents/agent-02-protocol-mapper.mdagents/agent-03-crypto-native-analyzer.mdagents/agent-04-crypto-vuln-analyzer.mdagents/agent-05-validation-designer.mdagents/agent-06-reporter.md
阶段路由总表
| 阶段 | 用户常见说法 | 主工具方式 | 推荐 MCP | 最低输入要求 | 推荐产物 |
|---|---|---|---|---|---|
| Phase 1 | “开始第一步”“先做静态侦察”“我接好了 jadx-mcp” | jadx-mcp 会话分析或本地目录分析 |
jadx-mcp 或无 MCP |
jadx_mcp=yes 或 {target_dir} |
默认生成 file_inventory.json tech_stack.json entrypoints.json env_guard_report.json |
| Phase 2 | “开始第二步”“做流量与代码对齐”“我接好了 Burp MCP” | 抓包与代码映射 | Burp MCP / Yakit MCP | {target_dir} + 抓包 MCP 或 {traffic_source} |
api_endpoints.json protocol_map.json traffic_alignment.json |
| Phase 3 | “开始第三步”“分析 so/JNI”“我接好了 ida-mcp”“我接好了 ghidra-mcp” | so / JNI 深挖 | ida-mcp / ghidra-mcp |
{native_analysis_source} 或 so 相关材料 |
crypto_native_analysis.json jni_analysis.json |
| Phase 4 | “开始第四步”“做漏洞筛查” | 汇总风险判断 | 无强制 MCP,必要时回调 jadx-mcp |
前 1-3 阶段结果至少一部分 | vuln_analysis.json risk_matrix.json,并尽量补齐 secrets_report.json jsbridge_analysis.json |
| Phase 5 | “开始第五步”“做最小验证”“设计 POC” | 验证方案设计与最小脚本模板生成 | Burp / Yakit MCP 可选 | Phase 4 结果 | validation_cases.json test_plan.md repro_steps.md poc_scripts_index.json |
| Phase 6 | “开始第六步”“汇总报告”“出报告” | 交付与汇总 | 无强制 MCP | 前 1-5 阶段结果 | security_report.md findings.json 等 |
说明:
- 表中的“推荐产物”默认应写入对应的
stepN/目录。 - 若使用统一输出根目录,则不应再把这些文件直接平铺写到
{output_dir}根下。
路由规则
Rule 1:优先识别显式阶段
如果用户明确说了“第一步/第二步/第三步/第四步/第五步/第六步”,优先按用户指定阶段路由。
典型说法如下:
- “帮我进行第一步”
- “我现在连接上了 jadx-mcp,开始第一步”
- “我现在连接上了 Burp MCP,继续第二步”
- “我现在连接上了 ida-mcp,做第三步”
- “我现在连接上了 ghidra-mcp,做第三步”
- “帮我做第四步漏洞筛查”
- “帮我设计第五步最小验证 POC”
- “帮我汇总第六步报告”
若用户只说:
- “开始第一步”
- “开始第二步”
- “开始第三步”
- “开始第四步”
- “开始第五步”
- “开始第六步”
而没有提供足够输入材料,则总控不得直接开始分析,必须先返回该阶段的标准输入模板,等待用户补齐后再执行。
Rule 2:没有显式阶段时,按材料推断最早可行阶段
若用户没有明确说第几步,则按以下顺序判断:
- 若提供了
{target_dir},优先以“本地反编译/解包源码目录模式”从 Phase 1 开始。 - 若已连接
jadx-mcp,且目标样本已在 Jadx 中打开,优先以“jadx-mcp会话模式”从 Phase 1 开始。 - 若未提供
{target_dir},且也未连接jadx-mcp,必须明确说明当前仓库不负责自行脱壳或反编译,并要求用户补齐jadx-mcp或脱壳后、反编译后的目录。 - 若只提供了抓包材料和代码目录,且 Phase 1 产物(
file_inventory.json或entrypoints.json)已存在,则可从 Phase 2 开始;否则必须先补做 Phase 1。 - 若只提供了 IDA / Ghidra / so 材料,且 Phase 1 产物已存在,则可从 Phase 3 开始;否则必须先补做 Phase 1。
- 若已提供
vuln_analysis.json、risk_matrix.json,可从 Phase 5 或 Phase 6 开始。 - 如存在歧义,优先选择更早的阶段,而不是擅自跳步。
注意:后续阶段的 Agent 会硬性检查前序阶段产物是否存在。若跳过 Phase 1 直接进入 Phase 2 / 3 / 4,Agent 会因缺少 file_inventory.json、entrypoints.json 等关键输入而终止。
Rule 3:阶段前置检查
进入某一阶段前,总控至少做如下检查:
Phase 1
满足以下之一即可:
- 有
{target_dir} - 有
jadx_mcp = yes,且目标样本已在 Jadx 中打开
Phase 1 必须显式区分两种分析方式:
analysis_mode = jadx_mcp_session:通过jadx-mcp连接当前 Jadx 会话,对已打开样本进行分析analysis_mode = local_source:直接分析反编译源码或 APK 解包后的目录
若同时提供 {output_dir},则本阶段默认要在该目录写出:
file_inventory.jsontech_stack.jsonentrypoints.jsonenv_guard_report.json
若 {output_dir} 不存在,应先创建该目录,再写入结果文件。
Phase 2
必须有:
{target_dir}- Phase 1 产物至少存在一个:
{output_dir}/step1/entrypoints.json或{output_dir}/step1/file_inventory.json(旧版根目录平铺产物可作兼容兜底)
且满足以下之一:
- 已连接 Burp MCP
- 已连接 Yakit MCP
- 提供
{traffic_source}
若缺少 Phase 1 产物,应先提示用户补做 Phase 1,而不是直接进入 Phase 2。
Phase 3
满足以下之一即可:
- 已连接
ida-mcp - 已连接
ghidra-mcp - 提供
{native_analysis_source} - 提供可直接分析的 so / JNI 伪代码材料
若需要启用 SO 自动化链路,包括 resolve_native_target.py 收敛目标 so 以及 ghidra_target_loader.py 自动导入 Ghidra,则必须同时具备:
- 反编译代码上下文:
{target_dir}或jadx_mcp_session - APK 解包源码上下文:必须存在 APK 解包目录,且能访问其中的
lib/<abi>/*.so
缺少反编译代码上下文时,只能做单文件 native 分析,不能声称完成 Java -> JNI -> 业务字段链路分析。
缺少 APK 解包源码目录时,可以收敛候选 so 名称,或分析用户显式提供的 .so,但不能声称已自动化拉取 so。显式 .so 只属于用户指定的 native 分析材料,不属于“自动化拉取”链路。
Phase 4
必须具备以下材料,否则立即终止:
{output_dir}/step1/file_inventory.json必须存在(否则 Phase 1 未完成)- Phase 2 结果至少存在一个:
{output_dir}/step2/protocol_map.json{output_dir}/step2/traffic_alignment.json{output_dir}/step2/api_endpoints.json
- Phase 3 或 Phase 1 native 线索至少存在一个:
{output_dir}/step3/crypto_native_analysis.json{output_dir}/step3/jni_analysis.json{output_dir}/step1/raw_native_bridges.json
若 file_inventory.json 缺失,立即终止并提示 Phase 1 未完成。
若 Phase 2 与 Phase 3 关键输入均缺失,立即终止并提示先完成前序阶段。
若只有部分 Phase 3 输入缺失但 Phase 2 结果齐全,可继续但须降低 native 相关结论置信度。
Phase 5
应已有以下之一:
vuln_analysis.jsonrisk_matrix.json- 已确认或待验证的漏洞条目
Phase 6
应已有前 1-5 阶段中的至少一部分结果。
若不满足前置条件,总控必须指出缺少什么,而不是勉强推进。
Rule 4:先给模板,再执行
当用户进入某个阶段但材料不全时,总控必须优先做以下动作:
- 识别当前阶段编号
- 返回该阶段的标准输入模板
- 明确哪些字段是必填,哪些是可选
- 等用户补齐后,再路由到对应 Agent
总控不得在材料明显缺失时直接进行“猜测式分析”。
MCP 使用规范
Phase 1:APK 静态侦察
- 首选:
jadx-mcp - 备选:无 MCP,直接使用 VS Code / 本地目录检索
本阶段支持两种分析方式:
jadx_mcp_session:通过jadx-mcp直接读取 Jadx 当前已打开样本的 Manifest、类、方法、字符串、资源和调用线索local_source:直接分析已经脱壳、反编译或解包后的本地目录
本阶段默认至少应落盘以下产物:
file_inventory.jsontech_stack.jsonentrypoints.jsonenv_guard_report.json
其中 env_guard_report.json 不能因为“没有发现明确检测逻辑”而省略。若当前阶段仅确认壳、风控 SDK、native 安全库等间接信号,也应明确写出:
confirmedsuspectedsdk_signal_onlynot_confirmed_yetnot_observed
等状态之一,供第二步抓包准备和第四步风险收口直接消费。
本阶段的核心不是“执行反编译工具”,而是分析已经得到的材料:
- Manifest
- 权限与组件
- 三方 SDK
- 环境对抗逻辑
- 签名 / 加密 / Token / JNI / WebView 入口
在已提供 {output_dir} 的前提下,本阶段默认应将关键结果结构化落盘,而不是只停留在对话中:
file_inventory.jsontech_stack.jsonentrypoints.jsonenv_guard_report.json
若 {output_dir} 当前不存在,应先创建后再落盘。
Phase 2:流量与代码对齐
- 首选:Burp MCP / Yakit MCP
本阶段主要借助 MCP 获取:
- 请求列表
- Header / Query / Body 字段
- 响应特征
- 登录、支付、资料、上传等分类流量
再与代码目录中的:
- BaseURL
- Retrofit / OkHttp
- request 包装器
- sign / token / data / timestamp 等构造逻辑
进行映射。
本阶段最重要的不是单纯得到接口列表,而是尽量吐出可供 Phase 4 直接消费的字段级证据,例如:
field_rolelocationbuilder_pathcrypto_entry_candidaterelated_endpoint_groupvalue_shaperelated_native_candidatereplay_relevantmatched_field_flows
Phase 3:SO 与 JNI 深度分析
- 首选:
ida-mcp/ghidra-mcp - 主路径:通过
ida-mcp或ghidra-mcp直接驱动 IDA / Ghidra 分析 so 与 JNI 逻辑 - 本地脚本只负责补 JNI / bridge / loadLibrary 线索,不作为 so 逆向分析主手段
本阶段主要借助 MCP 获取:
- JNI 入口
- 交叉引用
- so 伪代码
- 关键函数上下文
- 算法与 native 防护逻辑线索
本阶段输出应尽量补齐可供 Phase 4 直接消费的还原字段,例如:
java_entrynative_entryrelated_fieldsrelated_endpointscrypto_algorithm_candidatekey_derivationiv_derivationsalt_derivationinput_orderoutput_encodingrestoration_confidence
Phase 4-6
- 无强制 MCP
- 主要消费前序结果
- 如需补证据,可回调前序 MCP,但不能借机改写当前 6 阶段主流程
其中:
- Phase 4 除
vuln_analysis.json、risk_matrix.json外,若已存在raw_secrets.json或 WebView / JSBridge 相关线索,应尽量补齐secrets_report.json、jsbridge_analysis.json - Phase 6 应优先消费上述补齐后的结构化产物,而不是在报告阶段重新从零归并
脚本调用规范
默认规则如下:
- 当 Phase 1 采用
local_source路径时,默认执行以下 4 个本地索引脚本:tools/scripts/endpoint_extractor.pytools/scripts/secret_scanner.pytools/scripts/native_bridge_indexer.pytools/scripts/env_guard_indexer.py- 上述 4 个脚本执行完毕后,自动运行
tools/scripts/ai_summarizer.py读取其输出,生成ai_summary.json
- 当 Phase 1 采用
jadx_mcp_session路径时,不默认执行上述 4 个索引脚本和摘要生成,优先直接消费jadx-mcp上下文 tools/scripts/sign_rebuilder.py为 Phase 5 签名重算工具,读取 Phase 3/4 产物生成 sign,不属于 Phase 1 默认执行范围tools/scripts/resolve_native_target.py与tools/scripts/ghidra_target_loader.py继续按原有自动化逻辑执行,不受上述规则影响
对应作用:
endpoint_extractor.py:提取 URL、接口路径、BaseURL、deeplink、provider、network security configsecret_scanner.py:提取密钥、Token、证书、云凭证、调试痕迹、内网线索native_bridge_indexer.py:提取 JNI、WebView、JSBridge、Native 加载与桥接线索,仅作为 Phase 3 的前置线索补充env_guard_indexer.py:提取 Root、模拟器、代理、SSL Pinning、Frida、签名校验、完整性校验线索tools/frida/android_phase1_bypass.js:提供授权环境下的 Root / 模拟器 / 代理 / SSL Pinning 基础绕过模板
阶段推进标准
总控在每阶段结束后,应尽量确认有标准产物可供下一阶段使用。
Phase 1 结束后
至少应尽量具备:
file_inventory.jsontech_stack.jsonentrypoints.jsonenv_guard_report.json
当采用 local_source 路径时,4 个索引脚本默认执行,还应产出:
raw_endpoints.jsonraw_secrets.jsonraw_native_bridges.jsonraw_env_guards.jsonai_summary.json
如识别到环境对抗逻辑,还应尽量补齐:
frida_bypass_plan.jsonfrida/android_phase1_bypass.js
Phase 2 结束后
至少应尽量具备:
api_endpoints.jsonprotocol_map.jsontraffic_alignment.json
并优先补齐以下字段,供 Phase 4 直接消费:
field_rolebuilder_pathcrypto_entry_candidaterelated_endpoint_groupvalue_shaperelated_native_candidatereplay_relevantmatched_field_flows
Phase 3 结束后
至少应尽量具备:
crypto_native_analysis.jsonjni_analysis.json
并优先补齐以下字段,供 Phase 4 直接消费:
java_entrynative_entryrelated_fieldsrelated_endpointscrypto_algorithm_candidatekey_derivationiv_derivationsalt_derivationinput_orderoutput_encodingrestoration_confidence
Phase 4 结束后
至少应尽量具备:
vuln_analysis.jsonrisk_matrix.json
并在 vuln_analysis.json 中尽量补齐:
crypto_findingssignature_findingscrypto_restorationpacket_riskssource_phase_2_fieldssource_phase_3_fieldsgap_filled_by_phase4
Phase 5 结束后
至少应尽量具备:
validation_cases.jsontest_plan.mdrepro_steps.mdpoc_scripts_index.json
如材料充足,还应尽量具备:
pocs/{vuln_id}/validate_request.pypocs/{vuln_id}/runtime_observe.jspocs/{vuln_id}/README.md
Phase 6 结束后
至少应尽量具备:
security_report.mdfindings.json- 与主报告配套的附件和全量明细
标准对话协议
以下模板用于“用户只说开始第 N 步”时,总控应返回给用户的标准输入格式。
总控必须先返回模板,再执行分析。
路径约定:
- 面向用户提供的样本路径、输出路径可以是用户自己的真实路径
- Skill 内部引用仓库文件时,一律以
ai-mobile-reverse-skills/为根目录使用相对路径 - 不应在 Skill 文档中写入任何个人机器的绝对目录
Phase 1 输入模板
当用户说“开始第一步”时,总控应优先返回:
step: 1
analysis_mode: jadx_mcp_session/local_source
target_dir: sample_target/decompiled
output_dir: analysis_runs/current_run
jadx_mcp: yes/no
字段说明:
analysis_mode:必填,二选一target_dir:当analysis_mode = local_source时必填,指向反编译源码或 APK 解包目录output_dir:必填,结果输出目录;若不存在应先创建jadx_mcp:当analysis_mode = jadx_mcp_session时必填,应为yesapk_path:可选,仅用于补充样本元信息
Phase 2 输入模板
当用户说“开始第二步”时,总控应优先返回:
step: 2
target_dir: sample_target/decompiled
output_dir: analysis_runs/current_run
mcp: burp/yakit/none
traffic_source: analysis_runs/current_run/traffic/traffic.json
字段说明:
target_dir:必填output_dir:必填;若不存在应先创建mcp:可选,Burp MCP / Yakit MCP / nonetraffic_source:当未直接使用 MCP 时建议提供
Phase 3 输入模板
当用户说“开始第三步”时,总控应优先返回:
step: 3
target_dir: sample_target/decompiled
output_dir: analysis_runs/current_run
mcp: ida-mcp/ghidra-mcp/none
native_analysis_source: sample_target/native/sample.i64_or_sample.gpr_or_libsample.so
字段说明:
target_dir:建议提供output_dir:必填;若不存在应先创建mcp:可选,ida-mcp/ghidra-mcp/ none,由使用者自行选择分析后端native_analysis_source:当使用本地 so / IDA / Ghidra 材料时填写
Phase 4 输入模板
当用户说“开始第四步”时,总控应优先返回:
step: 4
output_dir: analysis_runs/current_run
allow_reanalyze_code: yes/no
字段说明:
output_dir:必填;若不存在应先创建allow_reanalyze_code:可选,是否允许 Phase 4 回看 Java/smali/config
Phase 5 输入模板
当用户说“开始第五步”时,总控应优先返回:
step: 5
output_dir: analysis_runs/current_run
authorized_only: yes/no
字段说明:
output_dir:必填;若不存在应先创建authorized_only:建议填写,默认为 yes- Phase 5 默认除验证方案外,还应尽量为每个漏洞生成对应的最小 POC 脚本模板
Phase 6 输入模板
当用户说“开始第六步”时,总控应优先返回:
step: 6
output_dir: analysis_runs/current_run
target_name: 项目名称
report_type: brief/full
include_appendix: yes/no
字段说明:
output_dir:必填;若不存在应先创建target_name:建议填写report_type:可选,简版或完整报告include_appendix:可选,是否附带附录与复现步骤
用法 1:从第一步开始
用户说:
我现在连接上了 jadx-mcp,可以使用了,目标样本已经在 Jadx 里打开,输出目录是 analysis_runs/current_run,帮我进行第一步。
总控应:
- 识别为 Phase 1
- 检查
jadx_mcp = yes,且目标样本已在 Jadx 中打开 - 路由到
agents/agent-01-sample-recon.md - 直接按该文件执行
用法 2:进入第二步
用户说:
继续第二步。
总控应:
- 识别为 Phase 2
- 默认继承第一步已确认的
{target_dir}与{output_dir} - 若当前模式为
step_by_step,则只执行 Phase 2 并等待人工确认 - 若当前模式为
auto_chain + A/C,则在满足条件后继续自动推进后续阶段 - 路由到
agents/agent-02-protocol-mapper.md
用法 3:从第三步开始
用户说:
我现在连接上了 ida-mcp,可以使用了,IDA 工程在 sample_target/native/sample.i64,帮我进行第三步。
或:
我现在连接上了 ghidra-mcp,可以使用了,Ghidra 工程在 sample_target/native/sample.gpr,帮我进行第三步。
总控应:
- 识别为 Phase 3
- 检查 so / JNI / IDA 材料
- 路由到
agents/agent-03-crypto-native-analyzer.md - 聚焦 JNI、算法、Native 防护与还原材料
用法 4:直接进入后续阶段
用户说:
我已经完成前面几步,当前有 vuln_analysis.json 和 risk_matrix.json,帮我进行第五步。
总控应:
- 识别为 Phase 5
- 确认已有漏洞条目
- 路由到
agents/agent-05-validation-designer.md - 只做最小影响验证设计,不改写前序分析结论
用法 5:自动链 A
用户先说:
run_mode: auto_chain
auto_chain_mode: A
然后继续提供第一步模板。总控应:
- 先执行 Phase 1
- 等待人工完成抓包准备、MCP 接通和其他前置动作
- 进入 Phase 2 后自动推进到 Phase 6
- 在自动推进过程中默认继承已确认的路径与上下文
用法 6:自动链 B / C
用户先说:
run_mode: auto_chain
auto_chain_mode: B
或:
run_mode: auto_chain
auto_chain_mode: C
然后继续提供第一步模板。总控应:
- 对于
B:- 先执行 Phase 1-3
- 从 Phase 4 开始自动推进到 Phase 6
- 对于
C:- 从 Phase 1 开始按自动链持续推进到 Phase 6
- 无论
B还是C,都不得跳过第一步的样本侦察与检测确认
与其他文档的关系
- 本文件负责总控、路由、前置检查、阶段推进标准
README.md负责面向使用者的完整使用手册docs/MCP-INTEGRATION.md负责分阶段 MCP 接入规范agents/*.md负责每个阶段的详细执行方法tools/scripts/*.py负责本地索引、Native 目标收敛与 Ghidra 导入辅助;其中前 4 个索引脚本在local_source路径下默认执行
Source: Fausto-404/ai-mobile-reverse-skills — distributed by TomeVault.