一份务实而谨慎的指南

如何用 Claude Code 对应用做逆向工程

本文提到 Anthropic 的 Claude Code 和开源工具 REA,只是为了准确描述它们。Nightschool AI 是独立运营的网站,与 Anthropic 或 REA 的开发者没有任何关联,也未获得其认可。

对软件做逆向工程,就是在没有原始源代码的情况下研究它的运行方式,通常是为了理解它、让别的东西能跟它配合运行、让它继续可用,或者找出安全问题。

阅读完整回答

REA 是一个开源的 MCP 服务器和命令行工具,能让像 Claude Code 这样的智能体读取程序的结构,返回具体的证据,比如一个文件、一个函数、一次调用,而不是凭空猜测。只从官方仓库安装它,只用在你自己拥有或者获得授权检查的软件上,把构建会话和研究原始软件的会话分开,用这种方式构建出来的东西,发布之前先找律师谈一谈。

发布于

要点总结

  • 逆向工程是指研究已经成型的软件,搞清楚它是怎么运作的,通常手上没有源代码,原因可以是安全研究、互操作性、保存旧软件,或者只是想弄懂某个没有文档说明的东西。
  • REA 是一个开源的 MCP 服务器和命令行工具,发布在 github.com/morluto/rea,使用 MIT 协议,能让像 Claude Code 这样的智能体检查二进制文件和应用程序,返回具体证据:一个文件、一个函数、一次调用。
  • 在法律上,研究软件的运作方式和复制其受保护的代码或资产,是两件不同的事。第九巡回法院的两份判决,Sega v. Accolade 和 Sony v. Connectix,常被拿来引用这一点,但这两份判决都不是一体适用的通用规则。
  • REA 自己的免责声明明确排除了协助绕过 DRM、许可证验证或反作弊系统的用途,并说明其输出结果不授予对原始程序的任何权利。只能检查你自己拥有、自己写的,或者获得授权研究的软件。
  • 一套两次会话的「洁净室」工作流程:一次写规格说明的会话,和一次只读取这份规格说明、单独进行的构建会话,这样做能在日后支撑「洁净室」的说法。但这只是一种实践做法,不是法律保证,也不能替代律师的意见。
免费课时 · 无需注册账号认识 Claude为什么是 Claude?6分钟开始免费课时

复制即用

今天就能用的提示词

先用你熟悉的代码检查一下设置是否正常

REA 现在已经安装好,并且和你连接上了。打开我给你的路径下那个我自己写的小程序,针对每个文件,告诉我它有哪些函数,每个函数调用了什么,还有任何看起来像是处理程序外部输入的部分。只报告 REA 自己的输出实际显示的内容,如果有什么地方看起来不确定,也要说明。

先在自己的小程序上跑一遍,能让你在把 REA 用到更大的东西之前,确认设置是不是真的生效了。

第一次会话:只写规格说明

用 REA 研究这个应用程序,然后用通俗的语言写一份规格说明,说明它做了什么:它的接口、读写的数据格式,以及每个主要函数的行为,全部用你自己的话来写。不要把原始代码、伪代码或二进制输出直接引用或粘贴到规格说明里。规格说明写完就停下来,还不要开始构建任何东西。

这是下面两次会话工作流程的前半部分。关闭会话之前,先把输出保存成一个普通文件。

第二次会话:从头到尾不接触原始内容的构建会话

这是另一次逆向工程会话中写出来的规格说明文档。请构建一个全新的、独立的实现,满足这份规格说明里的所有要求。你没有看过原始应用程序、它的二进制文件或源代码,也不要要求查看。如果规格说明里有任何地方含糊不清,告诉我,不要自己猜测原始程序是怎么做的。

用一个全新的会话开始这一步,只附上规格说明文件,不要附上第一次会话的记录。

继续之前,先做一次法律方面的直觉检查

我打算用 REA 对一个软件做逆向工程。开始之前,列出你需要了解哪些信息,才能判断我是否真的有权这么做:这个软件归谁所有,许可证或服务条款里是不是已经对此有过规定,以及这里面有没有涉及 DRM、许可证验证或反作弊软件。如果哪个地方听起来需要真正的律师来判断,而不是靠你猜测,请标出来。

