YouMind
登录

如何通过 8 个步骤将 Opus 5.5 打造为逆向工程利器(完整教程)

@hanakoxbt
英语2026年10月13日
194K
139
14
15
332

TL;DR

本指南详细介绍了使用 REA 工具和 Opus 5.5 进行软件逆向工程的 8 步工作流程。内容涵盖目标路由、安装、侦察、反编译、处理混淆、集群分析、净室重建以及验证。

2026 年 10 月 8 日,一个三个月前还无人知晓的仓库登上了 GitHub 趋势榜第一。

它叫 REA,全称 Reverse Engineer Anything(逆向工程一切),它给你的 Agent 装上了一个真正的反汇编器。

**收藏本文 —— 如果你想看详细版,完整的 20 节课程已经上线:**

reacourse.xyz

它会带你从一个空白终端走到能通过自身一致性测试的重构版本,每一步命令和提示词都写得清清楚楚。从这里开始。

那一周,各处的反应如出一辙。

Matthew Berman 用三个词概括了它,360 万人看到了这条内容。

https://x.com/MatthewBerman/status/2108245653843509415

REA 是一个开源的 MCP 服务器加 CLI,可以接入 Claude Code、Codex、Cursor 和 Gemini CLI。

MIT 许可证,由 morluto 开发,2026 年 7 月 12 日发布首个版本,三个月后 GitHub star 数突破 10 万。

所有操作都在本地运行,每一个结论都会被标记为观察、推断或未知项,并附上对应的地址或调用点。

这就是从封闭二进制文件到完全属于你的重构版本的完整路径,一共八步。

Hanako - inline image

步骤之前:人们已经用它做出了什么

工具本身不是重点,四周内落地的成果才是。

ArtCraft 把七款 Adobe 应用重构成了免费的开源替代品,接着又用 WordCraft、GridCraft 和 DeckCraft 向 Office 发起挑战。

现在一共有十二款应用,全部用 Rust 从零编写,原生支持三大平台,除了一款之外都能在浏览器标签页里通过 WebAssembly 运行。

在游戏领域,成果更加具体:

  • 《超级马力欧阳光》获得了原生 PC 移植版:耗时约 365 个 Agent 小时、消耗 173 亿 token,由 Claude 和 Codex 协同完成
  • 官方 REA 博客上用 Agent 重构的一款东方游戏:697 个函数,696 个完全匹配,约 12 天即可运行
  • Aegis 验证器(3,077 个类)被拆解并重构,133 个测试用例全部通过
  • DX-Ball 的声音平移函数用 C 语言重构,通过了 3,205 个原始 x86 测试用例,并复现了全部 63 个编译字节

注意这份清单里没有什么。

没人破解许可证校验,没人发布别人的源码。

每一项都是把行为还原出来、记录下来,再用新代码重新实现。

01. 动手之前先判断目标类型

它能火起来,不是因为某一种东西读得好,而是因为它几乎什么都能读,而且每个结论都会给出证据。

https://x.com/RoundtableSpace/status/2109165852578992582

这个列表也是你要做的第一个决定。浪费一整个下午最常见的方式,就是目标明明是个 JavaScript 就摆在眼前的 Electron 应用,你却去开反汇编器。

把 REA 指向 Electron,几秒钟就能拿到模块、导入和 IPC 边界,根本不需要任何引擎;而原生的 Mach-O 或 ELF 会打开 Hopper 数据库,那是更深也更慢的路径。

搞清楚自己面对的是哪一种能省下好几个小时,所以把它交给你的第一条提示词。

markdown
1我想了解 [APP] 中 [FEATURE] 的工作原理,它位于 [绝对路径]。
2 首先告诉我这是什么类型的目标(原生、Electron/JS、.NET、Go、APK、WASM),
3 然后选择合适的 REA 工具来打开它。先不要开始深度分析。
4 接着用一段话梳理一下:它用什么构建、体量多大、要找 [FEATURE] 应该先看哪里。
5 把观察、推断和未知项分开记录。
Hanako - inline image

几乎没人提到的一点:很多 Unity 游戏的逻辑是以 .NET 形式发布的,而 REA 无需额外引擎就能读取 .NET。

这就是为什么一款买来的 Steam 游戏能在半小时内从二进制变成可编辑的 C# 代码。

而且你机器上的每一款 Electron 应用现在就能读取,甚至不用启动它:

bash
1# JavaScript 所在位置
2macOS: /Applications/<App>.app/Contents/Resources/app.asar
3Windows: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar
4 npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json

