<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>逆向工程 on heyaohua's Blog</title><link>https://blog.heyaohua.com/tags/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B/</link><description>Recent content in 逆向工程 on heyaohua's Blog</description><image><title>heyaohua's Blog</title><url>https://blog.heyaohua.com/og-image.png</url><link>https://blog.heyaohua.com/og-image.png</link></image><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Fri, 16 Oct 2026 10:00:11 +0800</lastBuildDate><atom:link href="https://blog.heyaohua.com/tags/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B/index.xml" rel="self" type="application/rss+xml"/><item><title>REA 项目分析：AI Agent 如何理解应用与二进制</title><link>https://blog.heyaohua.com/posts/2026/10/rea-ai-reverse-engineering-analysis/</link><pubDate>Fri, 16 Oct 2026 10:00:11 +0800</pubDate><guid>https://blog.heyaohua.com/posts/2026/10/rea-ai-reverse-engineering-analysis/</guid><description>从官方文档与源码拆解 REA 的 Agent、MCP、分析引擎和 Evidence 工作流，比较网页、Electron 与二进制调查的能力边界，并说明如何判断性能、隐私与功能重建是否有证据支持。</description><content:encoded><![CDATA[<p>看到一个应用的搜索、同步或文件处理功能，开发者常会想知道：它在哪一层完成？数据经过哪些模块？哪些细节可以借鉴到自己的系统？没有源码时，这些问题需要从应用产物、运行观察和分析工具中逐步寻找答案。</p>
<p>近期受到关注的 <a href="https://github.com/morluto/rea">REA（Reverse Engineer Anything）</a>把这类调查接到了 AI Agent 上。它提供统一的工具入口、调查指引和可追溯结果，让 Agent 能在取得证据后继续追问。理解它的价值，需要同时看工具能读到什么，以及这些观察能够支持多大的结论。</p>
<p>本文核对于 <strong>2026 年 10 月 16 日</strong>，依据 <a href="https://github.com/morluto/rea/releases/tag/rea-agents-6.5.0">6.5.0 发布信息</a>及当天<a href="https://github.com/morluto/rea/tree/1bd5c5c87e81b27bfb16140f71ffa03563e58477">主分支源码快照 <code>1bd5c5c</code></a>。主分支可能包含发布后的修改；本文为文档和源码分析，未做 REA 的端到端运行、性能或第三方应用逆向实测。</p>
<h2 id="rea-把哪些事情接在了一起">REA 把哪些事情接在了一起</h2>
<p>REA 的名字很大，拆开之后可以看到几个明确的分工。</p>
<table>
	<thead>
			<tr>
					<th>层次</th>
					<th>主要负责什么</th>
					<th>使用时要确认什么</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>AI Agent</td>
					<td>理解问题、选择工具、整理解释，必要时编写候选实现</td>
					<td>使用的模型、工具权限和数据策略</td>
			</tr>
			<tr>
					<td>MCP / CLI</td>
					<td>把调查操作提供给 Agent 或终端调用者</td>
					<td>已注册的工具、命令参数与返回结果</td>
			</tr>
			<tr>
					<td>REA 工作流</td>
					<td>分类目标、协调分析、保存和查询结果</td>
					<td>实际分析范围、所选 provider 和已知限制</td>
			</tr>
			<tr>
					<td>分析引擎或专用解析器</td>
					<td>读取产物、恢复结构，或观察获准的运行行为</td>
					<td>平台、格式、软件版本与具体能力</td>
			</tr>
	</tbody>