把这个回答当成一份需要去核实的问题清单,而不是法律上的放行通知。

正式开始会话之前,先读一遍 REA 自己的免责声明

打开 REA 自己仓库里的 DISCLAIMER.md,用通俗的语言总结一下,这个项目说自己不会协助哪些类型的逆向工程,以及它对使用其输出结果能获得的权利是怎么说的。我想确认一下,自己接下来要你做的事,是不是已经被这个工具自己的规则排除在外了。

每次更新之后都值得再做一遍,免责声明可能会随着软件一起变化。

完整指南

点按任意部分即可展开。

关于本指南

这周有一篇文章在网上流传,说的是一个叫 REA 的工具,它能让 AI 智能体研究自己没写过的软件,文章还特别提到 Anthropic 的 Claude Code 是它能连接的智能体之一。这篇指南同时写给两类读者:单纯好奇逆向工程是什么、为什么有人要做这件事的人,以及想在自己真正拥有的东西上,安全地用 Claude Code 试试 REA 的开发者。内容会讲清楚逆向工程是什么意思,REA 是什么、能读取哪些内容,研究软件和复制软件之间真正的法律边界,在安装任何权限这么大的工具之前值得过一遍的安全检查清单,安装步骤以及 REA 自己的 README 目前要求的 Node.js 版本,一套两次会话的「洁净室」工作流程,以及这整套方法的真实局限。以上都不构成法律建议,流程再严谨,也不代表你不用再自己核对输出结果。

一个历史悠久的领域

逆向工程到底是什么意思

逆向工程是指研究一个已经成型的软件,搞清楚它是怎么运作的,通常手上既没有原始源代码,也没有任何当初的设计文档。你观察它做了什么、是怎么拼起来的、和什么东西在通信,然后从这些线索反推出一套关于它行为的模型。

人们做这件事的理由大多不算光鲜,但大多是正当的。安全研究人员对程序做逆向工程,是为了在心怀不轨的人之前先找出漏洞。开发者对文件格式和网络协议做逆向工程,是为了让新程序能和一个没人会给写文档的旧程序互相配合。档案保护者和爱好者对老软件做逆向工程,是为了在原始硬件和背后的公司都已经不在了之后,让它继续能跑起来。有时候原因很简单:你依赖的某个程序做了某件没有文档说明的事,你得先搞清楚它做了什么,才能信任它,或者绕开它。

这些都不是新鲜事。安全研究人员和软件档案保护者几十年来一直在用反汇编器和调试器做这件事,远早于任何 AI 智能体的出现。真正变了的是速度:智能体能在几秒钟内读完一份反汇编清单或一个反编译出来的方法并总结出来,这种工作以前要花一个熟练的人好几个小时。这是一种真实的能力提升,也正因为如此,本指南后面讲到的法律和道德边界才变得比以前更重要,而不是更不重要,因为以前那个把好奇心和复制行为隔开的瓶颈,现在基本上已经消失了。

这篇指南接下来的内容会很具体:会讲一个叫 REA 的工具,它能把像 Claude Code 这样的智能体和这种分析连接起来,还会讲在你把它用到任何东西上之前,值得先养成的一些习惯。

一个新来者

REA 是什么,能读取哪些内容

REA 对自己的描述是:一种能从应用行为一直逆向到原生二进制层面的软件逆向工程方式。它实际能看到什么,取决于目标的类型。

一个 MCP 服务器和一个命令行工具

REA 是开源软件,发布在 github.com/morluto/rea,REA 自身的代码采用 MIT 协议。它既能作为一个模型上下文协议(Model Context Protocol)服务器运行,供像 Claude Code 这样的智能体调用,也能作为一个普通命令,让你自己在终端里运行。

原生二进制文件

根据 REA 自己的 README,它能从编译好的二进制文件中提取出伪代码、汇编代码、字符串、符号、调用关系和引用关系,背后借助的是 Hopper、Ghidra、IDA 或 Kuna 这类分析后端。

JavaScript 和 Electron 应用程序

针对 JavaScript 和 Electron 类型的目标,REA 的 README 里描述它能读取模块、导入内容、源码映射(source map)、路由、IPC 通道,以及程序和它加载的任何原生插件之间的关系。

.NET 程序集和 Android APK