02. 五分钟安装,再加一个引擎

让它真正起作用的不是巧妙的提示词,而是一个接入了 Agent 的真实反汇编引擎——某位开发者正是这么形容的。

https://x.com/techNmak/status/2108431092462338178

安装过程会把 MCP 服务器注册到你的 Agent,并装上对应的工作流技能。

写入任何内容前它都会展示所有变更,并对涉及的文件做备份。

node -v # Node 22.19+、24.11+ 或 26+。不支持 23 和 25 版本

bash
1npx rea-agents@latest setup # 注册 MCP 服务器,写入前会询问
2npm install --global rea-agents # 永久获得简短的 rea 命令
3rea --help
4# 重启 Agent,然后验证。doctor 只做检查,不会改动任何东西
5npx -y rea-agents@latest doctor --client claude_code --json

重启比听上去更重要:终端会话必须全新开启,桌面应用需要彻底退出,因为只关窗口是不够的。

然后只为你真正要读取的目标添加引擎:

在接触第一个真实目标之前,值得先写一份文件:claude-md 里的内部规则。

只分析你拥有的东西,把每个结论标记为观察、推断或未知项,注明背后的地址,没有通过测试的还原行为永远不能算完成。

bash
1# 原生程序和游戏:Ghidra 12.1.x 和 JDK 21 或更新版本
2 export GHIDRA_INSTALL_DIR=/absolute/path/to/ghidra_12.1.4_PUBLIC
3 export JAVA_HOME=/absolute/path/to/jdk-21
4 npx -y rea-agents@latest doctor --provider ghidra --json
5
6 # Android 应用:JDK 17+ 和 jadx-headless-mcp 0.7.1
7 export REA_JADX_MCP_JAR=/absolute/path/jadx-headless-mcp-0.7.1-all.jar
8 rea inspect-android-package /path/App.apk
9
10 # 智能合约字节码,目前仅支持 Linux x64
11 rea inspect-evm-interface ./runtime.hex hex --json

03. 侦察:地图在代码之前

先别急着打开任何一个函数。

一条命令就能告诉你这个二进制跑在什么架构上、里面有多少函数,以及埋藏的所有可读文本。

这些文本是你一整天能拿到的最快线索:端点、错误字符串和功能名称,在你读懂任何逻辑之前就已经描述了这款应用。

json
1rea.open_binary { path: "/Applications/Target.app/Contents/MacOS/Target" }
2rea.binary_overview {}
3 arch: arm64
4 functions: 1,284 identified
5 entry: _main @ 0x1000051c0
6
7rea.search { query: "http" }
8 0x10004a2c0 "https://api.target.app/v3/sync"
9 0x10004a300 "Authorization: Bearer "
10
11rea.xrefs { address: "0x100012ab0" }
12 147 references -> core config loader, called everywhere
Hanako - inline image

REA 会统计每个函数被调用的次数,这个数字就是交叉引用数。

被调用 147 次的函数是应用的骨架,只被调用两次的则是可以往后放的辅助函数。

按这个数字排序往下做,千万别按文件顺序来,因为按文件顺序正是人们在一个只有四个有趣函数的二进制文件里耗掉整个周末的原因。

04. 反编译一个函数,然后让 Opus 给里面的一切命名

反编译器把原始机器指令变回接近 C 语言的东西。

出来的结果很粗糙:var_28 之类的名字、到处是强制类型转换、分支纠缠不清。粗糙没关系,因为模型只需要能读懂就行。

bash
1# 按地址反编译单个函数,输出可保存复用的 JSON
2rea decompile /path/to/Target 0x100012ab0 --provider hopper --json > fn_config.json
3
4# 或者按名称查找并追踪它的引用
5rea function /path/to/Target parseConfig --provider hopper --json
6rea xrefs /path/to/Target 0x100012ab0 --provider hopper --json

然后把输出交给 Opus 5.5,让它完成反汇编器做不到的部分:

markdown
1这是一个有 147 处交叉引用的函数的反编译伪代码。
2
31. 根据使用方式为每个变量重命名,并用一句话说明其用途。
42. 列出它读写的数据结构,并指出遵循的模式。
53. 按照调用约定所暗示的语言,把它重写为干净地道的代码。
64. 标出缺失的错误处理、输入校验或安全检查。
7
8回答前以 xhigh 强度思考。不确定的地方都要标出来。
Hanako - inline image

Opus 5.5 提供五档思考强度:low、medium、high、xhigh 和 max。

