mcpField

REA 上手教程:从本地环境配置到逆向分析首个自有项目

REA 首次接入,先用自有小项目分别验证 MCP 工具调用和分析结论:服务配置填写真实启动入口与绝对路径,连接后检查工具列表;再用 Base64 样例逐行核对空白处理、填充字符删除和缺参触发的 IndexError,避免把“已连接”当成分析成功。

MmcpField
REA 上手教程:从本地环境配置到逆向分析首个自有项目

REA 把逆向工程任务接到 CLI 和 MCP 服务上,让你从终端或 Agent 发起分析。第一次配置,更推荐用一个自有的小项目走通“入口验证—客户端连接—分析—证据核对”,不要直接拿生产程序试手。

教程的关键是把两件事分开验收:REA 是否正常运行,以及它对目标的解释是否正确。前者看进程和工具调用,后者看原始文件与可复现的行为。

查文档确认支持对象与依赖

从 REA 条目 进入项目文档,先找安装说明、CLI 用法和 MCP 接入示例。“对任何东西进行逆向工程”是能力概述,不能拿它替代输入格式清单。

安装前,把下面几项记下来:

要确认的内容后面用在哪里
接受源码目录、单个文件还是其他对象选择分析样例
运行时及版本要求创建本地环境
官方安装命令和 CLI 入口名称安装与入口检查
MCP 启动参数及传输方式配置客户端
模型、凭据与外部工具要求排查启动和分析失败

尤其要区分“CLI 分析命令”和“MCP 服务启动命令”。直接运行一次分析的入口,通常会完成任务后退出;客户端连接的服务则要按协议持续交互。把前者填进服务配置,常见结果就是进程启动后立刻断开。

下面的终端步骤使用 macOS 或 Linux 的 Bash。样例选择 Python 源码;确认 REA 接受这类输入后,再走这条路线。二进制、流量文件和网页各有不同的处理链路,不要靠修改扩展名把它们塞进源码分析流程。

准备自有或授权的最小样例

首个项目只保留一个入口、一个转换函数和几组输入输出。这样分析结果出现偏差时,可以直接定位到某一行。

bash
mkdir -p "$HOME/rea-lab/input"
cd "$HOME/rea-lab"

cat > input/token_demo.py <<'PY'
import base64
import sys

def encode_token(text):
    payload = text.strip().encode("utf-8")
    return base64.urlsafe_b64encode(payload).decode("ascii").rstrip("=")

if __name__ == "__main__":
    print(encode_token(sys.argv[1]))
PY

python3 input/token_demo.py ' hello '
python3 input/token_demo.py 'hello'
python3 input/token_demo.py ' '

前两次输出都是 aGVsbG8,第三次输出空行。这个样例包含三个适合核对的行为:去除首尾空白、URL-safe Base64 编码、删除末尾的填充字符。

再保存一份带行号的源码,方便后面逐条检查:

bash
nl -ba input/token_demo.py > source-numbered.txt

只把 input 目录交给分析工具,测试记录留在外面。先让它从目标中推导行为,再和记录比较,验收更有意义。

自有项目也可能包含密钥。分析目录中不要放 .env、访问令牌和真实用户数据;如果配置了远程模型,相关文件内容可能被发送到模型服务,首轮用这里的纯测试代码就够了。

一个最小分析目录与独立测试记录的关系。

安装并验证命令行入口

按 REA 文档里的安装命令安装,保留完整输出。不要从项目名称猜包名,再尝试 pip install 或 npm install:同名包和错误入口会把后续排查带偏。

安装结束后,在当前终端检查真实的 CLI 名称。下面的变量由你输入,不预设 REA 的可执行文件名:

bash
read -r -p "输入文档中的 CLI 入口名称:" REA_CLI
command -v "$REA_CLI"

成功检查点是输出可执行文件路径。没有输出时,先检查安装是否完成,以及安装目录是否进入 PATH,不要急着配置客户端。

接着运行文档列出的帮助命令和最小调用。此时要确认三件事:帮助信息正常显示、参数能被识别、没有运行时或模块缺失错误。帮助信息能显示,只说明入口可执行,还没验证分析链路。