对 .NET 程序集,能读取元数据和 CIL 指令。对 Android APK,能读取清单文件(manifest)声明、类、反编译出来的方法,以及它们之间的引用关系,这同样是根据该项目自己的 README。

不止是应用程序

同一份 README 还列出了网站、数据包抓取文件、固件镜像、SQLite 数据库、Go 和 Rust 编译出的二进制文件,以及模型文件,这些也都是 REA 的分析工具可以指向的目标。

证据,而不是猜测

根据 README 的说法,设计初衷是让每一项发现都能指回某个具体的东西,比如一个文件、一个函数、一次调用,这样你可以自己去核对,而不是直接相信智能体给出的总结。

安装任何东西之前先读这一段

法律边界:研究软件和复制软件

这里最重要的区别,是研究某个东西怎么运作,和复制它受保护的表达方式之间的区别。为了了解一个接口、一种文件格式或一段行为而做逆向工程,在法律上和把别人的代码或资产直接搬进自己的产品里,是两种不同的行为。

围绕这个区别建立起来的做法叫「洁净室设计」。一个人或一次会话研究原始内容,用自己的话写出一份通俗的规格说明:它的接口、数据格式、行为方式,文档里不复制任何原始代码。另一个人或另一次会话,从未见过原始内容,只根据这份规格说明构建出新的实现。关键在于,最终的结果能够证明自己来自一份书面描述,而不是来自原始作品本身。

在这一点上,常被引用的是两份较早的美国法院判决,值得了解一下,不过它们都不是可以用来逆向工程任何东西的通用许可。Sega Enterprises Ltd. v. Accolade, Inc. 一案,由第九巡回法院在 1992 年判决,涉及一家公司对一款游戏主机的锁定系统做逆向工程,好让自己的游戏能在那台主机上运行。法院认定,这次逆向工程过程中涉及的中间复制行为,目的是为了获取游戏能在这台硬件上运行所必需的、不受保护的功能性元素,在该案的具体事实下属于合理使用。Sony Computer Entertainment, Inc. v. Connectix Corp. 一案,由同一家法院在 2000 年判决,得出了类似的结论:一家公司对一款主机的启动软件做逆向工程,为另一种电脑构建模拟器,过程中的复制行为同样被认定为合理使用,因为它服务于一个独立编写、能够互操作的产品。

把这两个案例当成历史背景来看,而不是针对你自己情况的建议。它们是两份针对特定事实的上诉判决,合理使用是逐案判断的,其他国家划这条线的方式也不一样,而后来那些针对规避复制保护的法律,对于和 DRM 绑定的软件,大大收紧了这条线。任何打算在这类工作基础上继续开发的人,尤其是打算发布或出售的东西,在依赖这些判决之前,都应该先找真正的律师谈一谈。

REA 划了自己的一条线,不依赖于法院最终会怎么判决某个具体案例。根据该项目的 DISCLAIMER.md,REA 不支持也不会协助绕过 DRM、许可证验证、反作弊系统或其他技术保护措施,也不会协助复制专有软件或其受保护的代码和资产,而且项目明确说明,分析输出结果不授予对原始程序的任何权利。由此得出的实用规则是:只分析你自己拥有、自己写的,或者另外获得授权检查的软件。

安装任何东西之前

安全地安装,而不只是快速地安装

一个能读取二进制文件、运行分析后端的工具,值得你用同样的谨慎态度对待,就像对待任何一个对你系统有这么大触及范围的软件一样。

只从官方来源安装

这个项目的地址是 github.com/morluto/rea,发布到 npm 上的包名是 rea-agents。自己手动输入这个名字,不要点视频简介、论坛帖子或聊天消息里的链接。

小心仿冒品

一个这么快受到关注的项目,很容易招来模仿者。如果有个仓库或包的名字跟 REA 很接近,又托管在别的地方,这应该是停下来检查一遍的理由,绝不是一条捷径。

在虚拟机里运行不熟悉的二进制文件

如果你要把分析后端指向一个你没写过、也不完全信任的二进制文件,这项工作应该在虚拟机或其他可随时丢弃的环境里进行,而不是在你日常用来做其他所有事情的电脑上。

固定一个版本