Medium 用于检查和导航,high 用于标注普通函数,max 用于混淆代码和复杂的指针运算。

思考强度是这套流程里影响质量最大的旋钮,而大多数人一直用默认值,然后怪模型不行。

反编译告诉你代码做了什么,模型告诉你为什么这么做,以及重构时该用什么名字。

05. 混淆:拆掉值得拆的,其余做好预算

有些应用生来就是为了对抗你正在做的事:逻辑被打乱、字符串被加密、加入纯为浪费你注意力的假分支。

这是连最强模型也会吃力的地方,而且有实测数据支撑。

Elastic Security Labs 让 Claude Opus 在 20 项任务中对抗 Tigress 混淆器,得出了两个直接结论。

一次失败的尝试成本大约是成功时的两倍,因为模型在放弃前会不断硬推;多层混淆的成功率是零,所以死磕它是花钱最多却一无所获的方式。

Hanako - inline image

实用原则是按函数设预算,而不是按会话。

先清理废料,因为一个叫 Caveman 的免费工具能去掉约 75% 的反编译垃圾,之后模型才能把注意力花在真正的逻辑上。

markdown
1这个函数看起来被混淆了。以 max 强度处理。
2
31. 识别存在的混淆手法(控制流平坦化、不透明谓词、
4 死代码、字符串加密、函数拆分),并在文中逐一指出。
52. 解除它们:移除死分支、求值不透明谓词、还原分发逻辑、
6 若密钥可恢复则解密内联字符串。展示剩余内容。
73. 给出 1-10 的置信度评分。低于 6 分时,指出不确定的部分以及需要什么上下文
8 才能确认。不要默默猜测。

06. 集群:一个控制器,多个执行者

单个对话无法高质量地读完 500 个函数。

它会忘记四十个函数前看到的内容,给同一个结构体起三种名字,并开始悄悄自相矛盾。

解决办法不是更多上下文,而是分工:一个控制器负责派活,多个执行者各处理一个函数就停下。

Hanako - inline image
markdown
1你是一个逆向工程控制器。函数地图在 functions.json 中
2(address、name、size、xref_count)。
3
41. 按调用图邻近度对函数聚类;按交叉引用数对簇排序。
52. 把每个簇分派给一个执行者。不要自己分析任何函数。
63. 把已解析的结构体注入每条任务简报,保持命名一致。
74. 置信度低于 6 的用相邻已解析函数的上下文做第二轮处理。
85. 跟踪累计 token 消耗,每处理完一个簇就汇报一次。
9
10你是一个执行者。你会收到一个反编译后的函数和目前已解析的结构体。
11严格返回:address、purpose、confidence(1-10)、structs_used、structs_new、
12clean_source、flags。复用已有的结构体名称,绝不要为控制器已经给过你的结构体
13另起新名。只处理一个函数。完成后停止。

REA 还在 MCP 服务器里内置了引导式工作流,但大多数人从没打开过:

  • - investigate_feature —— 从发现功能一路追踪到具体函数
  • - compare_application_versions —— 对比两个版本,看实际改了什么
  • - verify_reconstruction —— 用保存的证据检验你的重构
  • - audit_residual_unknowns —— 列出仍未证实的部分

07. 净室:两个上下文之间的那堵墙才是产品

净室重构意味着你只复制应用的行为,绝不复制里面的代码。

做对了,发布的东西完全属于你;做错了,你就在自己的仓库里装了别人的版权。

这是一套有 40 年历史的方法,不是 2026 年的发明。

80 年代初,Compaq 用这种方式花了约 100 万美元重构了 IBM 的 BIOS,这也是其他品牌 PC 得以存在的唯一原因。

1992 年,Sega v. Accolade 案的法院裁定,当拆解代码是理解其工作原理的唯一途径时,可以构成合理使用;2000 年,Sony 在 Sony v. Connectix 案中以 0-3 败诉,因为最终的模拟器里没有一行 Sony 的代码。

另一侧的红线同样清晰:2011 年 George Hotz 与 Sony 和解,在 PS3 根密钥公开后同意停手。

Hanako - inline image

四条规则让你站在安全的一侧,ArtCraft 团队在每次构建时都会自动检查这四项:

  • - 只观察,不复制。黑盒运行目标程序,只截图它自己的窗口,绝不把它的代码粘贴进你的项目
  • - 要规范,不要源码。文件格式来自公开标准(OOXML 是 ECMA-376 / ISO 29500,加上公开的 RTF 和 ODF 规范),绝不来自阅读竞争对手的解析器
  • - 只用原创素材。每个图标、字体、模板和声音要么用代码绘制,要么是公有领域或开放许可,并在署名文件中占一行
  • - 两项工作分开。一个 Agent 还原行为并撰写规范,另一个完全不同的上下文只根据这份规范实现

