夜雨聆风学习资料网

ARTICLE · 1258641

AI 都开始逆向软件了,这个 REA 有点猛!

AI 都开始逆向软件了,这个 REA 有点猛!

AI代码蜂巢X

探索编程的无限可能

编辑:嘉禾


开源观察 · 功能逆向2026年10月

从成品里找回逻辑

从一个按钮,追到机器指令

Notion · DX-Ball · 调用链 · 二进制

REA · Reverse Engineer Anything

应用包代码还原

Notion 的桌面应用包,被拿来拆剪贴板了。

页面上点一下复制,请求去了哪里,经过哪层包装,哪个进程接手,最后怎么写进系统剪贴板,REA 官网把这条链路摆了出来。

看到这里,可以先停一下。

没有 Notion 的开发仓库,拿到的就是已经发布的应用包。顺着里面的代码,照样能追出一个功能是怎么工作的。Notion 官方案例

现在,Agent 也能拿起工具,参与这个过程。

你还在跟 AI 说,帮忙写个功能。

REA 想让你试试另一种问法,这个软件里的功能,帮忙拆明白。

这玩意的名字也很直白,Reverse Engineer Anything,逆向任何东西。

项目地址: https://github.com/morluto/rea

不过,先别急着把它想成输入软件名、回车、整套源码自动吐出来。真正有意思的部分,藏在它怎么一步步拆的过程里。

回到 Notion 这个例子。

普通用户复制一段文字,只关心粘贴出来对不对。做开发的人可能会多想一步,页面里的复制操作,是怎么碰到系统剪贴板的?

官方案例选的是 Notion Desktop 7.6.1。REA 的分析结果给出 preload 脚本里的位置,调查再顺着包装函数,接到主进程里的处理代码。

preload 可以理解成页面和桌面能力之间的一座桥。页面发起调用,通过 IPC,也就是进程间通信,把请求递给主进程。接收端检查来源,然后调用 Electron 的剪贴板接口。

一条通道,把两头接上了。

原来在界面上只需要一秒的动作,往里拆,有入口,有传参,有接收端,也有最后真正干活的代码。官网还给出了具体位置和便于阅读的代码片段。案例细节

你想想看,问题到了这里就变了。

我们已经可以拿着位置继续追问,为什么这么传,哪里做了检查,换成自己的项目应该怎么实现。

AI 参与逆向,最有吸引力的地方就在这儿。它能借助工具,把一个藏在成品里的功能,逐步拆成可以讨论的代码逻辑。

当然,很多朋友可能会纳闷,REA 自己就是个超强反编译器吗?

它做的是把逆向工具接给 Agent。

REA 通过 MCP 提供调用入口,Agent 根据你的问题去查,拿到结果,再决定下一步往哪里挖。对于 JavaScript 应用,文档提供了模块查看、功能追踪和版本比较等工作流,也会保留观察、推断和未知信息之间的区别。JavaScript 工作流

到了原生二进制这一层,则可以用上 Hopper、Ghidra、IDA 这些工具,读取伪代码、汇编、字符串、调用和引用。需要什么引擎,支持什么文件,还得看具体环境。原生分析文档

怎么说呢,相当于给 Agent 配了一张逆向工作台。

你提一个功能问题,它能拿起工具查。查到一半,反编译结果不完整,还得换个角度继续找。

后面这个老游戏案例,就把这种感觉展示出来了。

DX-Ball,打砖块游戏。研究者想搞清楚,砖块在屏幕上的横向位置,究竟怎么变成声音的左右声像。

这次拿在手里的,是可执行文件。

第一次反编译,给出来的伪代码信息很少,连输入和计算都没完整体现。光盯着这段结果,很难看明白。

怎么办?继续拆。

查看机器指令,追到调用它的地方,再读取计算用到的常量。输入、运算和参数逐渐补齐,最后写成一段 C 函数。

更硬的还在后面。

恢复出来的函数,与原始 x86 函数做了 3,205 组行为比较。再用固定编译器重放,匹配该函数的 63 字节。

机器指令里的逻辑,真的被一点点抠回了可维护的代码。DX-Ball 官方案例

不是哥们,AI 写代码已经很热闹了,现在连从编译结果往回拆,都有这样的案例了???

这块得把数字说完整。3,205 组比较和 63 字节匹配,对应的是这个声像函数。整款游戏的可玩版本还有后续工作,不能把一个函数的成果算到整个游戏头上。

但只看这个函数,也足够让人想继续往下挖。

从应用包里找调用,到二进制里还原计算,REA 给出的方向越来越具体。你可以让 Agent 围绕一个问题,查位置、补缺口,再去验证恢复出来的实现。

说真的,这比一句泛泛的「AI 可以逆向」有意思多了。

它让人想起拆收音机的那种好奇。外壳打开,里面的零件还在那里,怎么接起来,为什么能出声,得沿着线路慢慢找。

软件的线路藏在调用关系和机器指令里。现在,Agent 也多了一种顺着线路找下去的办法。

如果想上手,官方给出的接入入口是这条命令。

bash

npx rea-agents@latest setup

选客户端,检查配置变更,批准后写入,再重启对应客户端。Node.js 版本要求,以及原生分析引擎的配置,需要对照安装文档准备。安装文档

别被一条命令骗了,接入只是开头。

真正费脑子的部分,是你准备拆什么,以及怎么知道拆对了。

刚开始,可以选自己开发的、或者有权分析的小应用,只盯一个功能。导出按钮就挺合适,从入口追到文件写入,让 Agent 列出代码位置,把直接看到的内容和推断分开。

有位置,就能回去看。有输入输出,就能继续比较。问题够小,也更容易发现它在哪一步绕偏了。

坦率地讲,光看案例还判断不了你手里的目标会跑得怎样。本文整理的是公开文档和官方案例,没有在本机复现,也没有耗时或成功率实测。

而且,这玩意也会卡。

仓库的 Issue #7170 就有用户报告,分析较大的压缩 Electron 文件时,语义阶段多次超时。属于用户反馈,实际情况要看自己的文件,但至少别一上来就预期全自动、一路顺到底。相关反馈

名字里那个 Anything,也得放回具体目标里理解。

你手里有应用包,就分析里面留下了什么。手里有二进制,就结合工具检查它能暴露什么。只看客户端,拿不到远程服务器里没有交到你手上的私有源码。

拆到哪一步,取决于你有什么材料,以及能从材料里确认什么。

对做软件的人来说,看到这儿,有点兴奋,也可能有点别扭。

自己写了很久的功能,被人沿着安装包往里研究,当然会在意。尤其那些反复调过、踩了很多坑才磨出来的细节,谁都知道它们来得不容易。

但反过来看,那些缺文档的旧程序、只剩发布产物的项目,也可能因此多一个重新读懂它们的入口。

同一张工作台,摆上不同的软件,就是不同的问题。

REA 还远没到让所有软件变透明的程度。可它已经把一件事摆到开发者面前,发布出去的成品,可以被 Agent 拿来逐层研究。

开头那个复制按钮,看着只有一下。

现在,AI 能参与追问这一下背后发生了什么。

项目地址在这里,morluto/rea。

既然看到这里了,如果觉得有用,随手点个赞、在看、转发三连吧。

点赞
在看
转发

THANKS FOR READING

“关注公众号AI代码蜂巢x 获取更多信息”

相关学习资料