安装一个具体的版本,而不是永远拉取最新版,升级到新版本之前先看看改了什么。截至本文写作时,npm 注册表上 rea-agents 最新发布的版本是 6.8.0。

认真读一遍免责声明

DISCLAIMER.md 篇幅不长。在第一次正式使用它之前,完整读一遍,而不是等事情已经出了岔子之后才去读。

让它跑起来

把 REA 安装进 Claude Code

这里 Node.js 的版本很重要。REA 自己的 README 对这一要求的说法是:Node.js 22.x(≥22.23.4)、24.x(≥24.22.1),或 26.12.1 及以上版本,外加 npm。安装之前先对照当前线上的 README 核实一遍,因为这类要求会随着版本发布而变化。

设置命令是 npx rea-agents setup。根据 README 的说明,它会带你一步步选择要把 REA 注册到哪些智能体上,在你批准之前先展示它打算做的改动,并保留你原有配置的备份。设置完之后要重启你的智能体,这样才能加载新的 MCP 服务器;REA 自己的说明里明确写了这一点。

如果想要一个持久的命令行安装,而不是一次性的 npx 运行,README 里描述的方法是先运行 npm install --global rea-agents,再用 rea --help 查看有哪些可用功能。从全局安装之后,rea update 会让你按自己的节奏升级到新版本,而不是自动升级,之后再运行一次 npx rea-agents@latest setup,就能把智能体的注册信息更新到匹配的状态。

在把 REA 用到任何你不完全拥有的东西之前,先在一个你自己写的小应用上试一下。设置好 REA 之后,让 Claude Code 打开那个小应用,逐个函数描述它看到了什么,然后对照你自己已经知道的内容来检查。这一次练习能确认设置是不是真的生效了,也能让你在真正依赖它去处理重要的事之前,先体会一下 REA 给出的证据(一个文件、一个函数、一次调用)在实际使用中读起来是什么样子。

一种更安全的工作方式

一套两次会话的「洁净室」工作流程

把前面讲到的「洁净室」思路,用两次独立的 Claude Code 会话落实成具体的做法。第一次是写规格说明的会话:把 REA 指向你获得授权研究的软件,让智能体用自己的话写出一份通俗的规格说明,内容包括它的接口、数据格式和主要函数的行为,文档里不逐字复制任何原始代码或伪代码。

第二次是构建会话,重新开始,不带第一次会话的任何记忆。只给它那份规格说明文件,别的什么都不给:不给原始二进制文件,不给第一次会话的记录,不给 REA 的原始输出。让它构建一个全新的、独立的实现,满足这份规格说明,并且在规格说明里有含糊不清的地方时告诉你,而不是悄悄猜测原始程序当初是怎么做的。

真正重要的一点,是让这两次会话真的是独立的两次,而不是一段长对话里的两个阶段。如果一次会话既研究了原始内容,又写出了替代方案,那它恰恰模糊了「洁净室设计」原本要保持清晰的那条边界,因为事后没有办法证明后半段没有依赖前半段。

要清楚地知道这样做能换来什么。一套严格执行的两次会话工作流程,是一种做法,能在日后有人问起某个东西是怎么构建出来的时候,支撑起「洁净室」的说法。但它本身不是法律保证,也不能替代在发布或出售任何东西之前,找真正的律师看一看。

设定合理的预期

这套工作流程的真实局限

REA 和本指南里讲的流程能降低风险,但都不能消除风险。一旦你打开了什么,就要记住这些局限。

在大型应用程序上可能会漏掉东西

一个大型应用程序的覆盖面,往往超过一次分析能跑到的范围。把一次干净的运行结果当成现有内容的一个样本,而不是证明没有漏掉任何东西。

把输出当作线索,而不是结论

指向一个文件、一个函数或一次调用的证据,是一个值得去查看的地方,本身并不是定论。任何你打算真正依赖的内容,都要自己去读实际的输出,核实一遍。

它会消耗大量上下文

详细的二进制和字节码分析,很快就会产生大量文本。只要超出一个小应用的范围,就要预料到会话的上下文很快被填满,规划两次会话的工作流程时也要考虑到这一点。

软件和法律都在不断变化

REA 的命令、它对 Node.js 的版本要求,以及它能读取的内容,都会随着版本更新而变化,围绕逆向工程的法律局面也在变化。在依赖今天读到的任何内容之前,两边都要重新核实一遍。