</table>
<p>配套的 Agent skill 提供调查顺序与使用方法。原生反汇编、反编译通常还要连接 Hopper、Ghidra、IDA 等引擎；JavaScript 静态分析、部分元数据检查可以走各自的解析流程。REA 负责把这些能力组织成 Agent 可以持续调用的调查过程。<a href="https://github.com/morluto/rea/blob/1bd5c5c87e81b27bfb16140f71ffa03563e58477/docs/native-investigation.md">原生调查指南</a>和 <a href="https://github.com/morluto/rea/blob/1bd5c5c87e81b27bfb16140f71ffa03563e58477/docs/cli.md">CLI 文档</a>分别说明了引擎前提与共用工作流。</p>
<p><img alt="REA 调查循环示意：Agent 提出问题，通过 REA 的 MCP 或 CLI 调用目标相关工具，取得带来源、覆盖范围和限制的 Evidence，再核对或继续追问。" loading="lazy" src="/images/posts/rea-ai-reverse-engineering-analysis/evidence-loop.svg"></p>
<p><em>依据项目文档自绘的工作流示意，非实际工具运行结果。</em></p>
<p>这也是它值得关注的地方：已有分析工具积累了大量能力，而 Agent 需要的是可调用的操作、适合阅读的结果，以及继续调查的线索。REA 试图连接这两端。</p>
<h2 id="从一个具体问题开始价值才容易判断">从一个具体问题开始，价值才容易判断</h2>
<p>假设要调查一个<strong>自己有权分析的 Electron 笔记应用</strong>：“搜索框里的文字，最终交给哪个模块处理？”这是一个教学场景，没有对应的实测结果。</p>
<p>静态调查可以先识别应用产物和模块，再寻找界面入口、IPC 通道或搜索字符串，沿已有关系追踪到主进程、存储调用或原生扩展边界。REA 的 <a href="https://github.com/morluto/rea/blob/1bd5c5c87e81b27bfb16140f71ffa03563e58477/docs/javascript-application-workflows.md">JavaScript 工作流</a>支持从字符串、模块、API、IPC 通道等线索追踪关系，并保留来源和未知项。</p>
<p>对应的 MCP 工具链可以是：用 <code>analyze_javascript_application</code> 生成应用图，再用 <code>trace_application_feature</code> 沿字符串或 IPC 线索追踪，最后通过 <code>inspect_analysis_view</code> 回查相关模块。每一步都围绕同一个问题取材料，比一开始要求 Agent “完整复刻这个应用”更容易核对进展。</p>
<p>这些材料可以支持“找到一条静态候选路径”。要确认它是否就是某次用户操作实际走过的路径，还需要匹配的运行观察或测试。遇到动态属性、间接调用、缺少的文件或未覆盖语法，调查结论也要跟着收窄。</p>
<p>按目标看，几种常见能力可以这样理解：</p>
<table>
	<thead>
			<tr>
					<th>目标</th>
					<th>可以取得的线索</th>
					<th>不能直接据此确认的事情</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>JavaScript / Electron 产物</td>
					<td>模块、导入、部分语义关系、IPC 与原生扩展边界</td>
					<td>某条静态路径已执行，或原始工程已恢复</td>
			</tr>
			<tr>
					<td>原生二进制的函数分析</td>
					<td>所选引擎提供的伪代码、汇编、字符串、调用与引用</td>
					<td>伪代码就是原始源码，或未解析部分没有行为</td>
			</tr>
			<tr>
					<td>网页与浏览器观察</td>
					<td>当前页面、脚本、网络记录及获准的交互观察</td>
					<td>服务端内部实现，或没有观察到的路径不存在</td>
			</tr>
			<tr>
					<td>.NET 程序集</td>
					<td>支持格式中的元数据、CIL 和声明的依赖</td>
					<td>任意 .NET 打包形式都适用，或程序集已被运行验证</td>
			</tr>
	</tbody>
