导读这是一篇第一手实测:把逆向工程 MCP Server
REA(morluto/rea)接进 Windows + Claude Code,并装上 Ghidra 12.1.4 跑通原生 x86 反编译。适合想搞清楚"agent 化逆向工具到底能干什么、边界在哪"的工程师,也适合被"逆向/反编译"这些词吓到、却想真正看明白的后端与转型读者。
你将获得:① 逆向工程与原理解析的通俗版;② REA 能力边界卡(哪些能跑、哪些卡在工具链);③ 原生 PE 反编译的完整可复现过程;④ 日常值不值得用 + 进阶路线。
核心结论一句话:REA 是"工具编排层"——JS/Electron 开箱即用,原生代码的分析深度取决于你本机有没有 Ghidra/IDA;本文所有结论都有可复现命令与原始输出兜底。
逆向工程与 Agent 编排的碰撞
10 月 12 日 GitHub 突然冒出个热门项目morluto/REA(发布时社区口径单日涨星约 45K、冲上全站热榜)。它干的事很巧:把 Ghidra 这类反编译器(也支持 Hopper、IDA 等)封装成 MCP Server,相当于在逆向工具和编码 Agent 之间架了座桥。作为一个常年跟 Java 字节码打交道的后端,我第一反应是——这下能用自然语言指挥专业逆向工具了。
兴奋归兴奋,实际在 Windows 上落地还是踩了坑。下面是我自己的实操记录,重点说清这套架构到底能分析什么、卡在哪。
先说清楚:几个可能的疑问
Q:反编译都上 Ghidra 了,驾驶模型怎么还是 DeepSeek-V3,不换个新的?
先纠一个容易产生的误会:这次真正的硬结论——原生 x86 反编译出伪 C、JS 语义图——全是我在终端敲rea analyze/rea decompile/rea analyze-javascript-application直跑出来的,背后是 Ghidra 反编译器和 AST 分析器的确定性输出,中间不经过任何大模型。所以"能分析什么、卡在哪"这张能力矩阵,跟用哪个模型没有关系。DeepSeek-V3 只出现在"用自然语言指挥 REA 调工具"那一段(MCP 驱动),选它有三条很实在的理由:走硅基流动国内端点、关着代理也能直连;OpenAI 兼容、按量计费成本约等于零;而且这篇本来就在验证一件事——这套 AI 基础设施脱离境外模型和代理,能不能稳住。驾驶模型在这里只决定"调哪些工具、怎么解读结果",对结论是非承载的:换成当前旗舰,编排演示会更漂亮,但能力矩阵一个字都不会变。
Q:命令行直跑 和 MCP 驱动,区别到底在哪?
直跑是我在终端敲命令,REA 直接调度 Ghidra 出结果——可复现、命令能原样贴出来(见文末实证记录);MCP 驱动是把 REA 挂进 Claude Code,用自然语言让 agent 自己决定调哪些工具。前者证明"工具本身能干什么",后者证明"agent 能不能指挥明白"。本文的能力矩阵以前者为准,MCP 驱动只作为"接进编码 agent"的形态演示。
先用几分钟搞懂:逆向工程是什么、能干嘛、怎么用
怕有读者被"逆向工程"四个字劝退,先花几分钟把原理说白,后面看实测就不懵。
什么是逆向工程(RE)我们平时写代码是"正向":源码 → 编译 → 二进制/字节码。逆向是反着来——从一个已经编译好的成品(exe、so、dll、apk…)反推它的结构、逻辑和行为。对 Java 后端最好懂:.java经javac编译出的.class,里面本就是 JVM 字节码,javap能把它反汇编成一条条可读指令;逆向无非是把这套"读编译产物"的思路搬到原生二进制上——只不过那边的成品是 CPU 机器码,得靠 Ghidra/IDA 还原成汇编甚至伪 C。
为什么需要专门工具编译后的原生程序是机器码,人眼读不了。反汇编器(Ghidra / IDA / Hopper)把机器码还原成汇编;它们的反编译组件再进一步还原成伪 C,让你能读懂"这个函数在干嘛、调了哪些系统 API、碰了哪些文件/网络"。
它有什么用(都是正经场景):
- 安全审计:拿到一个陌生二进制,先静态摸清它是否联网、是否读敏感文件、导入表里有没有危险 API——不运行也能看出七八分。
- 供应链/第三方审计:闭源 SDK、小众工具,接入前想知道它背着你干什么。
- 遗留系统:没源码的老 exe/dll 要改或要迁移,先逆向把逻辑摸清。
- 漏洞研究与取证:安全从业者的日常,CTF、恶意样本分析都靠它。
怎么用(传统 vs REA)传统方式是人在 Ghidra/IDA 图形界面里手动点:加载、等分析、翻函数、看交叉引用——专业,但累。REA 把这些反编译器封装成 MCP Server,让编码 agent 用自然语言调度:你说"看看这个 exe 的入口在干什么",agent 去调对应工具、把结果整理回来。相当于给逆向工具配了一个"会用自然语言使唤它的助手"(REA 的整体拓扑见图 1)。
三个必须先建立的预期(不然后面会失望):
- 反编译 ≠ 拿到原始源码。出来的是"伪 C",变量名多是
FUN_1400011f0这种地址,能读懂逻辑,但不等于作者原代码。 - 静态分析不运行程序。它只"读"不"跑",所以是安全的只读分析,但也看不到运行时真实行为。
- 能分析多深,取决于本机装了什么工具——这是本文能力边界卡的主轴。
Windows 环境踩坑记
按官方文档npm install -g rea-agents@4.1.0很顺,131 个依赖十几秒就装好了,Node v24.19.0 也满足它的 engines 要求。但注册进 Claude Code 这步出了状况:
rea mcpadd--agentclaude-code# 报 MCP_ADD_FAILED / spawn npx ENOENT根因是rea mcp add内部走spawn('npx'),而 npx 在 Windows 上是.cmd包装,Node 不带 shell 派生就找不到它。绕过很简单——直接手写~/.claude.json顶层mcpServers:
{"mcpServers":{"rea":{"command":"rea","args":["--mcp"]}}}改完跑rea mcp doctor,看到healthy: true就说明接上了。我这边的实测数字是125 个工具 / 6 个预设 prompt全部就位,doctor 还会校验 server 身份与 catalog 摘要一致。
实战分析测试
为了验证链路,我自己写了个极简 JS 应用当靶标:故意埋了个假令牌sk-live-REA-DEMO-…,再塞进分支逻辑和异步资源操作。然后跑:
rea analyze-javascript-application"路径/到/靶标"生成的语义图(文件名形如jsrg_…)里有几个发现:
- 恢复了 CommonJS 的
module.exports绑定关系 - 把
setInterval定时器、fs.createReadStream这类资源操作归到了 resource-lifecycle / timer 族 - 对分支与异步逻辑做了重建
- 结果置信度标的是
derived(推导得出),不是direct(直接证据)
这说明对 JavaScript 的静态流分析已经相当成熟,而且不需要任何外部工具链,装上就能用。语义关系对照见图 3。
能力边界卡(本机实测校正)
下面这张卡是我按本机结果校正的,对应图2。打勾的是我自己跑通或确认能用的,标"未实证"的是本机缺工具链、这次没真跑过的:
| 文件类型 | 静态元信息 | 反编译/重建 | 依赖外部工具 | 本机已实证 |
|---|---|---|---|---|
| JS / Electron | 是 | 可(原生) | 否 | 是 |
| .NET 程序集 | 是 | 部分(元信息可,反编译需工具)¹ | 部分 | 部分(元信息) |
| APK | 是 | 需工具 | 是 | 否 |
| 固件 | 是 | 需工具 | 是(Ghidra) | 否 |
| PE / CLI | 是 | 可(Ghidra 实证) | 是(Ghidra) | 是(原生 x86-64)² |
| ELF / Mach-O | 是 | 需工具 | 是(工具链) | 否 |
¹ .NET 的托管静态分析(元数据/IL 结构)本机已实跑通过——用系统自带 csc 编个最小Hello.exe,rea inspect-managed-artifact直接吐出 CLI 头、metadata 流与表行计数,provider 是rea-dotnet-static,不依赖 Ghidra / dotnet 运行时。完整 C# 反编译仍依赖外部工具,故标"需工具"。
² PE / CLI 原生 x86-64 反编译已于 2026-10-17 实证:装好 Ghidra 12.1.4(经ghproxy.net镜像直连、免代理下载 569,649,598 字节),rea analyze+rea decompile对attrib.exe跑出伪 C(provider=Ghidra 12.1.4,confidence=observed)。靶标受 REA 限制仅取"approved 原生 x86-64 PE"(系统 attrib.exe,sha256 064181108c…),完整伪 C 与命令见《原生PE反编译-实证记录_2026-10-17》。
核心结论:REA 的价值在"工具编排层"——JS / Electron 这类不依赖外部工具的场景,开箱即用到完整语义流;一旦牵扯原生代码,分析深度完全取决于你本机有没有 Ghidra / IDA 和对应工具链。没有工具链,它就只能停在元信息层。
原生分析:托管层跑通,原生反编译也补齐了
补一句上一版没说的:PE / CLI 这条线我已经真跑过了。系统自带 .NET Framework 的csc.exe编个最小Hello.exe,扔给rea inspect-managed-artifact,直接拿到 CLI 头(runtime 2.5、il-only)、metadata 流(#Blob / #Strings / #US / #GUID / #~)和表行计数(TypeDef 2、MethodDef 2、AssemblyRef 1),provider 是rea-dotnet-static、confidence=observed——这套托管静态分析不依赖 Ghidra,也不需要 dotnet 运行时,开箱即用到完整元信息。REA 自身也在 limitations 里写明:本检查"不加载程序集、不通过 CLR 解析依赖、不反编译 C#、不执行目标代码",正好印证"完整 C# 反编译仍要外部工具"。所以图2 里 .NET 和 PE / CLI 的"静态元信息"我现在敢写"已实证"了。
真正的原生 x86 反编译(把机器码变回可读 C / 伪代码)这一层,现在也跑通了。REA 只提供 Ghidra 桥,Ghidra 本体要自己装(要求 Ghidra 12.1.4 + 64 位 JDK 21,JDK 本机是 21.0.11);之前的堵点是 GitHub 直连不通、那个 ~570MB 的包下不来——这次改用ghproxy.net镜像直连(代理全程关着),40MB 分块断点续传把ghidra_12.1.4_PUBLIC_20260921.zip(569,649,598 字节)拉全并校验(6,695 条目),解压后rea doctor --provider ghidra全绿(version 12.1.4 / headless / JDK 21 / x64)。值得一提的是,REA 在本机走的是GHIDRA_INSTALL_DIR指向本机 Ghidra、并调用其 headless 引擎的路径(装好、rea doctor --provider ghidra全绿即此链路通),差的本就是 Ghidra 本体这一步。
靶标用系统自带attrib.exe(44KB 原生 x86-64 PE,sha256 064181108c…):rea analyze认出 pe / x86_64、142 个过程、140 个字符串,upstream provider 明确是 Ghidra 12.1.4;rea decompile把入口entry和 CRT 启动函数还原成带_initterm/_amsg_exit/ GS cookie 锁的伪 C,confidence=observed。两点必须说清:伪 C 是Ghidra 反编译器产物,不是原始源码;且 REA 的 Windows Ghidra P0只收 approved 原生 x86-64 PE,DLL / 托管 / 恶意 / 敏感目标一律不接——所以这是“原生只读分析”,不是万能逆向。完整伪 C 与复现命令见《原生PE反编译-实证记录_2026-10-17》。
REA 在日常到底值不值得用
一句话:它是垂直场景的提效工具,不是通用开发工具。日常 CRUD、业务开发完全用不上;但只要你属于下面几类人,它就值得装。
值得用的场景:
- 安全/审计岗:快速静态体检一个陌生二进制——是否联网、碰不碰敏感文件/密钥、导入表危不危险。比手动开 GUI 快,而且能批量化。
- 供应链/第三方审计:团队要接入一个闭源小工具/SDK,你想在接入前确认它到底干什么。
- 遗留系统维护:对没源码的老 exe/dll,先逆向摸清逻辑,再决定改还是迁。
- 学习与研究:读优秀二进制的实现、CTF、漏洞复现;或接进 coding agent 做"自然语言驱动的批量静态筛查"。
- JS/Electron 这条线门槛最低:不装任何外部工具就能出语义图,想体验"agent 化逆向"从这条入手最省事。
不值得 / 要慎用的场景:
- 要动态调试、脱壳、改包:REA 偏静态编排,这次实测也只覆盖静态层。
- 想"一键还原源码":反编译是伪 C,别期待等于源码。
- 目标受限:Windows 上的 Ghidra 桥只收"approved 原生 x86-64 PE",DLL、托管程序、来源不明/恶意样本它不接(这是安全边界,见下节)。
- 非安全/逆向方向的日常开发:杀鸡用牛刀,还会被授权与合规问题缠住。
我的建议:如果你是后端/转型 AI 工程,不必为用而用;把它当作"agent 调度专业工具"的一个样板间来理解,价值在看懂这个模式,而不在天天使唤它。
从实测看 REA 的安全取向
我不展开攻击手法,只说实测里能确认、以及设计上该关注的点。
能确认的是:rea mcp doctor会校验 server 身份与 catalog 摘要一致(healthy 时二者对得上),这保证你接的不是被篡改过的工具链——对企业级 Agent 很关键。
设计上该关注的(官方定位,本号未逐一验证):MCP 走本地通信、不暴露 TCP;语义图对真实密钥做模式化脱敏、保留特征;工具调用有资源与审计边界。落到我们自己的 Agent,启示是——编排层必须比被编排的工具更安全,这也直接呼应《MCP实战手记(九):生产化 MCP Server 的 6 层安全防护》里的隔离与最小授权。
双刃剑得说一句:REA 是安全从业者的利器,同样可能被攻击者用来快速摸清一个二进制的薄弱点。所以本文只测工程可用性,所有操作请在授权与安全研究场景下做。
想进一步掌握 REA?按这条线深入
本文只做了"基本测试"(JS 语义图 + 原生 PE 反编译)。想真正拿它当生产力,按下面几条线由浅入深:
- 把确定性命令练熟:
rea analyze/decompile/function/search/xrefs/trace是骨架。挑小的、开源、有源码对照的程序练手——能拿原版源码验证"还原得准不准",这是最好的反馈。 - 补反编译原理与局限:理解编译器优化、内联、虚调用、跳转表会怎样影响还原质量,知道哪些地方伪 C 会"说谎"。
- 深入 Ghidra:REA 只是桥,真正的引擎是 Ghidra。学它的 headless 批处理 + 脚本(Java/Python),才能把"批量静态筛查"自动化。
- 扩展目标格式:ELF/Mach-O(需对应工具链)、APK(
inspect-android-method)、固件——每加一种格式就是一片新场景。 - 接进自己的 agent 工作流:把它挂进你的 coding agent,做"自然语言 → 批量静态审计"的闭环,这时才真正用到 MCP 驱动的形态。
- 守住安全与授权边界:只分析你有权分析的目标;理解它对密钥的模式化脱敏、只读不改写;把"编排层比工具更安全"当设计纪律(呼应篇09《生产化 MCP Server 的 6 层安全防护》)。
- 跟进上游:
rea-agents仍在快速迭代(我实测的是 4.1.0),provider 支持与 Windows 行为会变,以官方 changelog 为准。
最小上手路径:装 REA → 拿一个有源码的小程序 →rea analyze看总览 →rea search/rea decompile抠几个函数 → 对照源码验准度。跑通这一遍,你就超过"只会喊 AI 逆向"的大多数人了。
对 Agent 开发者的启示
REA 的火爆说明一件事:模型能力趋同之后,竞争落到了工具生态。MCP 协议就是这套生态的"操作系统"——谁能卡住 MCP 应用商店,谁就卡住生态位。
而站在我们做 Agent 产品的人角度,REA 给的第二个启示更实在:当你把一组强能力工具交给 Agent 调度时,编排层的安全水位必须高于被编排的工具。权限隔离、最小授权、fail-closed,这些不是加在工具上的,是加在编排层上的。
最后顺手验证了一件事:把代理关掉,硅基流动api.siliconflow.cn照样直连可达,实测驱动的模型(deepseek-ai/DeepSeek-V3)正常返回。AI 基础设施能不能脱离境外依赖稳定运行,本身就是个值得自己跑一遍的题。