一个逆向工程 MCP,六个半月涨了四十一万九千颗星 怎么可以错过逆向工程实例
前阵子想让 AI 帮我复刻一个功能——某个笔记 App 里那种复制粘贴不丢格式的剪贴板。我把需求说得很细,它写...
前阵子想让 AI 帮我复刻一个功能——某个笔记 App 里那种复制粘贴不丢格式的剪贴板。
我把需求说得很细,它写得很认真,代码跑不起来。换了个问法再要一版,还是跑不起来。来回三次,每次它都能给出一套看着挺像的新方案,每次都不对。
最后我问了它一句:你知道那个 App 到底是怎么实现的吗?
它说:据我了解,通常是通过剪贴板写入富文本格式……
「通常」。
那一刻我才明白,我一直在跟一个从没见过那个 App 的 AI,讨论那个 App 该怎么做。
这两年我们习惯了把 AI 当手用:帮我们写、帮我们画、帮我们算、帮我们把想法变成能跑的东西。
手很好用。但所有手的动作,前提都是眼睛先看见了目标。
你让一个师傅打个柜子,他会先去看你家墙角那道梁。你让一个 AI 复刻一个功能,它没有墙角可看,它只有训练数据里的记忆。
训练数据里没有你电脑上装的那款,没有那个 2019 年就停止更新的安装包,也没有某家公司内部那套只有二十个人知道的实现。
所以它给你的,永远是「这类功能一般怎么做」,而不是「人家到底怎么做的」。
这两个东西的差别,就是「看着像」和「跑得起来」的差别。
人类程序员遇到这个问题的解法很朴素:扒。翻源码、看博客、按 F12 一条一条看网络请求、把安装包解开看看里面有什么。笨,但有效,因为那是「看见」。
AI 一直没有这个能力。它能读你给它的文件,但你不能把一个 App 递给它。
直到有人把这件事做成了基础设施。
GitHub 上有个项目叫 REA,全称 Reverse Engineer Anything——逆向一切。
它不是一个 App,也不是一个网站。它是一个 MCP server,简单说,就是给 AI agent 外挂的一套工具。你装好之后,还是照常跟 Claude Code、Cursor、Codex 这些工具说话,只是它现在能「看」了。
装它只要一行:npx rea-agents setup。选一下你在用哪个 agent,确认要改的配置,重启。就这样。
图1 这是它真正在跑的样子。
它能看的东西,多到有点离谱。
原生二进制就不说了,那是本行。此外还有:Android 安装包、.NET 程序集、Electron 应用、WASM 文件、Go 编译出来的二进制(能读出编译器版本和依赖模块)、Rust 二进制(能读出内嵌的 crate 名和版本)、固件镜像、SQLite 数据库、Unity 的 IL2CPP 元数据、Godot 的打包文件、以太坊字节码、CUDA 核函数、GGUF 模型文件、iOS 崩溃日志、Windows 的签名证书、抓包文件、内核模块……
甚至还有逻辑分析仪录下来的信号,和跑起来的进程行为。
README 里列了三十多类目标。我第一次翻这张表的时候,感觉不像在看一个工具的功能列表,更像在看一个人的好奇心清单。
图2 四步闭环。(来源:项目官方 README)
真正让这东西立得住的,是「证据」这两个字。
它每给一条结论,都会附上支撑这条结论的代码片段、地址、引用,以及这条结论的局限在哪儿。你追问下去,它能带你回到那一行指令。
这句话听着平淡,但你想想我们用 AI 最常遇到的场面:它说得头头是道,你一句「你确定吗」,它立刻改口。
一个会在结论后面标注「这里我没把握」的工具,和一个永远自信的工具,你信哪个?
光说能力没意思,看它拆出来的东西。
第一个,一款 1996 年的弹球游戏。
DX-Ball 里有个音效设计:球打到砖块上,声音会根据位置左右偏移。这个偏移怎么算的,没人写过文档。
REA 顺着音效调用往下追,追到一个把位置换算成声像的辅助函数,把指令一条条读出来,还原成一个公式:输入值乘 1.5625,减 500.0,再乘一个缩放系数,取整返回。
图3 左边是原始 exe,中间是 REA 扒出来的六步计算链,右边是它重写出来的 C 代码。(来源:项目官方 showcase)
63 个字节,一模一样。
这个数字的意义在于:它不是「大概理解了」,是「理解到能一字不差地重写」。
这两件事之间的距离,比大多数人想的远得多。
第二个,Notion 的剪贴板。
就是我开头想做的那个东西。REA 顺着渲染进程里的剪贴板接口往下走,穿过预加载脚本、穿过 IPC 通道、进到主进程,最后把那个富文本剪贴板的数据格式扒了出来。
渲染层 → 预加载层 → 通信层 → 主进程。一条线,四层,每层都能给你看代码。
我看到这个案例的时候愣了几秒。我折腾了三个来回没搞明白的东西,它的路径是这么清晰的一条。
第三个,一款 1994 年的 PC 游戏。
TH04,跑在 PC-98 机器上的弹幕射击游戏。REA 读的是 16 位时代的汇编指令,还原出弹幕环形排列的两套角度计算——一套固定角度,一套瞄准玩家。然后它把重写的 C++ 和一个九十年代的编译器编译出来的结果做了对比。
图4 从左到右分别是弹球游戏的声音偏移、Notion 的剪贴板桥接、老游戏的弹幕环。(来源:项目官方 README)
我盯着这三个案例想了很久。
这不是黑客工具的样子。黑客工具的目标是攻破,是拿到权限,是让系统做它不该做的事。
这个工具的目标是理解。它干的事更像考古——把一件没人留下图纸的东西挖出来,一点点清掉土,然后告诉你它当年是怎么造的。
· · ·
任何一个做逆向的工具,都要先回答一个问题:这东西会不会被拿去干坏事。
REA 的回答写在仓库最显眼的位置。它列了一份「不做」的清单:帮人绕开正版验证、做游戏外挂、破解别人的账号权限、抄别人的专有代码、规避 AI 模型厂商的使用政策、倒卖账号和 API。
这份清单本身挺有意思——它基本上是同行的业务范围。
更值得注意的是它的措辞。它没有说「本工具仅供学习」,那种话等于免责符,说了跟没说一样。它说的是:分析要在你拥有或获得授权的目标上进行,你对你指挥 AI 做的每一个动作负责;一个公开可得、你手里有这个文件、你能连上这个调试端口,这三件事本身都不构成你有权对它做任何操作。
这话说得挺硬,也挺清醒。
还有一个细节,我觉得才是它敢挂 41.9 万 star 的真正原因。
README 第二段是一段警告:只从三个官方渠道——这个仓库、、npm 包。然后它写了一句:「相似的仓库名、抄来的 README,都不能说明这个是官方的。」
一句话把话说透了:仿冒已经出现了。
一个逆向工具被人仿冒,逻辑上非常顺——它太适合被塞点东西进去了。项目方在第一天就把这个风险摆到台面上,而不是等出事了发公告。
我去翻了它的提交记录。
贡献者名单里有几个名字:Claude Opus 5.5、OpenAI Codex、factory-droid、Cursor Agent、Greptile。
都是 AI。
一个教 AI 怎么拆解别人的项目,自己是 AI 一起写出来的。
再看时间线。四月十四号,第一版提交,名字叫 betterBinaryMCP,做的事情很窄:给 Hopper 反汇编器套一个 MCP 外壳,三十九个工具。
六个半月后的今天,它变成了覆盖三十多类目标的全能选手,三十九个版本,PR 编号已经排到八千六百多,还有一千六百多个 Issues 开着没关。
从四月十四号到十一月二号,二百零二天,四十一万九千颗 star。平均下来,每天两千多颗。
这个速度不是人手敲出来的速度。它是一个已经把「看代码」这件事自动化了的团队,在用自动化生产自动化工具。
作者叫 morluto,2020 年注册的账号,两百六十个仓库。个人简介只有一句:member of technically staff。
就这样。
写到这里我得说点不好听的。
该紧张的是:把信息差当护城河的人。
你花了半年打磨出来的交互细节、那套只有你们团队知道的参数、那个「用户说不清但就是好用」的手感——过去这些东西能靠不开源、不写文档、不参加行业会议来保护。
现在保护期大概是:功能上线,到有人想拆它,中间隔着一个下午。
该高兴的是:所有在学的人。
以前你想搞懂一个效果是怎么做的,路径是这样的:先猜关键词,再搜到几篇互相抄的博客,然后扒一个 GitHub 上不知道对不对的实现,最后自己试。运气好三天,运气不好三周,还得接受「大概就是这么回事」。
现在是:问一句,它去拆,回来给你证据。
学徒和师傅之间那层「你得先看得见」的门槛,被抹平了一大半。
我的判断是:护城河的位置变了。它从「我知道怎么做」,移到「我知道该做什么」,再移到「我有别人拿不走的东西」——用户、数据、渠道、信任,还有那个最虚也最实的:判断力。
技术实现正在变成一种公共品。这不是坏事,但对靠技术实现吃饭的人是硬着陆。
还有个功能,我觉得才是这个项目真正的野心,只是它被藏在文档深处。
它能把一段录下来的网页会话,变成 AI 可以练手的环境。你操作一遍网页,它把请求和响应都记下来,然后拼成一个沙盒,让 AI 在里面反复练「建文件夹、改名、删除」这类任务,练完还能打分。
这叫强化学习环境构建。一个逆向工程工具,顺手把「给 AI 造训练场」这件事也做了。
它卖的不是拆解,是拆解之后的那块地。
那天晚上我把那个剪贴板功能从需求文档里删掉了。
不是因为做不到。是因为看完 Notion 那条四层路径之后,我突然不想抄了。
我想要的从来不是「跟那个 App 一样」,是「比它少点步骤」。这个差别,AI 判断不了,REA 也判断不了。
它能替我去看,替我把看不到的东西拆开摆平,替我把「人家怎么做的」变成一行一行有出处的证据。
但它不知道我到底想要什么。
这大概是接下来几年最有意思的分工:机器负责看见,人负责想明白。
只是有个问题我一直没想通——如果拆解的成本降到几乎为零,你手上还剩下什么,是别人拆不走的?
项目地址:https://github.com/morluto/rea
官方网站:https://rea.tools/
当前非电脑浏览器正常宽度,请使用移动设备访问本站!