跳到主要内容
AI教程

使用 Reverify 验证 AI 辅助二进制分析

安装 Reverify,检查二进制文件并通过 MCP 为 AI 智能体提供确定性逆向工程工具。

使用 Reverify 验证 AI 辅助二进制分析

Reverify 的作用

Reverify 是一款 AI 辅助逆向工程工具包,旨在减少二进制分析过程中的幻觉。Reverify 不会直接相信语言模型的重建结果,而是将其视为假设,并根据实际二进制文件进行检查。

其工作流程很简单:模型提出假设,确定性工具进行验证。Reverify 可以反汇编字节、扫描模式、解析可执行文件格式、提取字符串、模拟代码执行,以及检查线格式。经过检查的声明会得到以下三种结果之一:VERIFIEDREFUTEDINCONCLUSIVE,并附带观测到的证据。

仅可将 Reverify 用于获得授权的逆向工程,例如恶意软件分析、CTF 挑战、互操作性研究,以及检查您拥有或获准检查的软件。

主要功能

  • 确定性验证:根据目标二进制文件中实际观测到的字节判断声明,而不是直接接受 AI 生成的解释。
  • 可执行文件解析:检查 PE、ELF 和 Mach-O 文件,包括架构、入口点、节,以及在支持情况下的导入与导出。
  • 反汇编与模拟:分析 x86、x64、ARM 和 ARM64 代码,具体能力取决于当前启用的后端。
  • 模式与字符串分析:使用 ?? 通配符扫描 AOB 模式,并提取带偏移量的 ASCII 或 UTF-16LE 字符串。
  • 协议检查:无需 schema 即可解码 Protobuf 和 TLV 数据。
  • 逆向工程实用工具:生成 Frida Hook、创建对齐的十六进制转储,以及生成二进制差异或补丁。
  • 智能体集成:将 Reverify 作为 Model Context Protocol 服务器运行,供 Claude Code 和 Cursor 等工具使用。
  • 纯 Python 回退方案:基础软件包无需 Ghidra 或强制安装原生分析引擎即可运行。

安装与设置

安装纯 Python 核心

从 PyPI 安装 CLI 和 MCP 服务器:

pip install reverify

此命令会安装纯 Python 核心,是最简单的入门方式。

安装可选的成熟引擎

如需增强解析、反汇编和模拟功能,请安装完整扩展:

pip install "reverify[full]"

完整安装允许 Reverify 使用 Capstone 进行反汇编、使用 Unicorn 进行 CPU 模拟,并使用 LIEF 解析 PE、ELF 和 Mach-O。如果这些软件包不可用,Reverify 将回退到其纯 Python 实现。

检查当前启用的引擎:

reverify backends

直接从检出的仓库运行

也可以在不安装软件包的情况下直接使用仓库:

python reverify/cli.py auto sample.bin --json
python reverify/cli.py parse-pe sample.exe --json
python reverify/cli.py disasm 90505831C0C3 --arch x86_64

基础二进制文件分类分析

首先使用 auto 命令检测文件格式和架构、检查节,并报告值得关注的字符串:

reverify auto sample.bin --json

当其他脚本、CI 作业或 AI 智能体需要以编程方式使用结果时,--json 选项非常有用。

如需针对性地解析可执行文件,可对 PE、ELF 或 Mach-O 文件使用 parse

reverify parse sample.bin --json

对于 Windows 可执行文件,专用 PE 解析器可以检查 PE32 或 PE32+ 标头、导入和导出:

reverify parse-pe sample.exe --json

反汇编原始字节

disasm 命令可以解码十六进制机器码。以下示例分析一段简短的 x86-64 序列:

reverify disasm 90505831C0C3 --arch x86_64

反汇编可用于检查提议的指令序列是否与字节匹配。Reverify 还可以反汇编二进制文件节中的代码,从而将声明与文件内容关联起来,而不是依赖模型单独生成的解释。

使用验证循环

Reverify 声明是关于二进制文件的结构化假设。verify 命令会评估声明,并返回其状态以及工具包观测到的证据。

验证指令序列

以下声明检查偏移量 4096 处的字节是否可解码为以 pushmovsub 开头的函数序言:

reverify verify sample.bin --claim '{
  "kind": "instructions",
  "offset": 4096,
  "mnemonics": ["push", "mov", "sub"],
  "note": "function prologue"
}'

Reverify 不会只是复述提议的解释。它会读取并反汇编相关字节,然后报告请求的助记符序列是否得到支持。

验证模拟结果

您还可以通过在模拟器中执行机器码并检查最终寄存器状态来测试行为声明:

reverify verify - --claim '{
  "kind": "emulate_result",
  "code": "b805000000b90300000001c8c3",
  "arch": "x86",
  "expect_registers": {"eax": 8}
}'

