ARTICLE · 1180688
没有源码,也能让 AI 帮你拆软件:介绍一个开源工具 REA
把截图交给 AI,它可以按你的描述尝试写一个。但截图里没有数据怎么流转、哪些模块在配合,更没有某个细节为什么这样处理。界面做得像,和弄清一个功能怎么工作,是两回事。
这次想介绍的开源工具叫 REA,全称 Reverse Engineer Anything。它把软件分析工具接给 AI 编程助手,让助手能够检查应用包、追踪相关代码,带着依据解释一个具体功能。即使没有完整源代码,也能从软件留下的线索开始调查。
我更想知道的是:AI 说这个功能这样实现,能不能把它找到的代码和依据一起给我?
这里说的“逆向”,就是从已经打包、编译好的软件,反过来研究它如何工作。

复制一下,背后会经过哪些代码?
在笔记软件里复制一段带格式的文字,看起来只是按了一次快捷键。如果你要给自己的应用做类似功能,问题就具体了:界面拿到的内容,怎样交给系统剪贴板?文字和格式分别以什么形式传过去?
REA 项目给了一个 Notion 桌面版的案例,追的就是这条链路。
Notion 桌面版使用 Electron,也就是用网页技术构建桌面应用。显示页面和处理系统操作的代码,可以在不同进程里运行。一次复制操作,需要把请求从界面这一侧送到能操作系统剪贴板的那一侧。
案例里,REA 先定位到页面可调用的接口,以及向主进程发请求的位置。沿着这些线索继续读代码,就能串出几步:
1. 页面调用复制接口,传入纯文本,以及保存格式的 HTML 内容。
2. 中间的预加载脚本通过进程间通信,把请求送给主进程。
3. 主进程找到对应处理函数,并检查请求来自哪个页面。
4. 检查通过后,调用 Electron 的剪贴板接口,写入数据。
两侧靠同一个通道名对上:notion:clipboard:write。顺着这个名字查,原本散落在不同文件里的代码,就有了连接点。

如果你要给自己的应用做类似功能,这些位置就是可供研究的线索:界面负责什么,主进程负责什么,参数怎样传过去,接收方又做了哪些检查。
你知道该读哪几个文件,也有线索继续往下查。
给 AI 接上一套软件分析工具
REA 接的是现成的分析工具。查函数、读汇编、检查文件引用、追模块之间的关系,这些操作可以交给 AI 编程助手来调用。
连接方式是 MCP,也就是让助手调用外部工具的接口。你提出问题,助手用 REA 查询;返回的线索不够,它可以换一个入口继续查。
结果里有一个重要部分,叫 Evidence,可以理解为“带出处的分析记录”:分析了哪个目标,判断来自哪个文件或地址,调用了什么工具,还有哪些地方没有查清楚。
这正好回答了前面的问题。AI 说“复制请求会送到主进程”,你可以要求它指出对应代码,而不必只接受一段听起来合理的解释。
碰到混淆代码、动态生成的名称或复杂调用,分析也可能只查清一部分。没有确定的地方要继续保留,不能把“没找到”当成“没有这个功能”。有出处的结果,仍然需要人和测试来核对。
理解之后,要为自己的项目写代码、跑测试,仍然由 AI 编程助手完成。REA 提供调查材料,不保证还原原作者的源码,也不包办整个开发过程。
我建议先问一个小问题,比如“这个导出按钮最终把文件写到哪里”,或者“复制时传了哪些数据”。查清这一段,再考虑自己的版本怎么做。
解释得通,还得看看结果对不对
另一个案例是老游戏 DX-Ball 的左右声像计算。你可以把它理解为:砖块在屏幕上的位置,怎样影响声音偏左还是偏右。
最初的反编译结果漏掉了参数和中间计算。继续看汇编、查哪个函数调用了它,再读取程序里的常量,才还原出这段计算对应的 C 代码。
项目公开记录给出了两种核对方式:
• 在指定输入范围内,重建函数与原始 x86 代码进行了 3,205 个行为比较用例,返回值一致。
• 使用指定的老版本编译器,并按记录处理重定位后,这个函数编译出的 63 个字节与原版匹配。

