一、认知篇:先建立坐标系

传统逆向的人肉流水线 vs Agent 逆向的一条命令接工具 图 1:左边是传统逆向的六步人肉流水线,右边是 Agent 逆向把这一步收进 MCP 接口后剩下的东西。

Q1:逆向工程到底是什么?它和”破解软件”是一回事吗?

一句话: 逆向工程是”没有源码,从编译好的程序里反推出实现逻辑”,正经用途是恶意软件分析、漏洞研究、协议理解、旧系统兼容、恢复遗失源码——和破解是两件事。

展开: 典型场景是刷 App 时看到一个功能做得不错,想搞明白它怎么实现的,但对方不会给你源码,只能从二进制里反推。难点从来不是”打开 IDA”这个动作,而是”先搜什么字符串、追哪个引用、什么时候该回汇编验证”——这套判断标准装在逆向工程师脑子里。

Q2:那 REA 是什么?

一句话: REA 全称 Reverse Engineer Anything,它不做反编译引擎,而是做一个 MCP 服务器,把 Hopper、Ghidra、IDA、JADX 这些已有工具包装成 Agent 能直接调用的接口。

展开: 它的定位很克制——站在 Ghidra/IDA 几十年沉淀的肩膀上,只解决”编排”这一件还没被解决好的事。Agent 问一句”这个搜索功能怎么实现的”,REA 去查目标、追代码,返回带证据的发现,Agent 再据此解释行为、写测试、重建实现。

Q3:为什么以前 AI 做不了逆向?卡在哪三个地方?

一句话: 工具不可调用、过程不可追溯、经验不可复用,三道坎叠在一起,让 AI 做逆向长期停在 demo 层面。

展开:

  • 工具不可调用:编程 Agent 擅长读代码写代码,但 Ghidra、Hopper 是 GUI 桌面软件,没有统一编程接口,Agent 要么调不动,要么得为每个工具写一套胶水代码。
  • 过程不可追溯:逆向的产出本该是一条证据链(函数在哪个地址、被谁调用、反编译出什么),但传统产出往往只有结论没有中间证据。Agent 直接给结论没人敢信,要给它证据就得先把”发现”结构化。
  • 经验不可复用:“先搜字符串、再追 XRef、可疑点回汇编验证”是一套方法论,写不进工具,也没法被另一个 Agent 复用。

Q4:这三道坎的根子在哪?【我的理解】

一句话: 逆向不是算力问题,是编排问题。

展开: 三道坎其实指向同一件事——逆向的本质是一套固定调查流程(search → XRef → call graph → decompile → 重建),不是一次性算力调用。所以破局点不在于”训一个更懂汇编的模型”,而在于”谁能把这套流程标准化、接口化”。谁做到了,Agent 就跑得起来。这个判断我觉得是整篇文章最值钱的一句。

Q5:为什么”一条命令接入”这件事值得单独讲?

一句话: 因为门槛的构成变了——过去门槛是”啃几个月 GUI 工具”,现在门槛是”npx rea-agents setup 然后重启”。

展开: 一条命令做了三件事:注册 MCP 服务器、安装工作流指令(skill)、备份现有配置。官方支持 Claude Code、Codex、Cursor、Gemini CLI、Grok Build 等。门槛从月降到分钟,这个降幅才是它出圈的直接原因。


二、架构篇:四层设计怎么拆

REA 逆向工程工具箱:Agent 层、MCP 接口、bridge 桥接层、引擎层、目标层 图 2:整套工具箱的五层协作——Agent 提问 → MCP 接口 → 桥接 → 引擎 → 目标。

Q6:REA 的整体结构是什么?

一句话: 五层协作:Agent 层(谁在提问)、MCP 统一工具接口、bridge 桥接层、引擎层、目标层,把散落的逆向工具收成一条可调用的标准链路。

展开: 技术栈是 TypeScript + Node.js,Turbo 管 monorepo,Vitest 做测试。真正值得说的是它的四层设计(桥接层、静/运行时分层、结果契约、安装注入),对应下面四个问题。

Q7:bridge 桥接层解决什么问题?

一句话: 让 Agent 只记一套调用语法——Hopper、Ghidra、IDA 各有各的 API 和启动方式,不可能要求 Agent 记三套。

桥接即扩展:一套接口,多引擎可插拔 图 3:上层接口不动,加引擎等于加桥接实现。

展开: bridge/ 目录把不同供应商的工具封装成一致的 MCP 工具接口,原生分析支持多 Provider 选择,用环境变量切换引擎、调整启动超时:

REA_HOPPER_STARTUP_TIMEOUT_MS=60000
REA_GHIDRA_STARTUP_TIMEOUT_MS=60000

可追问: 那加一个新引擎要改上层吗?不用——加一个引擎,加的是桥接实现,不是改上层接口。这就是”桥接即扩展”。

Q8:静态分析和运行时捕获怎么切?

