逆向工程 MCP 是做什么的?
使命
从授权工件中产生可辩护的逆向工程结论。该技能协调静态分析、受控执行、仿真、插桩、协议推理、漏洞分类和报告,同时保全证据并避免操作滥用。
当用户要求理解、反编译、调试、插桩、比较、仿真、模糊测试或记录现有二进制文件、应用程序、固件映像、协议、文件格式或可疑样本时,使用此技能。它并不因为目标可访问而授予访问权限。
不可协商的操作契约
- 在接触目标前明确范围:所有者或授权依据、确切的工件/设备/服务、允许的技术、时间窗口、网络限制、数据处理和停止条件。
- 保留原始工件。使用副本工作,首先记录 SHA-256 和大小,并保留来源、时间戳、工具版本、转换过程和重要命令。
- 优先选择离线、只读、可逆的分析。在常规分析期间,切勿提交凭据、联系真实的命令与控制基础设施、更改生产系统或刷写硬件。
- 将观察结果与推断分开。将声明标记为
观察到、推断或未知;引用偏移量、地址、跟踪、数据包、日志或可重复的实验。 - 使用假设和验收标准。每个昂贵或可执行操作必须回答一个已定义的问题,并说明哪种结果会确认或削弱该假设。
- 使用独立视角交叉检查重要结论:反编译器对比汇编、静态结构对比运行时跟踪、或格式假设对比差异输入/输出。
- 说明覆盖范围和局限性。安静的跟踪、缺失的符号、不完整的仿真或不可重现的崩溃并非缺失的证据。
分析生命周期
除非用户要求更狭窄的任务,否则遵循以下生命周期。详细阶段清单请阅读 references/workflow.md。
阶段 0:范围门控
如果授权或范围不明确,则停留在高级计划阶段。在解决缺失的边界之前,不要创建案例记录、执行代码、绕过访问控制、联系服务、上传样本或更改设备。
阶段 1:接收与完整性
创建包含工件名称、来源、格式、架构、大小、SHA-256、时间戳、疑似运行时和已知排除项的目标清单。使用 scripts/init_case.py 生成确定性清单。切勿将生成的案例数据放置在公共存储库中。
阶段 2:分类
识别文件格式、架构、入口点、节/段、导入/导出、符号、字符串、熵、编译器或加壳器线索、签名和缓解标志。如果可用,从本地只读 MCP 开始。记录正面和负面观察结果。
阶段 3:静态重建
恢复函数、控制流、数据流、调用图、交叉引用、命名空间、类型、资源、配置和信任边界。将反编译器输出视为假设。对照反汇编和原始字节确认安全相关路径,特别是解析器、反序列化器、更新逻辑、密码学/密钥处理、权限转换、IPC 和错误路径。
阶段 4:假设测试
选择最具针对性的技术,以区分相互竞争的解释。使用 Capstone 或 radare2 进行汇编验证,Ghidra 进行深层结构分析,angr/Unicorn 进行有界推理,以及差异样本进行协议和格式分析。保存确切的输入和预期观察结果。
阶段 5:受控动态分析
仅在隔离、可恢复的实验室中使用 GDB/gdbserver、Frida、QEMU 或沙箱。默认禁用或模拟网络,移除凭据和敏感挂载点,在执行前创建快照,并酌情捕获进程、系统调用、内存、文件、IPC 和网络证据。动态执行需要对样本和问题有明确的授权。
阶段 6:关联与分类
构建从源头到行为的链条:输入或信任边界 → 解析器/状态转换 → 相关函数或指令 → 可观察效果 → 影响。对于漏洞,区分根本原因、可达性、前提条件、可利用性、受影响的版本、影响和修复方案。优先选择最小破坏性的可重现代码,而非武器化的利用代码。
阶段 7:报告
除非要求其他格式,否则使用 references/report-template.md。包括范围、完整性、环境、方法、证据表、置信度、局限性、影响、修复/检测指南、未解决问题和安全的复现细节。
后端路由
选择最小且充分的集合,然后在证据受阻时升级:
| 问题 | 首选后端 | 要求验证 |
|---|---|---|
| 这是什么文件? | LIEF、file、只读 MCP | 哈希和格式元数据 |
| 此函数做什么? | Ghidra MCP | 汇编、调用者/被调用者或数据流 |
| 何处使用了字节模式或 API? | Ghidra 搜索、radare2、YARA | 地址和周围字节 |
| 路径能否到达条件? | angr 或有界 Unicorn | 具体约束或静态路径 |
| 运行时会发生什么? | GDB、Frida、QEMU、沙箱 | 可重现的跟踪和隔离记录 |
| 代码是否加壳或混淆? | 熵、FLOSS、capa、Ghidra、radare2 | 节布局、解码后的字符串或行为 |
| 固件映像是否为复合结构? | binwalk、strings、QEMU/Unicorn | 偏移量、提取的哈希和仿真限制 |
| 协议如何运作? | 受控样本、Scapy/boofuzz、差异测试 | 保存的捕获和状态机证据 |
references/mcp.md 中描述的本地 MCP 是确定性和只读的。Ghidra 后端用于深度静态分析;其变异工具需要明确批准,且其项目缓存必须与样本分开。Shell 命令和可执行后端是后备或假设测试表面,而非证据记录的替代品。
证据与置信度
对于每项实质性发现,维护:
- 声明: 一个精确的陈述,而非一堆假设。
- 证据: 文件、哈希、偏移量/地址、跟踪、数据包、日志或实验标识符。
- 解读: 证据为何支持声明。
- 替代方案: 未排除的合理解释。
- 置信度: 高、中或低,并附上理由。
- 状态: 已确认、需要重现、受阻或已证伪。
重要的发现应在可行时有两个独立的锚点。推荐使用 references/case-schema.md 中的机器可读结构。
专门模式
当目标不是简单的本地二进制文件时,请阅读 references/modes.md 和 references/tool-routing.md。
- 恶意软件或可疑代码: 首先隔离;提取功能、配置、持久化、指标和行为,无需实时命令与控制。
- 漏洞分析: 在讨论严重性之前,证明不安全边界和可达性;不要从可疑指令或未经验证的崩溃推断远程可利用性。
- 固件和硬件: 记录启动链、分区、更新信任、调试接口和恢复路径;未经明确授权,不得刷写或更改启动状态。
- 协议和文件格式: 从受控的差异观察推断语法和状态转换;将猜测的语义标记为假设。
- 托管/移动目标: 在分析行为之前,识别运行时、打包、权限、IPC、签名、导出组件、存储和本地桥接。
- 混淆和反分析: 在消除混淆之前,记录其机制和效果;使用副本工作并保留原始行为。
执行与安全边界
GDB/gdbserver、Frida、QEMU、模糊测试器和沙箱运行器即使用于观察,也能执行目标控制的代码。需要可丢弃的虚拟机或等效隔离、干净的快照、禁用/模拟的网络、无真实凭据以及明确的、针对样本的授权。在外部网络访问、生产交互、固件刷写、身份验证/许可绕过或在本地授权实验室之外的利用测试之前暂停。
拒绝或重定向其主要目的是未经授权访问、凭据窃取、持久化、逃避、破坏性操作、数据泄露或绕过安全控制的请求。当操作范围不存在时,防御性玩具示例、静态研究计划或对已拥有样本的分析是可以接受的。
可复现性标准
返回,除非用户要求不同的格式:
- 范围、授权假设、排除项和目标清单。
- 工件哈希、环境、工具版本和隔离措施。
- 有序的方法和分析时间线。
- 有证据支持、附带置信度和替代方案的发现。
- 影响、修复、检测或兼容性指南。
- 局限性、未回答的问题和后续实验。
- 包含命令、脚本、偏移量、跟踪、捕获和输出参考的安全附录。
将生成的清单、样本、日志、凭据、本地路径和私有标识符保留在此公共技能存储库之外。