夜雨聆风学习资料网

ARTICLE · 1183428

一条命令拆掉任何软件:REA 能做什么,以及它明文不让你做的六件事

一条命令拆掉任何软件:REA 能做什么,以及它明文不让你做的六件事

先记住一个词,clean-room,净室。

过去两周它开始频繁出现,位置很固定:一批新开源仓库的官方描述里。wordcraft 那一行写的是 clean-room reimplementation of Microsoft Word,gridcraft 写的是 clean-room spreadsheet,soundcraft 写的是 clean-room reimplementation of Avid Pro Tools。三个仓库,同一句开头。

它首先是一个法律词,然后才可能被当成营销词用。

同一个账号,13 天。storytold 名下现在有 61 个公开仓库,名字带 craft 的 24 个,13 个是应用。全部 Apache-2.0,全部纯 Rust,全部在 10 月 14 日当天还有提交,合起来拿到 146,280 个星标。母项目 artcraft 创建于 2022 年 3 月 31 日,比这批应用早 4 年半。

下面讲两件事。一个叫 REA 的工具,能对一个没有源码的软件做什么。以及它明文不让你做的六件事。

一个没有源码的 app 进去,四步出来

REA 的 README 里有一段话,把你要做的事说全了。原文是:Ask your agent to investigate it with REA. It can inspect the app without its source code, explain how the feature works, show the evidence, and build a version for your project.

四件事一件不缺:不用源码就能看,能解释这个功能怎么运转,能把证据摆出来,能照着做一个你自己的版本。

拆开看是四步。

第一步,把一个没有源码的东西交给它。可以是一个装好的应用目录,一个 ASAR 包,一个网页,一个 APK,一个二进制。对着这一层的命令至少有这些。analyze 给一个总览。analyze-javascript-application 静态还原一个本地 JavaScript 或 Electron 应用。analyze-web-bundle 抓一个页面的包再静态分析。inspect-web-page 被动查看一个页面。open-binary 配上 inspect-binary-layout,在不执行的情况下看一个二进制的文件与链接布局。

网页是另一条完整的路。inspect-web-page 被动查看一个页面,走的是 CDP。discover-webmcp-tools 被动发现页面自己声明的 WebMCP 工具。export-web-scripts 把留存的网站脚本导出到一个空目录,再交给静态分析。capture-browser-scenario 跑一个有界的 Playwright 场景并返回证据。capture-web-screenshot 在给定源范围内截一个可见视口。inspect-web-network-capture 读留存下来的 HAR、mitmproxy 或 Fiddler 抓包,端点、DNS、TLS SNI 都在里面。

命令行那边一条就够:

npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json

第二步,让它把里面读通。decompile 把一段程序读成代码。function 带证据分析一个完整函数。search 在分析过的字符串和过程名里搜。xrefs 列出指向某个地址的引用。trace-application-feature 追一个具体功能在证据里走过的路。它要找的是「搜索这个功能在哪、被谁调、沿着哪条路径走」。

第三步,让它把证据带回来。这是 REA 跟问答式工具最大的分别。它交回来的东西有身份,不是一句话:读 structuredContent.normalized_result 拿结果,读 structuredContent.evidence_id 拿这条证据的编号。这条编号能存、能导、能导入、能比:evidence-export 原子地导出,evidence-import 有界地导入,compare 比两份证据包,inspect-evidence-bundle 读一份包里的元数据。

文档里还给了一个具体的量。一个 334 MB 的 Obsidian 应用证据文件,投影出来的摘要视图大约 10 KB。

使唤它的一句话长这样,可以直接抄:

Understand how search works inthe Notes app, show me the evidence, and build a similar feature for my project.

把 Notes 换成你要看的那个应用,把 search 换成你要的那个功能。它接到的就是一条带验收标准的任务。看懂之后,它得把证据摆出来,再照做一个。命令行那边还有一条通用入口,rea analyze 加一个路径,对目录和 ASAR 文件会自动选这条静态还原的路。

第四步,照证据做一个你自己的。project-android-application-graph、project-apple-application-graph 这类命令把证据投射成应用图;import-reference-source 把一份源码树当历史依据导入;compare-source-to-bundle 把提交历史里的源码和应用证据对上。

它把你的问题从「这个功能怎么做的」换成「把证据拿回来,然后照做一个」。

净室是什么,一个仓库自己说清楚了

净室设计是一条存在了很久的法律技术。做法是把人分成两组。一组只准看目标软件的行为,把看到的东西写成一份规格,不准读一行代码。另一组从没见过原始代码,只照这份规格从零写。两组严格隔离,成品在法律上才算独立创作。

