ARTICLE · 1173406
REA九天15万星:没源码也能查崩溃,你的客户端先裸了
10 月 4 日晚上,这个仓库 1513 颗星。今早 154671 颗。中间隔了九天。
它叫 REA(Reverse Engineer Anything),现在是 GitHub 上星数涨得最快的项目之一。中文媒体的标题大致是:软件末日、闭源护城河崩塌。
这些我不想重复。对运维来说,这件事有两个更实际的后果:一是你手上多了一个过去没有的排查手段;二是你负责发布的东西里,有一部分过去靠“没人有空读”保护着,现在这层保护没了。
第二件比第一件重要得多。

REA 的位置:Agent 发问 → MCP 调度层 → Ghidra / IDA / JADX / 固件 / 浏览器等引擎 → 带着证据返回
一、先说清楚它到底是个什么
REA 不是反编译器,也不是模型。它是管道。
它是一个 MIT 协议的 MCP 服务加命令行工具,TypeScript 写的,仓库 4 月就建了,不是蹭热度的空壳。跑一条 npx rea-agents@latest setup,它会注册进 Claude Code、Codex、Cursor 等 17 种客户端,再塞一份 skill 文件教 Agent 怎么开展调查。
Agent 读不懂二进制,REA 给它眼睛。但眼睛背后全是老工具:Ghidra(2019 年开源)、IDA(上世纪 90 年代就在用)、JADX、Apktool、Binwalk、pwndbg 等——它做的是把这些各有 CLI 和会话状态的专业引擎,统一到一层调度里。
所以内行评价它有点刻薄:“氛围逆向”——但门槛被打包掉,本身就是价值。
官方演示里问它“Windows 计算器里 200 + 10% 为什么等于 220”,返回的是 0x5b、0x5c 两个分支常量,要靠对照微软公开源码里的 IDC_DIV(91)、IDC_MUL(92) 才得出“百分号取的是第一个数的百分比”。
关键不在答案,在于它把砖头连同结论一起给了你——指令、常量、调用者都在,你能自己核对。这是全文最值钱的部分。
二、运维能拿来干的三件事
官方目标表很宽,挑对运维最有用的几类:
| 生成变更报告 |
最后一行我最想推荐:重建别人的功能多数人用不上;但升级前看清两个版本差在哪,是每天都在做的事——以前只能读 changelog,现在可以自己出一份。
内部运维客户端如果是 Electron 写的,以前出问题只能看日志猜,现在能看进去了。上手只要一个要求:Node.js 版本。
# 硬要求:Node.js >= 22.19(24 线需 >= 24.11)npx rea-agents@latest setup# 或直接把这句丢给你的 Agent(官方 README 原话)Install REA and connect it to this coding agent usingnpx rea-agents@latest setup. Show me the setup plan forapproval, then verify the installation.# 提问就是一句大白话(官方示例)Use REA to inspect Windows Calculator. Why does 200 + 10% give 220?
三、最值得抄的不是逆向,是“证据契约”
REA 的 roadmap 里有一条准入规则,新工具必须 preserve observations and unknowns(保留观察到的和无法确定的)。
它返回的不只是伪代码,还有每条结论背后的指令、调用者、常量,以及它没能解析出来的部分。就像翻译把原始录音连着文稿一起递给你。
这条规矩跟逆不逆向无关,却最值钱。
我们自己让 AI 看日志、看 core dump、看配置文件,最大的坑不是它看不懂,是它看不懂也照样给你编一段。REA 把“必须声明不确定项”写成了工具契约,而不是提示词里一句软绵绵的要求。
这个可以直接抄。给你现有的运维 Agent 加一条硬规矩:
分析任何日志 / core dump / 配置文件时,输出必须分成三段:【已观察到】只写你在输入里真正看到的字段、数值、堆栈帧, 每条附出处(文件名:行号 或 日志时间戳)。【推断】 写你的判断,并说明依据。【未能确定】明确列出没能确认的部分,禁止用推测填充。# 任一段缺失即不合格;"未能确定"为空时须写明"已覆盖全部输入"。
区别在哪?提示词里的要求是建议,模型可以“贴心”地省略;写成输出结构里的必填分段,缺一段就是格式错误,程序能拦下。能自动校验的规矩才叫规矩。
四、防守:有一半暴露面是建立在“看不懂”上的
这条是我自己的判断:很多内部系统的安全性,其实是“没人有空读”凑出来的。客户端硬编码的内部 API 路径、Electron 的 asar 包(里面基本等于开源的 JS 源码)、忘了删的 source map、没剥的调试符号、固件默认口令——这些过去技术上可见、实际上没人看,现在门槛掉到一个提示词。
有个独立实测可以作证(10 月 12 日,开发者 Vito Ruocco):他写了个 20KB 程序,编译时把所有符号全剥掉,让 REA 加 Ghidra 从 exe 单独去拆——两个隐藏行为都被找出来,Agent 用 JavaScript 重写的版本在 811/811 个声像位置、1200/1200 次授权校验上与原程序完全一致。
剥离符号不再是有效保护。这句话做发布流程的人该记住。
所以建议今晚就往发布流程里补几条,都是能进 CI 的硬检查:
# 发布前新增 6 项,建议直接进 CI 门禁# 1. 确认发布产物已剥离调试符号file ./bin/app | grep -q "not stripped" && exit 1# 2. source map 不上生产:产物里命中 *.map 即失败find ./dist -name "*.map" | grep . && exit 1# 3. Electron/asar 包内不留内网域名与硬编码密钥npx asar list app.asar | grep -Ei "\.env|secret|key" && exit 1# 4. 客户端代码一律当公开代码审:无内部接口路径、无默认口令# 5. 固件:改默认口令与默认证书,扫描产物里的私钥匙# 6. 服务端留痕:客户端可见的接口必须有速率限制与异常告警
第 4 条最容易被跳过,也最重要:客户端里的每一行代码,从今天起按“它一定会被人读到”来写。这本是安全常识,区别在于它现在成了发布流程里必须有人签字的一栏,而不是评审 PPT 里的一句原则。
五、边界:别急着上生产
热度高不等于能进生产。几件事得先知道:
1. 它自己不拦你
官方 4.0.0 的 release note 写着,移除了工具层的权限配置、策略命令和审批字段——REA 不做任何拦截,闸门全在模型侧和法务侧。组织内部用它,技术刹车是没有的。
2. 版本节奏非常野
九天发了 11 个版本,其中 3 个是带破坏性变更的大版本。README 自己写着“REA 变化很快,请保持更新”——反过来读就是:别把它钉在生产流水线上。
3. 几个还没答案的问题
- fork 率 23%
(35593 / 154671)明显偏高。有人怀疑刷量,也有人说只是怕被下架先存一份——数据判不了,心里该有数。 - 模型拒答没解决。
同一套手法找漏洞同样成立,但官方 issue 里搜 refus 零结果,README 也没提。真正的闸门是模型的安全策略。 - 分析在本地,结果不在。
二进制不上传,但伪代码要发给模型——指向 NDA 材料前,先读一遍模型供应商的数据条款。 - 能力有天花板。
多 GB 的固件塞不进上下文;x64dbg 和 IDA Pro 不能无头驱动;弱模型会跑出看似合理但错的结论。
顺带辟个谣:中文圈传的“Adobe 全家桶被 REA 拆了”,目前没有证据。那是有人用 Rust 加模型写的七个 Adobe 风格应用,仓库里没有任何反编译二进制的动作。
写在最后
REA 改变的不是“软件有没有价值”,而是软件的价值靠什么支撑。克隆能拿走代码,拿不走知识——还原出代码和理解软件之间还隔着一层。护城河没消失,只是换了位置。
排查手段多一个,是好事;暴露面要重算一次,是代价。这两件事是同一枚硬币,别只接好处那面。
今日互动:你负责的系统里,有没有哪样东西是靠“没人看得懂”在当防护的?客户端硬编码的地址、忘了删的 source map、没剥的调试符号、固件默认口令——说出一样来就行。评论区聊聊,觉得有用点个赞、转给管发布流程的同事。















































