一句话: 按”要不要运行目标”切两层——静态分析直接读文件,运行时捕获才与目标交互。

展开: JS、.NET、APK 解析属于静态,不运行目标;进程行为、Frida 验证属于运行时捕获。目标类型覆盖面很宽:

类别目标引擎
原生二进制ELF / PE / Mach-OGhidra / IDA / Hopper
托管代码JS / Electron / .NET内置静态解析
移动端APK / Flutter / AppleJADX + JDK / Apktool
运行环境SQLite / 进程行为 / 崩溃Node.js / PTY / pwntools
网络固件HAR / pcap / 固件 / 信号TShark / Binwalk / sigrok

从 EXE 到 APK 到固件:一个工具箱全覆盖 图 4:覆盖广度本身就是 MCP 标准化的价值。

【我的理解】这张图其实是回答”为什么要标准化”的最好论据:如果只有一个引擎、一种目标,套接口就是多余;正因为目标是五种、引擎是十种,接口的边际价值才成立。

Q9:什么叫”结果契约”?为什么 Agent 给的结论必须带证据?

一句话: 所有分析结果都附带证据和局限性说明——Agent 拿到的不是”这个函数是干这个的”,而是”这个函数在地址 X、被 Y 调用、反编译伪代码是 Z、结论的置信边界是 W”。

展开: 这直接对标工程里的”结论可追溯”。Agent 时代,一个不能复核的结论等于零价值,甚至负价值——它会让人误以为查过了。

Q10:npx rea-agents setup 到底装了什么?

一句话: 注册 MCP 服务器 + 注入工作流指令(skill)+ 备份现有配置,重启后 Agent 就有了”逆向调查能力”。

展开: 关键词是”注入工作流指令”——它教给 Agent 的不是工具用法,而是调查方法论。这也是它和”随便接几个 MCP 工具”的分界线。

Q11:它的几个关键取舍是什么?

决策取舍理由
不做引擎、只做桥接复用几十年沉淀的 Ghidra/IDA,专注解决”编排”这个真问题
MCP 而非自建协议借 MCP 生态,任何支持本地 MCP 的 Agent 都能用
结果带证据Agent 时代”结论可追溯”是硬门槛,不是可选项

【我的理解】三条里最能体现判断力的是第一条。“不做引擎”意味着放弃了技术叙事上的性感,换来了落地速度和生态兼容——对一个想做标准的项目来说,这是对的交换。


三、方法论篇:三个可以迁移的结论

Q12:桥接即扩展(Bridge as Extensibility)怎么讲?

一句话: 不重写引擎,只做统一桥接;加能力等于加桥接实现,上层接口不动。

展开: 这比”自研一套逆向引擎”聪明得多——后者要重做几十年的引擎积累,前者只补一块真正缺失的拼图。

Q13:证据即可信(Evidence as Trust)怎么讲?

一句话: 逆向的产出不是答案,是一条能回放的证据链;函数在哪、被谁调用、伪代码是什么、边界在哪,缺一样都不算可信。

Q14:提问即编排(Prompt as Orchestration)怎么讲?

一句话: 调查流程被固化进工作流指令,Agent 自主决定下一步搜什么、追哪个引用,工程师只负责提问和核实。

展开: 这是”人用工具”到”Agent 用工具”的切换点:人从执行者变成了提问者和验收者。

Q15:价值跃迁该怎么讲才不空?

价值跃迁:效率突破 → 能力下沉 → 模式升级 图 5:L1 是效率,L2 是能力,L3 是范式。

一句话: 分三层讲——L1 效率突破(接入成本一条命令、门槛从月到分钟)、L2 能力下沉(逆向从专业工种变成”会提问就能做”)、L3 模式升级(人用工具 → Agent 用工具,MCP 成为工具链标准接口)。

展开: 我认同这个框架的排序逻辑:效率是量变,能力下沉是质变的开始,范式升级才是趋势意义。同一套逻辑可以套到任何”专业工具 + 长流程”的场景上,这是这篇文里最可迁移的一段。


四、案例与边界篇

Q16:社区案例能说明什么?

一句话: 说明它真的能干活,而且使用者大量不是专业逆向工程师。

案例关键点
DX-Ball 声音算法从 x86 二进制抠出左右声道定位函数,C 重写后 3205 个原始测试用例全过,63 个编译字节与原版完全一致
Notion 剪贴板从 Electron 渲染进程 API 穿过 preload、IPC 追到主进程,扒出富文本剪贴板的完整数据格式和 payload
东方 TH04 弹幕从 PC-98 的 16 位汇编恢复两套弹幕角度计算逻辑,并与历史编译器输出交叉验证
Sony Sound Connect让 Codex 用 REA 分析官方 App,逆向出 Wind Noise Reduction 链路,做了个独立 App 一键开降噪
射击游戏 99% 函数十几个 Agent 并行,99% 函数还原为 C++,83% 编译后逐字节一致(用的是 Hex-Rays 官方 MCP,非 REA)