最后一条是人们最爱跳过的,而它才是真正的边界。

你的调查 Agent 天生就被污染了,因为它读过反编译结果;而你的构建 Agent 绝不能如此。

markdown
1基于已完成的分析,为重新实现撰写一份净室规范。
2
3只描述行为:每个公开接口、数据模型、每个用户可见功能作为可测试需求、
4读写的文件格式、错误处理。
5
6不要包含地址、偏移量、反编译变量名、汇编,或任何从原版复制的内容。
7一个从未见过该二进制的开发者必须能仅凭这份文档实现兼容版本。
8
9章节:架构、数据模型、公开 API、文件格式、测试用例。

依据描述来开发不只是法律护盾。

它让你能为自己选用的语言做出正确决策,而不是继承别人二十年前的决定——这正是 WordCraft 在某些地方比 Word 更快的原因。

08. 验证一致性,然后通过 MCP 发布

你从来没有原始源码,所以无法逐行 diff。

你要比较的是行为:同样的输入喂给两个版本,得到同样的输出。

markdown
1构建一个行为测试框架,对比原始二进制和我的重构版本。
2
3生成 50 组输入:30 组正常、10 组边界(空值、最大长度、Unicode)、10 组错误
4(格式错误、损坏)。每组都跑两边,尽可能逐字节对比,否则做语义对比。
5报告匹配率、差异点及每项的严重程度(外观 / 行为 / 关键)。保存到 report.md。

“我觉得一致”不是证据,匹配率才是;而那份报告是你能放在发布帖最顶部的最有说服力的东西。

然后像 REA 和 Craft 系列应用那样,把重构版本作为 MCP 服务器发布,这样下一个人的 Agent 就能像你驱动 REA 一样驱动你的工具。

给每个函数起个清晰的名字、提供一行安装命令,每个动作都会变成命名命令,点击、快捷键和 Agent 都能以相同方式触发。

bash
1claude mcp add wordcraft -- wordcraft-cli mcp
2
3> Open report.docx, make every heading 14pt bold, export to PDF
4 ok select.all-headings -> 12 selected
5 ok format.font-size 14 . format.bold
6 ok export report.pdf (selectable text, bookmarks kept)

局限,以及五个会浪费你一整个周末的错误

REA 碰不到服务端,因为它读取的是你机器上的东西,而跑在公司服务器上的代码从未发到你手里。

反编译代码是重建产物,不是原始源码,这正是第 08 步存在的全部理由。

去符号的 C++ 二进制依然比 Unity .NET 游戏难得多,商业引擎仍然需要正规授权。

  • - JavaScript 就在眼前,却去开反汇编器看 Electron 应用
  • - 没看概览就把整个二进制倒出来,逻辑被淹没,账单也飙升
  • - 按文件顺序而不是按交叉引用数读函数
  • - 让模型把代码复制进你的重构版本,一次粘贴就毁了净室
  • - 没有一致性报告就发布

关于法律层面的实话——毕竟 X 上一半人花了一周时间大喊这是盗版:在自己电脑上读一款应用是学习,根据行为重构功能是这个行业从 80 年代以来的运作方式,而复制代码或破解付费功能才是会让你被告的部分。

研究原版,发布你自己的。

这八个步骤每一步都有对应的课程,详见

reacourse.xyz ,里面有精确的提示词、失败模式,以及这套方法失效的场景。

闭源曾经意味着你永远无从知晓。

现在它的意思是:把证据给我看。

大多数人会继续为一个下午就能看懂、一个周末就能重构的功能按月付费。

而少数学会阅读软件的人,想造什么就能造什么。

关注我并订阅我的 Telegram 频道:

https://t.me/+75nMf005jRpjMDU1

一键保存

使用 YouMind AI 深度阅读爆款文章

保存原文、追问细节、总结观点,并在一个 AI 工作空间里把爆款文章沉淀成可复用笔记。

了解 YouMind
写给创作者

把你的 Markdown 变成干净的 𝕏 文章

图片上传、表格、代码块,往 𝕏 上手动重排太痛苦。YouMind 把整篇 Markdown 一键转成干净、可直接发布的 𝕏 文章草稿。

试试 Markdown 转 𝕏

更多可拆解样本

近期爆款文章

探索更多爆款文章