Claude Code 逆向 Skill:用 REA 给 Claude Code 和 Codex 装上逆向工作流
本页目录
什么都不装就让 Claude Code “逆向这个二进制”,它多半会退回到 strings、file 加猜测。要让 agent 做靠谱的逆向,需要两样东西:一是 agent 能调用的工具,二是告诉它什么时候、怎么调用这些工具的指令。REA 是 morluto 维护的开源项目,它在同一个 npm 包 rea-agents 里把这两样都带上了:MCP server 提供工具,内置的 skill reverse-engineer-anything 提供指令。
本文面向已经在用 Claude Code(或 Codex)、想搭一套可信逆向工作流的开发者。读完你会知道:
- REA 6.4.0 的
npx rea-agents setup为 Claude Code 具体写了什么、写在哪里; - skill 能做什么,以及同样重要的——它不做什么;
- 怎样只刷新 skill、只刷新 MCP 注册,或者两者一起刷新;
- 怎样写出结论可以核对的提示词;
- 怎样确认 agent 真的调用了 REA,而不是自己编。
如果还没装 REA,先看 REA MCP 安装指南。本文只深入 Claude Code 这一侧,通用安装步骤不再重复。
前置条件
- Node.js 22.19+、24.11+ 或 26+,以及 npm。6.4.0 包声明的是
"node": "^22.19.0 || ^24.11.0 || >=26.0.0"。 - Claude Code 已安装并至少运行过一次,确保它的配置目录存在。setup 是靠查找客户端的配置目录来检测客户端的。
- 一个你有权分析的目标。 示例用的是
xor_gate,也就是 CTF 实战文章 里自己编译的小 crackme。分析原生二进制还需要 Ghidra 这样的引擎,见 REA + Ghidra。
第 1 步:分清 setup 装的两样东西
setup 可以为 Claude Code 装两样东西,它们出问题的表现完全不同,所以一开始就要分清。
| 组成 | 是什么 | Claude Code 下的位置 | 缺了会怎样 |
|---|---|---|---|
| MCP 注册 | 一个名为 rea 的条目,告诉 Claude Code 怎么启动 REA MCP server |
~/.claude.json;设置了 CLAUDE_CONFIG_DIR 时为 $CLAUDE_CONFIG_DIR/.claude.json |
agent 完全没有 REA 工具 |
| Skill | SKILL.md 加 6 篇参考文档,内容是工作流指令 |
~/.claude/skills/reverse-engineer-anything/,或 $CLAUDE_CONFIG_DIR/skills/reverse-engineer-anything/ |
工具在,但用得不好:第一个工具选错、结果过大、不讲 Evidence |
skill 自己的原话是:“Installing this skill supplies instructions; it does not register the REA MCP server, install analysis engines, or add tools to an already-running agent.” 也就是说,如果你从别处装了 skill(比如 只装 skill 的方式),在 MCP 注册之前依然没有任何工具。
6.4.0 的 skill 包里正好是这些文件:
reverse-engineer-anything/
├── SKILL.md
└── references/
├── connection-and-recovery.md
├── native-and-artifacts.md
├── javascript-applications.md
├── android-applications.md
├── runtime-observation.md
└── evidence-workflows.md
SKILL.md 里写着 metadata.version: "37" 和 tool_count: 170。rea doctor 就是拿已安装的副本和这些值比对,来判断 skill 是否过期(见第 5 步)。
第 2 步:先预览计划,不写任何东西
针对 Claude Code 跑一次 dry run:
npx rea-agents@latest setup --client claude_code --dry-run
为什么先这样做:--dry-run 会解析出完整计划并打印出来,但不执行。6.4.0 里 dry run 总是输出结构化结果,状态为 planned。Claude Code 的计划最多包含两个动作:
configure_client:claude_code,目标是你的.claude.json。说明里写着 “Add the REA MCP registration for Claude Code; preserve unrelated configuration”,并列出将要注册的完整命令。如果文件已存在,计划会给出备份路径。install_skill:claude_code,标签是 “REA skill for Claude Code”,目标是~/.claude/skills/reverse-engineer-anything。只有当 7 个 skill 文件中有任何一个和内置版本不同时,才会出现这一项。
计划里没有某一项,说明那一项已经是最新的。这是正常结果,不是报错。
第 3 步:为 Claude Code 执行 setup
交互方式:运行 npx rea-agents setup,在 agent 列表里勾选 Claude Code。只要选了至少一个 agent,setup 就会自动把 skill 加进计划,然后请你确认整个计划。
需要脚本化、可重复执行时,显式批准同样的范围:
npx rea-agents@latest setup --client claude_code --yes
--yes 只批准你指定范围内的动作。和 --client 搭配,就不会碰到其他 agent。
根据 6.4.0 的源码,setup 会写入:
MCP 条目。 在 .claude.json 顶层的 mcpServers 对象下加一个 rea 键,其他 server 和设置保持不动。启动命令取决于你是怎么运行 setup 的:
-
通过
npx运行时,条目会锁定到执行 setup 的那个精确版本:{ "mcpServers": { "rea": { "command": "npx", "args": ["-y", "[email protected]", "mcp"] } } }在 Windows 上,同一条命令会包装成
cmd.exe /d /c npx -y [email protected] mcp。 -
通过全局安装的
rea运行时,条目指向该rea可执行文件的绝对路径,参数为mcp。
如果 setup 检测到 GHIDRA_INSTALL_DIR 这类 provider 设置,会把它们写进 env;条目里已有的 env 覆盖项会保留。
skill 文件。 setup 只写入上面 7 个文件里和内置版本不一致的那些。覆盖已有文件之前,会在旁边保存一份 .rea.backup 后缀的副本。写完后把写入的文件逐个读回、和内置内容比对;任何一步失败都会恢复原文件。
重启 Claude Code。 退出当前会话,重新开一个。已经在运行的会话不会加载新的 server 和 skill。
常用变体
只要 MCP 注册、不装 skill(比如你自己维护了一套指令):
npx rea-agents@latest setup --client claude_code --skill=false --dry-run
只刷新 skill、不碰 MCP 注册。如果你手动改过 .claude.json、不想让 setup 动它,这个很有用:
rea setup --skill-client claude_code --yes
--skill-client 可以重复,接受任何受支持的客户端 ID 或 shared。没有全局安装时,用 npx -y rea-agents@latest setup --skill-client claude_code --yes。
Codex、Gemini CLI 和 Qwen Code
把参数换成 --client codex、--client gemini_cli 或 --client qwen_code 即可,区别在 skill 的安装目录:
- Claude Code:
~/.claude/skills - Gemini CLI:它的 home(
$GEMINI_CLI_HOME或~)下的.agents/skills - Antigravity:
~/.gemini/config/skills - Codex、Qwen Code 和大多数其他客户端:共享目录
~/.agents/skills
混合选择(如 --client claude_code --client codex)时,每个不同的目录各装一份。Codex 的注册还会加上 startup_timeout_sec = 30。6.4.0 还新增了 Pi、Hermes 和 Qwen Code 的 setup 支持。
有些 MCP 客户端会限制每个工具输入 schema 的体积,6.4.0 changelog 里举的例子是 Kimi/Moonshot。遇到这种客户端,在 rea 条目的 env 里加上 REA_MCP_INPUT_SCHEMA_PROFILE=compact。compact 模式下对外公布的 schema 去掉了嵌套的注释文字,REA 内部仍按完整 schema 校验输入。Claude Code 不需要这个设置。
第 4 步:了解 skill 教了 agent 什么
把 SKILL.md 读一遍,你就知道该期待 agent 怎么做,也更容易发现它跑偏。主要规则如下:
- 只有问题依赖已发布的产物时才用 REA。 分析普通源码仓库时,skill 要求 agent 用常规的仓库工具,不要跑 REA 的就绪检查。
- 按需连接。 REA 工具已经在的话,直接去分析目标,不要每次都先跑 doctor 或 setup。
- 按目标类型选第一个工具。 ASAR 或解包后的 Electron 目录从
analyze_javascript_application开始;APK 从inspect_android_package开始;.NET 托管程序集从inspect_managed_artifact开始;原生可执行文件从open_binary开始,再用analyze_function等聚焦工具。 - 先看摘要。 大型 JavaScript 应用或 ELF 布局,先请求
"detail": "summary",再用inspect_analysis_view往下看;不要重复做一模一样的分析。 - 区分观察、推断和未知。 每条结论都要引用 Evidence ID;不能把静态分析说成观察到了运行行为。
- 打开的要关掉。 原生会话结束时调用
close_binary。
6 篇参考文档只在用得上时才读,平时 agent 的上下文因此保持精简。
第 5 步:验证安装
重启 Claude Code 后,在终端里同时检查两样东西:
rea doctor --client claude_code --skill --json
(没有全局安装时:npx -y rea-agents@latest doctor --client claude_code --skill --json。)
--client claude_code 把 Claude Code 的注册列为必查项;--skill 要求已安装的 skill 和内置的指令、参考文档一致。在 JSON 里看 identity.skill.state:aligned 表示已安装的 skill 和当前 REA 版本一致。不一致时,doctor 给出的修复建议是 “Run rea setup to update the installed REA skill.”
doctor 检查的是磁盘上的配置,它看不到正在运行的 Claude Code 会话是否连上了 server。这一点要在 Claude Code 里确认:
- 在 Claude Code 会话里执行
/mcp,确认rea在列表里且已连接; - 或者在 shell 里运行
claude mcp get rea,查看注册的命令。
doctor 显示注册正常但 /mcp 里没有工具:重启 Claude Code。还是没有,就去看 server 的启动报错,不要反复重跑 setup,skill 的恢复指南也是这么建议的。
第 6 步:写出结论可核对的提示词
工具路由已经交给 skill 了,提示词里不需要列工具。把字数花在目标、问题和“什么算完成”上。下面这个模板适用于大多数调查:
Use REA to analyze <absolute path to target>.
Question: <one concrete question about behaviour>.
For each conclusion, cite the REA Evidence ID it relies on, and label it as
an observation, an inference, or an unknown.
List what you could not determine and why.
Done means: <a check I can run myself>.
套到练习用的 crackme 上:
Use REA to analyze ./xor_gate.
Question: what input does the check function accept, and how is it validated?
For each conclusion, cite the REA Evidence ID it relies on, and label it as
an observation, an inference, or an unknown.
List what you could not determine and why.
Done means: a solver script whose output the original binary accepts.
(提示词用中文写也可以,关键是这几个要素都在。)每一行的用意:
- “Use REA”:把 agent 指向正确的工具。skill 的描述本身就会被逆向类请求触发,但装了别的工具时,点名 REA 能消除歧义。
- 一个具体问题:让调查有边界。“把所有东西都讲一遍”只会换来一篇证据很浅的长文。对大范围的请求,skill 会让 agent 先列问题清单,你也可以直接把清单给它。
- Evidence ID 和标签:逼 agent 区分 REA 返回了什么、模型自己推出了什么,这是防止“自信地胡说”成本最低的办法。
- 未知项:明确允许 agent 说“没查清”。不允许的话,空白处往往会被看似合理的猜测填上。
- 可执行的“完成”标准:把最终判断权从模型手里拿回到你手里。
给 agent 目标,不要规定方法。如果你写“先反编译 main,再找 XOR”,等于已经把它限制在你的假设里了。目标换成 Electron 应用,这个模板同样适用;Notion clipboard-bridge showcase 展示了一次沿 preload 和 IPC 追踪功能的完整过程。
这些习惯背后的道理,可以参考 CTF 文章里 给 agent 目标而不是方法 那一节。
第 7 步:确认 agent 真的调用了 REA
一个听起来像逆向分析的回答,并不能证明 REA 跑过。按投入从小到大,依次检查:
- 看对话记录里的工具调用。 Claude Code 把 MCP 工具命名为
mcp__<server>__<tool>,所以 REA 的调用会显示为mcp__rea__open_binary、mcp__rea__analyze_function、mcp__rea__analyze_javascript_application等。如果记录里只有调用strings、objdump、xxd的 Bash 命令,这个回答就不是来自 REA。skill 里也写明了 “only actual REA output supplies REA Evidence”。 - 核对 Evidence ID 是否真实存在。 让 agent 对当前会话调用
get_evidence_bundle(detail: "summary"),列出它引用过的 Evidence ID。不在会话账本里的 ID 就是编的。 - 导出会话。 让 agent 调用
export_evidence_bundle,写到你指定的路径。这个文件是可移植的记录,之后可以用rea inspect-evidence-bundle查看。详见 Evidence、快照与版本对比。 - 自己跑一遍“完成”标准。 crackme 就用原程序验证 solver 的输出;功能追踪就打开被引用的源码位置读一读。
关键结论出来时,问一句“哪个 Evidence ID 支持这一点?“表现正常的 agent 会给出 ID,或者承认这是推断。
要避免的做法
- 每个任务前都跑
doctor。 skill 明确说不要这样。工具在就直接用,只有真缺了或被拦了才去诊断。 - 把 main 分支的 skill 套在旧版 npm 包上。 skill 原文提醒:“a skill installed from repository main may describe capabilities absent from an older npm release.” 从 GitHub 直接复制的
SKILL.md可能提到你当前 server 没有的工具。让setup安装与包版本匹配的 skill,并以已连接 server 实际公布的工具列表为准。 - 让 agent 替你批准 setup。 计划要自己看。setup 从不安装 Node.js、npm、Homebrew、Java、Ghidra、IDA、JADX、Binwalk 或 Unblob,任何要求你装这些的提示都不该来自 setup。
- 对不属于你的东西要“源代码”。 目标限定在自己编译的程序、开源软件、CTF 题和官方 showcase,并阅读项目的 DISCLAIMER。涉及运行时抓取、设备访问或网络操作时,先取得授权。
常见问题和排错
Claude Code 里能看到 skill,但没有 REA 工具。 skill 不负责注册 MCP。先跑 rea doctor --client claude_code --json;注册缺失或过期时,再跑 rea setup --client claude_code --dry-run。
更新后 doctor 报告 skill 过期。 rea update 只更新 CLI,不会改写注册和 skill。运行它打印出来的 setup 命令,或者 npx rea-agents@latest setup --client claude_code。
我改过 SKILL.md,被 setup 覆盖了。 setup 会把你之前的版本保存为同目录下的 SKILL.md.rea.backup。自定义指令请放进你自己的 skill 或项目说明里,不要直接改 REA 管理的文件。
工具返回 provider_unavailable。 skill 没问题,是缺分析引擎。原生反编译需要 Ghidra、Hopper 或 IDA,见 REA + Ghidra。
下一步
- 在 crackme 上完整走一遍“提示词到验证”的流程:用 REA + AI agent 解 CTF 逆向题。
- 学会分页查看、导出和对比 Evidence:Evidence、快照与版本对比。
- 装一个免费的原生引擎:REA + Ghidra 分析原生二进制。
- 对比不同方案:REA 与 GhidraMCP、IDA Pro MCP 对比。
- 确认你装的是正版:REA 安全吗?如何确认装的是真正的 Reverse Engineer Anything。