隔离之所以要紧,在于独立创作这四个字需要能证明。将来若有争议,对方要挑刺,挑的是写它的那拨人有没有见过原始代码,成品像不像反倒排在后面。见过了,净室就不成立。

wordcraft 描述里那三个词,做的就是这个声明。它没有说我抄了 Word,它说我隔着一间干净的屋子重做了 Word。

过去软件的保护,很多时候是一道价格门槛。

要把一个编译完成的程序拆回人能读的样子,先得看懂汇编,再靠人把一段段机器码和功能对上,这个过程以月计。买一套正版以天计。逆向的成本长期高于购买成本,于是大多数人选择不逆。门槛从来不在能力,在成本。

REA 创建于 2026 年 4 月 14 日,10 月才被大规模用起来,同样不是这几天才冒出来的新东西。它要做的事情只有一件:把上一步的报价打下来。

一台裸机上,第一关不是那条命令

REA 属 morluto/rea,跟上面那个 craft 系列并非同一个作者,网上常把两边混为一谈。它的做法是把 Ghidra、Hopper 这类逆向工具经 MCP 接给编码 agent,让 agent 去读二进制、顺着调用关系找函数,再把读到的结论用回你自己的项目。

安装是一条命令:

npx rea-agents setup

它支持 Claude Code、Codex、Cursor、Gemini CLI、Grok Build 等 agent。原生分析需要本机已经装着 Hopper、Ghidra 或 IDA 之一;纯静态的 JavaScript 与 Electron 分析不需要任何原生引擎。

仓库那边还有一串数字说明它不是业余作品。README 有 20 种语言,挂着 npm、skills.sh、Trendshift、Discord 四个徽章,官网分 Guides 和 Showcases 两栏。20 个 topic 里排在最前的是 agent-skills,往后是 claude-code、codex、mcp、ghidra、hopper、decompiler、binary-analysis。

我在一台裸的 Windows 上跑了一遍。

rea --help 打出来的第一行,版本号后面跟着一句话,Reverse engineer anything from your terminal or agent。命令列表解析出 155 条。npm 那边核到 39 个依赖,解包 24.4 MB,引擎要求 node 22.19 以上、24.11 以上或者 26 以上。

这 155 条按第一个词归类,最大的一族是 inspect,48 条;往后数着是 list 15 条、compare 9 条、trace 9 条、capture 6 条、observe 5 条。inspect 一族覆盖 Mach-O、PE/CLR、WASM、Dart AOT、keyed archive、plist、SQLite、pcap、固件区、EVM 接口、Go 二进制、Rust 依赖清单、安卓包与类、Electron 页与保险丝。另有 24 条命令名里带 adb,从 list-adb-devices 到 push-adb-file,是给插着线的安卓设备准备的。APK 还有专门的一条:decode-android-resources 用 apktool 解出清单、元数据和字符串资源,inspect-android-package 不执行地看 APK 的声明与解出的清单。

格式上也铺得很开。inspect-managed-artifact 读 PE/CLR 的身份,不加载目标代码。compare-wasm-interfaces 比两份 WASM 检查记录的核心接口。extract-firmware 抽出选中的固件字节,返回验证过的文件与出处。

真正说明问题的是 rea doctor。它的第一行是 healthy: false,第二行 environment_healthy: false。10 项检查只过 2 项,过的是 node 和 host。其余八项全挂:hopper、ghidra、ida-registration、jadx 四项报 missing_analysis_engine,skill 和三个客户端的注册报 config_drift。

同一个输出的 identity 块里躺着几个数:CLI 命令 153,MCP 工具 207,prompt 6,期望的 skill 版本号是 42,SDK 的 server、client_test、core 三件套都是 2.3.1,工具清单带 sha256 摘要。registrations 一栏还检出本机 4 个 agent 客户端,codex、grok_bot、hermes、workbuddy。其中 grok_bot 那条是 manual,官方说明写得很直:它的连接器存在登录账号里、跑在它自己的机器上,setup 不写那个账号 store,一个跑在本机的 stdio 服务挂不上去。

rea capabilities 把不能用的原因写得很直。Native macOS utilities require macOS. Hopper integration is not supported on win32. Apple asset catalogs require macOS assetutil. 还有一条卡在版本上,SQLite inspection requires Node.js 24.x >=24.15 or 26+,本机是 22.22.2,availability_code 直接给 unsupported_version。

一条命令拆掉任何软件,在裸机上的第一关摆在四个引擎和一个 node 版本上,命令排在后头。

它明文不让你做的六件事