</table>
<p>浏览器能力由不同 provider 承担：被动 CDP 路径附着到已有目标进行观察，主动 Playwright 场景可以执行声明的导航、点击和输入。具体权限与生命周期见<a href="https://github.com/morluto/rea/blob/1bd5c5c87e81b27bfb16140f71ffa03563e58477/docs/browser-observation.md#provider-authorities">浏览器 provider 说明</a>；托管代码的格式前提见 <a href="https://github.com/morluto/rea/blob/1bd5c5c87e81b27bfb16140f71ffa03563e58477/docs/managed-code-analysis.md">.NET 分析指南</a>。选择工具时要看目标内容、宿主和引擎版本；单看扩展名或一张支持列表，容易高估覆盖范围。</p>
<h2 id="evidence-让调查更容易复核">Evidence 让调查更容易复核</h2>
<p>REA 输出中的 Evidence 值得单独看。<a href="https://github.com/morluto/rea/blob/1bd5c5c87e81b27bfb16140f71ffa03563e58477/src/domain/evidence.ts#L123-L140">数据结构定义</a>把结果与操作、参数、目标身份、来源和限制联系起来，使后续查询能回到对应材料。目标摘要、证据 ID、标准化结果以及覆盖说明，各自承担不同作用。</p>
<p>例如，“找到了某个函数”至少还需要回答：来自哪个产物版本？哪次分析？目标身份是否一致？看到的是声明、静态推断还是运行观察？只给一个看似合理的函数名，很难检查这些问题。</p>
<p>对大型应用，全部结果也可能非常大。REA 提供摘要、分页与单项视图，可以围绕已经取得的 Evidence 继续查询，避免每次都把所有材料交给 Agent。<a href="https://github.com/morluto/rea/blob/1bd5c5c87e81b27bfb16140f71ffa03563e58477/docs/javascript-application-workflows.md#retained-module-facts">结果视图文档</a>特别区分了数据覆盖范围和分页是否读完：读完一个空页面，仍不能证明尚未完整分析的应用里没有相关对象。</p>
<p><strong>可追溯性提高了检查答案的条件，答案是否成立仍要逐项核对。</strong> Evidence ID 本身不能替代内容与结论之间的对应关系。</p>
<h2 id="几个容易被热度掩盖的边界">几个容易被热度掩盖的边界</h2>
<h3 id="多引擎支持需要明确选择条件">多引擎支持，需要明确选择条件</h3>
<p><a href="https://github.com/morluto/rea/blob/1bd5c5c87e81b27bfb16140f71ffa03563e58477/src/application/binary/AnalysisProviderRegistry.ts#L299-L364">源码中的 provider 选择逻辑</a>与 <a href="https://github.com/morluto/rea/blob/1bd5c5c87e81b27bfb16140f71ffa03563e58477/docs/cli.md#choose-a-provider">CLI 的选择规则</a>一致：自动选择时，只有一个适用候选才会绑定；多个候选需要显式指定。选定的引擎在会话中保持绑定，失败会保留原因。</p>
<p>因此，不能把“支持多个引擎”理解成 Hopper 失败后会自动轮流尝试 Ghidra、IDA。排查问题时，应先确认实际使用的是哪个 provider、它是否支持该目标，以及失败发生在环境准备还是分析阶段。</p>
<h3 id="本地分析要与模型的数据流一起看">本地分析，要与模型的数据流一起看</h3>
<p>REA 可以在本机完成分析，但 Agent 会读取工具结果。结果是否进入远端模型，取决于 Agent、模型提供方及其配置。<a href="https://github.com/morluto/rea/blob/1bd5c5c87e81b27bfb16140f71ffa03563e58477/README.md#faq">项目 FAQ</a>也明确提醒用户检查模型提供方的数据策略。</p>
<p>分析私有程序前，应确认哪些内容会进入上下文：文件路径、字符串、伪代码、网络观察或其他输出，都可能具有敏感性。MCP 统一了工具调用方式，实际数据去向仍由整条链路决定。</p>
<p>项目的<a href="https://github.com/morluto/rea/blob/1bd5c5c87e81b27bfb16140f71ffa03563e58477/SECURITY.md#security-boundary">安全说明</a>还指出，provider 以当前用户权限解析目标，REA 的会话认证和临时目录机制不能充当沙箱。动态插桩等会执行代码的操作，要按其实际副作用单独评估。对只想了解结构的任务，可以先从静态材料开始。</p>
<h3 id="输出变短要分别核对-token耗时与正确性">输出变短，要分别核对 token、耗时与正确性</h3>
<p>REA 的<a href="https://github.com/morluto/rea/blob/1bd5c5c87e81b27bfb16140f71ffa03563e58477/experiments/analysis-efficiency/README.md">效率实验</a>区分了工具回复字节、模型 token 和完整任务时间，并保留了收益不一致的结果。摘要或分页减少了传输内容，后续也可能增加发现、查询和纠错调用；最终节省多少，需要按同一问题实际测量。</p>
<p>这些是项目公布的实验材料，本文没有独立复现。不能把某个样本的输出压缩比例，直接写成所有任务的成本降幅或速度提升。</p>
<p>正确性也有明确范围。<a href="https://github.com/morluto/rea/blob/1bd5c5c87e81b27bfb16140f71ffa03563e58477/docs/client-verification.md">客户端验证文档</a>为部分桌面、解析器比较与托管代码场景设置了已知事实检查；同一文档说明，native、browser 等场景没有相同的事实评分规则，<code>factualCorrectness</code> 保持 <code>not_assessed</code>。这表示这些场景未在该套事实规则下评估，不能外推成“全部分析准确”，也不能反向断言工具无效。</p>
<h3 id="功能重建还需要独立的验收条件">功能重建，还需要独立的验收条件</h3>
<p>理解一部分实现，可以为重新实现提供线索。是否已经重建成功，还需要输入输出、异常、状态变化和副作用等可比较条件。</p>
<p>项目的<a href="https://github.com/morluto/rea/blob/1bd5c5c87e81b27bfb16140f71ffa03563e58477/docs/reconstruction-readiness.md">重建就绪验证</a>使用项目自有样例检查流程、证据关联和失败处理。文档同时限定了这些检查的范围。读到一个通过结果时，要继续看它覆盖了哪些样例与断言，不能把它扩展成任意真实应用的等价证明。</p>
<h2 id="怎样判断它是否适合自己的工作">怎样判断它是否适合自己的工作</h2>
<p>REA 更适合有具体调查问题、愿意阅读证据，并能准备相应工具环境的开发者。对维护旧系统、梳理自有应用产物或研究互操作接口的人，统一入口和可复用结果可能带来实际价值；具体收益仍取决于目标与调查深度。</p>
<p>一次有意义的评估，可以选<strong>自己拥有源码、能构建和测试的小型应用</strong>：</p>
<ol>
<li>先写三个有确定答案的问题，例如某个 IPC 通道由谁处理、一个配置值来自哪里、一次操作写入哪个文件。</li>
<li>用固定版本的产物调查，保存产物摘要、REA 版本、provider 与工具返回，要求结论对应具体证据。</li>
<li>回到源码和已有测试逐项核对，记录答对、答错、明确未知与未覆盖的部分。</li>
<li>记录完整耗时、工具调用和模型用量；若尝试重建功能，再用独立测试检查行为。</li>
</ol>
<p><a href="https://github.com/morluto/rea/blob/1bd5c5c87e81b27bfb16140f71ffa03563e58477/docs/installation.md">安装指南</a>列出了运行时、Agent 配置和 provider 准备方式；正式接入前应按选定版本核对实际前提。</p>
<p>截至本次核对，<a href="https://api.github.com/repos/morluto/rea">GitHub 官方 API</a>返回 271,725 个 Star。这个单次快照能描述关注度，无法计算最近两天的增长，也无法衡量分析准确率。更值得观察的，是 REA 能否在具体问题上帮助调查者更快取得可复核的材料，并清楚保留未知项。</p>
<p>关于 Agent 工具如何复用，也可以结合博客已有的 <a href="/posts/2026/03/openclaw-skills-complete-guide/">OpenClaw Skills 指南</a>阅读。对 REA 的评估则应继续落在明确目标、真实证据和可执行的验收条件上。</p>
]]></content:encoded></item></channel></rss>