如果安装过程使用了虚拟环境,保存该环境内入口的绝对路径。GUI 客户端不会自动继承你在终端里执行过的环境激活操作。

配置客户端并检查接入

先确认 MCP 传输方式。下面仅展示 stdio 接入结构,用于理解字段;其中的占位值要替换成文档中的真实路径和参数,不能原样粘贴启动。

json
{
  "mcpServers": {
    "rea": {
      "command": "/ABSOLUTE/PATH/TO/EXECUTABLE",
      "args": ["MCP_START_ARGUMENT"],
      "env": {}
    }
  }
}

command 放可执行文件,args 按参数拆成数组。不要把整条带空格的启动命令塞进 command。只在 env 中加入文档要求的环境变量。

客户端使用其他配置结构时,把这三个信息映射到它的服务配置中;HTTP 接入则填写服务地址,不套用上面的 stdio 示例。

保存配置并重新连接后,按这个顺序验收:

  1. 客户端启动了服务进程,且没有立即退出。
  2. MCP 初始化完成。
  3. 客户端列出了 REA 暴露的工具。
  4. 工具描述中的输入参数和目标类型符合预期。

第三步特别重要。聊天窗口显示“已连接”还不足以确认分析工具可调用。先看工具列表,再发任务;不要自己编一个 analyze 工具名让 Agent 调用。

发起分析并核对原文件

在终端拿到样例的绝对路径:

bash
cd "$HOME/rea-lab"
pwd -P

把输出路径与 /input 拼接,交给客户端。分析请求可以这样写:

text
请调用已连接的 REA 工具分析下面的自有源码目录:
<替换为 input 目录的绝对路径>

目标:
1. 找出程序入口与调用关系。
2. 解释输入字符串到输出字符串的每一步转换。
3. 说明空白输入、非 ASCII 输入和缺少命令行参数时的行为。
4. 每个结论附上文件路径、函数名和相关代码位置。
5. 将源码直接支持的结论与推测分开列出。

只做静态阅读,不修改文件,不安装依赖,不执行目标代码。

检查客户端的工具调用记录:实际调用了哪个工具,传入了什么路径,返回了内容还是错误。没有发生工具调用的回答,不计入这次接入验收。

阅读结果时,优先找证据定位。样例中,strip() 解释了为什么 ' hello ' 和 'hello' 输出相同;rstrip("=") 解释了为什么结果没有填充字符。把 Base64 描述为加密属于概念错误,应回到 base64.urlsafe_b64encode 这一行纠正。

缺少参数的行为也值得核对:

bash
python3 "$HOME/rea-lab/input/token_demo.py"

源码直接访问 sys.argv[1],没有参数检查,这条命令会触发 IndexError。如果分析结果写成“显示使用帮助”,就要求它重新引用入口代码。

分析结论与源码、终端输出逐条对应。

按依赖、路径、权限、输入排错

排错时保留第一条有意义的错误,别只截最后一句“连接失败”。

遇到 command not found,先查 CLI 入口和 PATH。遇到 ModuleNotFoundError 或 Cannot find module,检查启动入口所属的运行环境,避免把依赖装到另一个解释器或包环境里。

遇到 ENOENT、No such file or directory,分别验证可执行文件路径和目标路径。终端的当前目录与客户端工作目录经常不同,目标统一使用绝对路径。

遇到 Permission denied,检查目标是否可读、目录是否可进入、入口是否可执行。不要用 chmod -R 777 掩盖问题,它会扩大整个目录的写入权限。

进程能启动但 MCP 初始化失败,再查启动参数和传输方式。stdio 服务的标准输出用于协议通信,启动脚本向 stdout 打印欢迎语也会干扰连接,诊断日志应写到 stderr。

最后才查输入支持范围:缩小到一个文件,对照工具参数和支持对象重新调用。首轮验收建议保留三份记录:启动命令、实际工具调用、带源码位置的分析结论。以后换成真实项目,哪一层出了问题,会清楚得多。