一份工具肯把不许做的事列清楚,这件事本身就不常见。REA 的 DISCLAIMER.md 列了六项,放在项目根目录,装之前就能看到:

  • 绕过 DRM、许可校验、反作弊系统这类技术保护措施
  • 开发游戏外挂,或篡改在线服务
  • 在未授权的系统上绕过认证、机器人防护或访问控制
  • 复制专有软件,或复现它受保护的代码与资源
  • 规避 AI 模型提供商的使用策略或安全措施
  • 转售或共享 AI 账号与 API 额度

它还补了一句:软件公开可得、你持有这个文件、你能访问某个调试端点,这三件事单独哪一件都不等于你获得了授权。

它支持的用途也写了。安全研究、恶意软件与事件分析、漏洞研究与协同披露,以及 CTF 与教学、互操作、软件保存这些方向。另外还有一条,调试或审计你自己拥有且有权检查的软件。

后果也写了。拿上面这些用途来求助的,会在 issue 和讨论里被直接关闭,不加回复,情节严重的会被移出社区。

它把不许做的事列成六项,还写明一句:公开可得不等于获得授权。

13 个应用分四批上线

craft 那批应用,网上传的是 7 个。仓库里数一下是 13 个,分四批。

批次
仓库
星标
09-30 五个
photocraft
60,213
pdfcraft
13,450
filmcraft
13,063
lightcraft
12,403
vectorcraft
8,773
10-01 两个
effectcraft
6,453
designcraft
3,850
10-07 五个
wordcraft
12,066
gridcraft
4,733
soundcraft
2,727
cadcraft
4,647
deckcraft
3,154
10-09 一个
figcraft
748

合计 146,280。把启动器和基础设施也算进来,storytold 名下带 craft 的仓库合计 149,696 个星;母项目 artcraft 另有 27,433 个。

第二批那五个,恰好是法律上最敏感的几个,三个描述里都自己写着 clean-room。

Word、表格、Pro Tools,都是市面上有明确商业对手的品类。作者没有回避这一点,反而把净室两个字写在了最前面。这是那批仓库里最值得注意的分寸。

AI 绕过的是价格,不是规则

净室这个法子存在了很久,规则一直都在。变的是执行它的人员工价。一个 agent 读一遍二进制的成本,和雇一个逆向工程师读一遍的成本,不在一个量级上。

AI 没有绕过规则,它绕过的是价格。

价格一降,采用量就跟着变。REA 现在 233,358 个星,fork 58,217,名下的 open issues 挂着 703 个,fork 占星的 24.9%。常规仓库的 fork 率多在 5% 到 10%,这个比例说明收藏的人里有四分之一是真要跑起来,不是点个星就走。

我测完之后又复测了一次,13 分钟,星标从 233,117 变成 233,358,净增 241,折下来每小时一千出头。这个数字比任何形容都硬,你也可以自己复测。

干净的屋子,还干净吗

净室的前提是两组人彼此隔离。隔离靠的是成本,靠的是没人愿意为一次拆解专门养两组人。

现在一个 agent 可以同时是两组人。它读二进制的那一秒,和写代码的那一秒,中间没有门。

当 agent 能批量读二进制,隔着一间屋子这件事还剩多少意义。

规则没有失效,写 clean-room 也依然有法律意义。但规则的执行前提变了,而这个变化没人来得及回答。

值得一提的是,两边都在主动给自己划界。craft 系列选 Apache-2.0,把干净两个字写进描述;REA 把不许做的事列成六项,放在根目录。用规则约束自己的项目不是没有,但在一个全民拆解的氛围里,肯把边界写在最显眼处的很少。

第三方打包已经先来了。openhausfun/photocraft 10 月 6 日建仓,207 个星,许可字段是 Apache-2.0,描述里写着 Original MIT/Apache-2.0 licenses and attribution retained,这是一个保留许可与署名的独立快照,做法规范。

PhotocraftAdobe/PhotoCraft-Photoshop 是另一回事。它 10 月 10 日建仓,16 个星,许可字段是 MIT,主页直接指向一个 Windows 便携版 zip,描述里塞满了 photocraft 关键词,还写着 Official free download。一个 Apache-2.0 项目的衍生版被标成 MIT,许可对不上,账号名里又带着 Adobe。

REA 自己的 README 里就有一句警告:相似的仓库名称或复制的 README,不能证明下载内容来自官方。

文里的每个数字你都能够自己复算,一个都不难。打开 GitHub 搜 morluto/rea,看它现在多少星;再搜 storytold,数一遍带 craft 的仓库;或者直接跑一次 rea doctor,看第一行是 true 还是 false。

最后一个还在动。

相关学习资料