多一双眼睛仍然有用

只要超出个人实验的范围,一个既懂代码又懂法律边界的人工审查者,比再写一条更仔细的提示词更有价值。

在真正动手之前,先练习范围明确、可核查的提示方式

在把任何逆向工程工具用到你不完全拥有的东西上之前,最好已经养成一个习惯:给智能体一个范围明确的任务,然后自己核对它的输出是否符合实际情况。Nightschool AI 的免费第一课,就讲的是用 Anthropic 的 Claude Code 做这种细致提示的方法。

常见问题

逆向工程到底是什么意思?

它是指研究一个已经成型的软件,搞清楚它是怎么运作的,通常手上没有原始源代码或设计文档。人们这么做是为了安全研究,为了让某个东西能和自己不掌控的软件互相配合,为了让老软件继续可用,或者只是想弄懂一个没有文档说明的程序在做什么。

逆向工程合法吗?

这在很大程度上取决于你研究的是什么、怎么研究、你在哪里,以及你拿学到的东西做了什么。研究某个东西怎么运作,和复制它受保护的代码或资产,在法律上是两件不同的事。本指南不构成法律建议,在把它用到真正重要的事情上之前,先找真正的律师谈一谈。

这篇指南讲的 REA,是什么工具?

REA 是一个开源的 MCP 服务器和命令行工具,发布在 github.com/morluto/rea,使用 MIT 协议,能让像 Anthropic 的 Claude Code 这样的智能体检查二进制文件、应用程序和其他软件,返回具体证据,比如一个文件、一个函数或一次调用,而不是一句口头猜测。

REA 需要什么版本的 Node.js?

根据 REA 自己的 README,截至本文写作时,它需要 Node.js 22.x(≥22.23.4)、24.x(≥24.22.1),或 26.12.1 及以上版本,外加 npm。安装之前先核对当前线上的 README,因为这类版本要求会随着版本发布而变化。

怎么把 REA 安装进 Claude Code?

运行 npx rea-agents setup,选择要把它注册到哪些智能体上,在批准之前先看一遍它打算做的改动,之后重启你的智能体。如果想要一个持久的命令行工具,可以运行 npm install --global rea-agents,再用 rea --help 查看用法,之后用 rea update 来有意识地切换版本。

什么是「洁净室」工作流程,为什么要用两次会话?

写规格说明的会话研究原始软件,用通俗的语言写出它行为的说明,不复制任何原始代码。另一个独立的构建会话,不带第一次会话的记忆,也接触不到原始内容,只根据这份规格说明来构建新代码。让这两次会话真正分开,能在日后支撑「洁净室」的说法;混在一起的一次会话做不到这一点。

REA 不会协助做什么?

根据它自己的 DISCLAIMER.md,REA 不支持也不会协助绕过 DRM、许可证验证或反作弊系统,也不会协助复制专有软件或其受保护的资产。它还说明,自己的输出结果不授予对原始程序的任何权利,而且只应该用在你自己拥有、自己写的,或者获得授权检查的软件上。

REA 真实的局限是什么?

它在大型应用程序上可能会漏掉一些东西,所以一次干净的运行结果只是一个样本,不是保证。它的输出是值得核查的线索,不是定论。详细的分析还会产生大量文本,所以只要超出一个小应用的范围,就可能很快耗尽一次会话的上下文。

这篇指南和 Anthropic 或 REA 的开发者有关联吗?

没有。这是 Nightschool AI 独立制作的教学指南。文中提到 Anthropic 的 Claude Code 和开源项目 REA,只是为了描述它们实际的运作方式,双方之间没有任何关联、合作关系,也没有获得 Anthropic 或 REA 开发者的任何认可。

在真正逆向工程任何东西之前,先练好这些习惯

一个范围明确的任务,一份你真的能核查的规格说明,以及对自己第一个答案保持合理的怀疑,这些比任何单一工具都更重要。

Nightschool AI 是一个独立的学习平台,与 Anthropic 没有任何隶属、认可或赞助关系。Claude 是 Anthropic, PBC 的商标。 在寻找 Anthropic 官方的 Claude Academy?请访问 academy.claude.com。