展开: 另有 YuriRDev 不到 12 小时逆向自有家居 IoT 软件、greco 逆向自家电视、BrOrlandi 逆向小米体脂秤并开源 dashboard。共同点:发布者都不是专业逆向工程师,而是”会提问的普通开发者”——这恰好印证了 L2 能力下沉。

Q17:REA 现在做不了什么?

一句话: 三类事别指望它——商业级加固(混淆、反调试、虚拟机壳)、内核级逻辑与驱动逆向、以及任何没有授权的目标。

展开: 加固和内核这两类是反编译引擎自身的边界,不运行目标的静态优先路线覆盖不全,不是”多写点桥接”能补的。

Q18:法律红线在哪?

一句话: REA 明确声明只用于合法研究、教育、互操作性、软件保存,分析你拥有或被授权检查的软件。

展开: 社区案例(逆向自家电视、自家体脂秤)都守着这条线。判断标准很简单——场景是”分析有权检查的目标、想搞清功能怎么实现”,合适;场景是”破商业加固、碰 DRM”,既做不了也不该做。

Q19:它和 Hex-Rays 官方 MCP 是什么关系?

一句话: 同类作品、不同路线:REA 是第三方桥接多个引擎,Hex-Rays 官方 MCP 绑定自家 IDA,但都属于这波”Agent 逆向”浪潮。

展开: 射击游戏那个 99% 还原的案例用的是 Hex-Rays 官方 MCP。这说明结论不是”某一家的工具赢了”,而是”逆向被 Agent 化”这件事本身成立。


五、追问篇:面试官会往下问什么

Q20:这不就是给 GUI 工具套了个 MCP 壳吗?有什么技术含量?

一句话: 接口语法只是最浅的一层,真正难的是多引擎语义对齐、证据结构统一、长流程状态管理。

展开: 把三个引擎的”搜索字符串”结果对齐成同一种结构,让”一条发现”在跨引擎、跨层(静态/运行时)时保持可引用、可回放,这是产品设计问题,不是协议适配问题。而且选 MCP 而非自建协议本身就是一次押注:放弃了协议控制权,换来”任何支持本地 MCP 的 Agent 都能用”。

【我的理解】三个我真正记住的点

  1. 价值往往长在接口不在引擎。 引擎能力(漏洞检测、协议解析)早就存在,缺的是让人和 Agent 都能稳定调用、并且能交接证据的那层皮。REA 吃的是这块。
  2. 证据契约是可迁移的模式。 “每条发现都带地址、调用方、复现方式、置信边界”——这套约束换个领域同样成立:测试用例生成、线上排障、数据审计、合规检查。可以把它当成 Agent 落进专业领域的通用范式。
  3. “会提问”不是零门槛,是新门槛。 门槛从”会用工具”降到”会提问”,但”会提问”要求你能判断证据链是否完整、结论边界是否被夸大。工种的经验壁垒被拆掉了,判断力这道壁垒反而更突出。

待核实 / 存疑点

  • 文中”一周内 Star 从 1.5 万冲到 23 万+“这个数字值得自己核一下。23 万 Star 会让它直接进入 GitHub 历史前列项目,一周内做到这个量级在 GitHub 上极为罕见,建议引用时自附来源或改为模糊表述。
  • 各社区案例的原始链接建议补齐,博客里引用二手转述容易被追问。
  • “官方支持 Claude Code / Codex / Cursor / Gemini CLI / Grok Build”这类清单会随版本变化,发布前建议对一遍官方仓库 README。

自测清单(只问不答,自己过一遍)

  1. 逆向工程和破解的区别?它的正经用途有哪些?
  2. REA 的定位是什么?为什么说它”克制”?
  3. AI 做逆向的三道坎分别是什么?
  4. 为什么说逆向的本质是编排问题?
  5. npx rea-agents setup 做了哪三件事?
  6. bridge 桥接层为什么必要?环境变量在这里起什么作用?
  7. 静态分析和运行时捕获的切分标准是什么?
  8. 什么是结果契约?为什么不能只给结论?
  9. “桥接即扩展""证据即可信""提问即编排”分别指什么?
  10. L1 / L2 / L3 三层价值跃迁分别是什么?
  11. REA 做不了哪三类事?为什么是引擎的边界而不是桥接的边界?
  12. 射击游戏 99% 还原案例用的为什么不是 REA?

收尾

逆向工程的门槛,从”会用工具”降到了”会提问”。这一降,降掉的不是门槛本身,而是一整个工种的经验壁垒——同时在判断力这一层立起了新的墙。这是我对 REA 这一波最朴素的判断。


配图与体例说明

  • 本文 5 张配图位于 ./images/ 目录,发布时请一并上传并保持相对路径。
  • 事实性内容取自 REA 公开介绍与社区案例;【我的理解】 段落为个人判断。
  • 表格中单元格做了适度压缩,细节以官方仓库为准。