这里验证的是一个具体函数。整部游戏的运行、声音后端和其他功能,仍然是另外的工作。
光看生成的代码,很容易接受一个解释。把相同输入交给原函数和重建函数,再比较输出,才有机会发现哪些地方理解错了。
哪些场景用得上?
它的用法不止是“给自己的工具做一个类似功能”。有权维护的旧程序缺文档,想弄清数据怎么读写、导出文件怎么生成,也可以从这些具体问题开始调查。DX-Ball 则展示了另一类用途:理解和保存老游戏里的计算逻辑。
准备工作要看软件类型:
JavaScript / Electron 应用可以从应用目录或 ASAR 归档开始。ASAR 就是 Electron 常用的一种打包文件。静态分析会读取其中的文件和关系,不执行目标应用,也不需要另装 Ghidra 这类原生分析引擎。
原生程序的深度分析,需要接好 Hopper、Ghidra 或 IDA 这类反汇编、反编译工具。它们能提供汇编和伪代码;伪代码是整理出来的近似表达,不保证是开发者原来写的那份源码。不同引擎支持的格式、架构和系统也不完全相同。
网站可以检查浏览器里可见的页面、脚本和网络请求,但不能凭这些拿到服务器端的完整实现。
此外,REA 还可以检查 .NET 程序、安卓安装包(APK)、固件和浏览器保存的网络记录等。安卓代码分析要准备 JADX 和完整的 Java 开发环境(JDK),固件分析则要在 Linux 上准备 Binwalk、Unblob 等工具。先选目标,再按对应文档准备,不必一次装齐所有后端。
也有需要观察实际运行的情况。比如在支持的 Linux、macOS 环境里,REA 可以记录一个指定命令的终端输出和选定文件的变化,用来比较两次运行。它会执行目标,并非静态读取,也不是把目标关进了安全沙箱;执行范围和权限要单独确认。
如果目标本来就有完整源码,只是想了解项目结构,直接让 AI 读仓库往往更合适,不必为了用 REA 多绕一层。
接到你正在用的 AI 助手里
如果你已经在用 Claude Code、Codex、Cursor 等 AI 编程助手,可以通过 setup 接入 REA。项目也提供 Hermes 等客户端的集成。
先准备 Node.js 和 npm。项目列出的 Node.js 支持范围是:22.x 从 22.19 起、24.x 从 24.11 起,或者 26 及以后。
在终端运行:
npx rea-agents@latest setup
它会让你选择要配置的助手,展示准备修改的路径和内容。确认后,加入 MCP 服务和匹配的工作流说明,并备份已有配置。完成后,重启或重连选中的助手。
配套 Skill 会告诉助手怎样组织调查、选择工具和使用证据。setup 通常会一并安装;只装这份说明文件,还不能代替 MCP 服务和分析引擎。
涉及原生程序时,还需要按目标准备分析引擎。Windows 上部分原生分析仍属于实验性支持,其他系统也有自己的运行前提,可以先看 安装文档。仓库的开发分支可能比 npm 发布包更新,看到新功能时,也要确认它是否已经进入你安装的版本。
接好之后,可以从一个自己有权分析的小功能开始,把下面的路径和功能替换成实际目标:
目标是我自有或明确获授权分析的应用,路径为【应用目录或 ASAR 的绝对路径】。
请使用 REA,只做静态分析,调查【复制、导出或其他具体功能】。
从功能入口追到实际处理代码,列出关键文件和调用关系。
每项结论给出依据,区分已经发现的事实、推断和未确定的部分。
不要启动目标、执行提取的模块、修改目标或复制受保护的代码与素材。
如果缺工具、缺后端,或需要扩大到运行时分析,先说明,不擅自安装或执行。
最后整理一份行为说明和测试要点,供我自己的项目参考。
不想接入助手,也可以直接从命令行检查 JavaScript / Electron 应用:
npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/your-app --json
把 /absolute/path/to/your-app 换成有权分析的应用目录或 ASAR 文件路径。这条命令返回静态分析结果,不需要先配置 MCP。
REA 本身开源,但你选择的模型服务、AI 编程助手,以及某些商业分析后端,可能另外收费。
本地分析,不代表数据都留在本机
REA 在本地检查目标,结果随后会交给 AI 助手。如果助手用的是云端模型,代码片段、字符串或其他结果就可能进入模型上下文。拿公司的内部程序、客户资料或敏感日志来分析前,先确认这些数据能不能交给所用的模型服务。
授权也要另外确认。优先用自有或明确获授权的目标,遵守软件许可、合同和当地法律。REA 的开源许可不会把目标代码、素材和品牌的使用权一并交给你,更不是绕过付费或保护机制的理由。
如果你正在用 AI 做自己的工具,下次遇到一个想研究的功能,可以先把问题问具体:输入是什么,数据去了哪里,最后由哪段代码处理。
先弄清这一小段逻辑,再写自己的需求和测试。比起直接让 AI 照着界面写,你会更清楚哪些行为应该保留,哪些地方可以按自己的需要重新设计。
项目地址:https://github.com/morluto/rea
也想问问你:做自己的工具时,你最想研究哪一类软件功能?
如果这篇对你有帮助
到这里,如果觉得这篇文章还不错,欢迎点个关注,也可以顺手点个赞、来个三连。
后面我会继续把自己折腾 AI 工具和 Agent 的真实过程、踩过的坑、跑通的办法,慢慢分享出来。
感谢你看我的文章,下篇见咯!















































































