ARTICLE · 1226940
REA:没有源码,AI 也能“抄”功能了
看上哪个软件的功能,就让 AI 给自己做一个。
把界面截图发给 AI,按钮放在哪儿、页面长什么样,都容易说明白。可点下去以后,软件怎么处理数据、又把请求发给谁,截图里是看不到的。要把功能也做出来,还得弄清这些细节。
软件如果不开源,AI 又该从哪儿下手?
REA 就是为这类需求准备的。它是一个采用 MIT 许可的开源项目,全称是 Reverse Engineer Anything,可以理解为“逆向一切”。它给 AI 编程助手接上分析工具,让 AI 能从现成软件里研究某个功能,再尝试做出自己的版本。

REA 的工作方式(官方示意图):编程助手通过 REA 调用分析工具,依据返回的证据继续追问、解释、实现和验证。
GitHub:https://github.com/morluto/rea
不给源码,AI 怎么查到实现?
拿笔记软件 Notion 的复制功能来说。想在自己的编辑器里实现类似效果,就得弄清楚:文字和 HTML 内容,是怎么一起写进系统剪贴板的。
REA 官网给出了一个 Notion Desktop 7.6.1 的分析案例。在这款桌面应用里,页面负责显示内容,主进程负责调用系统能力。页面上的复制请求,需要经过预加载脚本转发,再以消息的形式送到主进程。
这就有了查找方向。REA 先从应用包里的 JavaScript 脚本中找出代码位置,AI 再读页面方法和包装函数,找到名为 notion:clipboard:write 的消息通道。顺着同一个名字往主进程里找,最后找到了接收请求的代码:检查发送者,再调用剪贴板接口写入数据。
到了这里,AI 已经能指出哪些代码在传数据,哪些代码在检查请求、写入剪贴板。要重新实现这项功能,就有具体代码可看,也有处理流程可参考。
REA 做的,就是把这些分析工具接给 AI 编程助手。助手通过 MCP 接口调用工具,读完结果再决定下一步:参数没弄懂,就继续查是谁调用了这个函数;某个数值看不明白,就去读对应的常量。
当然,不同软件能读到的材料不一样。Notion 的应用包里有脚本,已编译的原生程序则可以借助 Ghidra 等工具得到伪代码。代码能提供线索,程序实际运行时是不是这样,还得验证。把查到的逻辑写成新代码,只是接下来的第一步。
照着重做,怎样确认“抄对了”?
打砖块游戏 DX-Ball 的重建项目,就做过这样的尝试。研究者要还原一段声音计算:砖块被击中的位置,怎样决定声音偏左还是偏右。
第一次反编译给出的伪代码并不完整,实际输入和主要运算都没显示出来。AI 继续通过 REA 读机器指令、查调用它的函数、找常量。项目用这些信息,把计算过程重新写成了 C 代码。
写完以后,项目先给原函数和新函数输入同样的数据,看返回值是否一致;再用固定版本的编译工具,把新代码编译成机器码,与原程序比较,同时核对地址变化和引用的常量。项目报告,这段函数在所检查的输入和编译条件下通过了比较。
《东方永夜抄》(TH08)的重建却出了一个意外:机器码比较已经通过,一处数值还是写错了。
这个项目沿用了社区此前手工重建的代码。一处自动收集道具的判断中,威力阈值本应是 128.0,却写成了 0.0。原来,比较器处理了地址变化,却没核对对应位置存的数值。最后,既要把阈值改回来,也得给检查器补上这项检查。
哪些功能,值得让 AI 重做?
如果要替换一个老工具,前面这套办法就能派上用场。原来的文件还得正常处理,某些计算结果也必须保持一致,有原程序可查、可比较,就能检查新实现有没有偏差。
如果只是想给自己的工具加个功能,把需求写清楚,让 AI 直接实现,也许就够了。要不要逆向,取决于你需不需要知道原软件的具体做法。
决定尝试以后,可以先挑一个范围明确的功能。以文件导出为例,先看输入什么、输出什么,再试旧文件、缺少字段、特殊字符和中途失败的情况。发现结果不一致,就把这组输入和错误结果交给 AI,让它继续查对应的处理逻辑。
还要看这项功能靠什么完成。如果主要逻辑在服务端,客户端里即使能查到请求和响应,也拿不到服务端的完整实现。要重做那一部分,还得另外开发。
给 AI 的要求,也可以更具体一点:
“先帮我弄清这个功能是怎么做的,再把它做进我的工具里,结果要能和原软件对得上。”















































