此操作会验证所提供的例程最终是否使 eax 等于 8。相比直接接受模型对指令表面计算行为的描述,这种检查更加可靠。

可用的声明类型

Reverify 支持以下声明类型:

  • bytes_at 检查指定位置的字节。
  • pattern_present 检查是否存在某个字节模式。
  • string_present 检查二进制文件中是否存在某个字符串。
  • instructions 检查提议的指令序列。
  • emulate_result 检查模拟执行后的预期寄存器结果。
  • protobuf_field 检查 Protobuf 字段声明。
  • pe_import 检查 PE 导入声明。

批量验证与 CI 门禁

对于规模较大的调查,可将多个声明放入一个 JSON 文件并统一验证:

reverify verify sample.bin --claims-file claims.json

如果任何声明被驳回,CLI 将以非零状态码退出。这一行为使其适用于 CI 流水线和自动化智能体工作流:重建的结构或例程可以在发布或被后续步骤使用之前遭到拒绝。

一种实用的工作流程如下:

  1. 使用 autoparsestringsdisasm 收集初始证据。
  2. 让分析人员或模型提出范围明确的声明。
  3. 将相关声明存储在 JSON 文件中。
  4. 运行 verify,并检查每个 REFUTEDINCONCLUSIVE 结果。
  5. 修改重建结果并重复上述过程,直到获得观测证据支持的声明。

其他分析命令

Reverify 提供了多种有助于验证过程的专项命令:

  • 模式扫描:使用 pattern-scan 执行包含精确字节和 ?? 通配符的 AOB 搜索。
  • 字符串提取:使用 strings 定位 ASCII 和 UTF-16LE 字符串并保留其偏移量。
  • 微型模拟:使用 emulate 检查 CPU 寄存器和栈行为。
  • 线格式剖析:使用 decode-protobufdecode-tlv 分析无 schema 数据。
  • Frida 集成:使用 gen-hook 生成拦截器脚本。
  • 原始数据检查:使用 hexdump 获取二进制数据的对齐视图。
  • 变更分析:使用 diff-patch 分析二进制差异并生成补丁。
  • 边界审计:使用 audit-boundary 执行防御性文件系统和 SSRF 边界检查。

通过重建形成闭环

reconstruct 命令实现了 Reverify 的闭环方法:模型提出声明,确定性工具进行判断,整个过程通过迭代逐步得到有证据支撑的结果。这比要求模型给出完整结构或算法,并将其首次回答视为权威结论更可靠。

为了获得可靠结果,应使声明保持小范围且可测试。相比针对整个二进制文件进行宽泛叙述,有关精确字节、简短指令序列、导入函数或寄存器结果的声明更容易验证和修改。

将 Reverify 连接到 AI 智能体

使用以下命令从检出的仓库启动 MCP 服务器:

python reverify/mcp_server.py

随后,您可以配置 Claude Code 或 Cursor 等 MCP 兼容客户端来启动服务器。智能体可以直接调用 Reverify 的解析、反汇编、扫描和验证工具。

MCP 工具 re_verify_claim 向智能体提供相同的验证循环。智能体可以提交假设,接收 VERIFIEDREFUTEDINCONCLUSIVE 结果,并在报告结论前修改其分析。

高级技巧

  • 首先检查启用的后端:在分析前运行 reverify backends,确认 Capstone、Unicorn 和 LIEF 是否可用。
  • 优先使用 JSON 输出:当结果需要由脚本、智能体或 CI 系统解析时,请使用 --json
  • 将观察与解释分开:在编写更高层次的解释前,先记录偏移量、字节、解码后的指令和寄存器状态。
  • 如实对待不确定结果:INCONCLUSIVE 结果并不代表验证通过。应收集更多证据或缩小声明范围。
  • 批量处理相关断言:将结构和行为检查放入声明文件,以便在某个假设被驳回时停止自动重建。
  • 使用模拟验证行为声明:如果声明描述了某个例程的计算结果,应验证预期寄存器状态,而不能只依赖反汇编。
  • 使用纯 Python 回退方案提高可移植性:先从基础软件包开始,需要成熟的原生引擎时再安装 reverify[full]

总结

Reverify 要求重要声明必须通过针对二进制文件的确定性检查,从而使 AI 辅助逆向工程更具可信度。其 CLI 支持快速分类分析、解析、反汇编、模式扫描、模拟和批量验证,而 MCP 服务器则让 AI 智能体能够使用同样以证据为基础的工作流程。最终得到的是以实际观测字节为依据的分析,而不是看似自信的猜测。

Reverify 采用 MIT 许可证,可从 PyPI 获取。