夜雨聆风学习资料网

ARTICLE · 1157092

REA:让软件逆向有据可查

REA:让软件逆向有据可查

REA:让软件逆向有据可查

日期:2026-10-11 标签:REA / 逆向工程 / AI Agent / MCP / 静态分析 / 软件架构

一套软件已经运行多年,源码却不完整了。它能读某种历史数据,能调用一块旧设备,也能给出一直被业务使用的计算结果。现在需要迁移系统、替换依赖,或者确认一次版本更新究竟改变了什么。问题很具体:这段功能到底怎样工作?重写之后,又凭什么说结果保持一致?

逆向工程要回答的,往往就是这些问题。反汇编器、反编译器、浏览器开发工具和运行日志各自提供一部分线索,但把线索接起来仍然需要大量判断。一个字符串出现在程序里,未必对应正在使用的功能;两段代码结构相似,也未必具有相同的边界行为。

AI Agent 可以协助搜索、解释代码和编写验证程序。随之而来的要求也更明确:模型引用的函数来自哪个文件?那条调用关系是工具直接发现的,还是根据上下文推测的?没有查到某个行为,是因为它不存在,还是这次分析没有覆盖到?

REA 把这些问题放进了软件的接口和数据结构。它将原生二进制、JavaScript/Electron、托管程序集及运行时观察接入统一工作流,同时记录每项结果的来源、目标身份和局限。理解这个项目,需要同时看它连接了哪些工具,以及它怎样约束从工具结果到技术结论的推理过程。


一、REA 为谁解决什么问题

REA 的全称是Reverse Engineer Anything。项目采用 MIT 许可证,提供命令行和 MCP 两种入口。分析者可以从终端使用它,也可以让支持本地 MCP 的 Agent 调用其能力。本文依据版本字段为6.4.0的源码快照展开,具体能力随目标格式、操作系统和分析引擎而变化(REA contributors, 2026a)。

MCP 在这里承担工具连接协议的角色。Agent 提出分析请求,REA 检查输入、选择适用能力、执行分析,再返回有结构的结果。模型可以据此追问或写代码,但工具结果是否可信,仍要依靠目标校验、证据记录和实际验证。

REA 适合从明确的问题出发。例如,追踪一个 Electron 应用的剪贴板功能,定位二进制中的数值换算过程,比较两个版本的接口变化,或检查旧程序退出时是否留下子进程。问题限定得越清楚,越容易判断已有证据是否足够。

目前的主要技术路线可以概括为下面几类。

分析对象能够取得的主要线索

原生二进制函数、伪代码、汇编、字符串、引用和调用关系;深度分析使用 Hopper、Ghidra 或 IDA

JavaScript / Electron模块、导入、打包结构、源码映射、IPC 与原生扩展关系

浏览器与运行中程序页面、脚本、网络和交互观察,或终端输出、进程退出及文件系统变化

.NET 程序集PE/CLI 元数据、成员、CIL 指令及声明的原生依赖

Android 与固件借助 JADX、Apktool、ADB、Binwalk、Unblob 等工具,取得代码、资源、设备或提取结果

其他离线制品ELF 布局、已记录的崩溃、EVM 字节码接口候选及软件包资源


这张表描述的是能力入口。具体操作仍有自己的前置条件:静态 JavaScript 分析不需要启动应用,浏览器交互则会操作选定页面;读取 Android 包与通过 ADB 操作设备,也属于不同范围。REA 的“本地分析”同样有准确含义:分析工具在本地工作,Agent 收到结果之后是否发送给模型服务,取决于 Agent 的配置。


二、从一个请求到一份分析结果

两个入口,共用一套分析工作流

阅读 REA 源码,首先值得留意的是composition、application、domain和各类 provider 的分工。CLI 与 MCP 负责接收请求;组合层创建会话和分析组件;应用层组织工作流;领域模型定义目标、证据、关系图及比较语义;provider 处理具体引擎的协议与输出。

这种安排使一项能力可以同时用于交互式调查和可重复的命令行任务。对外接口形式虽然不同,目标选择、结果记录和资源关闭仍应遵循同一套规则。否则,命令行导出的结果与 Agent 会话中的结果即使外观相似,也可能在来源和生命周期上出现差异(REA contributors, 2026b)。

图1:REA 多路分析与共享证据架构

图 1. REA 的主要技术路线。三路表示可选的分析方式;P-code 对应 Ghidra 路线,不表示所有引擎采用相同中间表示。imagegen 概念示意。

同一个目标,为何不能随意更换引擎

原生逆向中,不同引擎可能对函数边界、类型或间接调用给出不同解释。若前一步用 Ghidra 取得函数信息,后一步因某项操作失败而悄悄改用另一个引擎,后续结果就可能失去一致的分析前提。

REA 的原生 provider 选择器会检查可用性、目标兼容性与分析配置。自动选择存在多个合格候选时,系统报告歧义;确定的深度分析会话绑定一个引擎,辅助能力再按不重叠的操作集合接入。这样,调用方能够知道结果来自谁,也能理解为什么某项操作不可用。

缓存也遵循类似原则。同一份二进制在引擎升级、加载参数变化之后,可能产生不同结果。REA 使用分析配置承诺AnalysisProfileCommitment,将 provider 身份及影响分析的参数纳入摘要。复用 snapshot 时,需要核对目标和 profile;依赖当前光标或实时状态的操作还受到单独限制。

这些设计并不醒目,却直接影响一次长时间调查能否复现。缓存命中只是节约时间,命中的结果仍然适用才是前提。


三、最值得细读的自有算法:JavaScript 语义恢复

从“发现名字”到“确认关系”

在 JavaScript 包中搜索clipboard或fetch很容易。真正的困难是确认:这个名字属于哪个作用域,是否经过别名转发,有没有被覆盖,最终调用的是内置 API 还是应用自己定义的对象。

REA 先使用 Babel 得到抽象语法树,再由自身的语义分析代码恢复作用域、词法绑定、模块来源、对象成员、引用、函数返回以及调用候选。它还会提取部分 Promise 所有权和文件、网络资源关系。这些步骤都基于静态语法,目标 JavaScript 不会因此被执行(REA contributors, 2026c)。

这里的“语义恢复”可以理解为:给每一项关系附上成立所需的条件。两个标识符写法相同,未必指向同一个对象;一个函数返回了某个表达式,也未必证明它接管了表达式内部所有异步任务。

别名会让已经知道的事实失效

下面这个说明性例子展示了问题所在;它不是一份 REA 实测输出。

1 const state = { child: { value: 1 }, keep: 3 };2 const alias = state.child;3 mutate(alias);


alias指向state.child。若mutate的行为尚不明确,分析器就不能继续无条件认定state.child.value等于 1。与此同时,state.keep是否仍可保留为已知事实,要看实际建立的引用与变异关系,不能把整个对象一并抹成未知。

这涉及对象身份、成员路径、别名传播、调用影响和覆盖范围。REA 的测试源码专门包含循环引用路径、潜在成员变异、原型效应以及保留未受影响属性等情形。它们说明了算法需要守住哪些边界;本文没有将阅读测试断言等同于重新执行测试。

为了表达这些差别,REA 为恢复值设置了不同状态:一个确定常量可以是literal,若干候选可以是union;对象和数组记录已知槽位;无法恢复、存在多种赋值或遇到引用环时,分别保留unknown、ambiguous或cycle。

未知是可供后续调查使用的信息。它提示需要读取更多代码、补充运行时观察,或缩小结论范围。若直接选取一个看起来合理的值,后续重建反而更难发现错误来源。

图 2 将这个例子中的共享引用与未知传播画在一起:两个名称指向同一对象,调用影响的边界决定哪些事实还能保留。

图2:JavaScript 共享引用、未知变异与事实保留

图 2. 别名与变异传播的概念示例。keep 的保留取决于变异影响范围;图中取值不是 REA 实测输出。imagegen 概念示意。

静态分析必须控制信息膨胀

一个表达式可能对应多个候选值,拼接与组合会继续增加候选。若左侧有a种可能、右侧有b种可能,一次组合就可能涉及a × b个结果。把大结果生成完再截断,已经无法避免前面的内存开销。

当前源码为 primitive 候选数和表达式深度分别设置了 256 的上限,并为字符串的潜在 JSON 表示设置字节预算。超界会保留相应的资源限制原因。分析 worker 还分阶段提交事实,对结果传输和父进程保留容量进行检查,使静态阶段已经取得的结果不必随着后续语义分析失败而全部丢失。

一个很细的例子是负零。JavaScript 中的-0在部分运算里有独立意义,但普通 JSON 数字序列化无法保留它与0的区别。REA 的 primitive 归一化会对这种情况降为未知。这样的取舍牺牲了一个表面上的“确定值”,保住了证据表达的准确性。


四、深入机器指令:P-code 与跨函数值流

原生分析的技术基础主要来自成熟逆向引擎。REA 并未自行重写 Ghidra、Hopper 或 IDA 的全部反汇编和反编译能力。评价它的贡献,需要沿着引擎输出继续往上看。

Ghidra 使用 P-code 表示处理器指令涉及的运算、内存访问与控制流,为不同处理器提供共同的分析形式。它也为数据流图建立提供基础(National Security Agency, 2026)。

REA 的 Ghidra bridge 从HighFunction提取操作、输入输出、参数使用、定义—使用关系,以及加载、存储和调用等效应。应用层再围绕这些事实组织跨函数值流,核对目标摘要,并为相关函数保留 Evidence 引用(REA contributors, 2026d)。

这让调查可以继续深入:一个参数经过哪些运算?它流入哪个存储位置?哪一次调用使用了这个值?在老软件迁移中,某个单位换算或边界条件常常就藏在这些连接里。伪代码便于阅读,数据流关系则提供了另一条核对路径。

不过,静态调用候选仍可能无法确定。间接调用、混淆、缺失类型信息和引擎分析范围都会影响结果。当前 bridge 对 High P-code 操作及 def-use 边设置了明确容量上限;达到上限后的图,需要连同截断状态阅读,不能当作完整程序语义。

AArch64 跳表恢复体现了怎样的技术难度

源码里还有一段具有机器级特点的逻辑:恢复受约束的 AArch64 相对跳表。它检查构造表地址的ADRP/ADD、读取表项的特定加载指令、分支基址,以及最终的ADD/BR,还要求 selector 的范围受到比较和无符号分支约束。

这段恢复同时依赖寄存器来源、加载位宽、偏移缩放、表项数量与目标地址关系。相似的汇编外观不足以支撑相同结论,条件不满足的 case label 会继续保持未知。它展示了 REA 在引擎基础之上增加的特定分析逻辑,也展示了这类逻辑的适用范围。

从算法深度看,JavaScript 的语义恢复和原生值流都值得研究。前者更多体现 REA 自身的领域实现;后者建立在外部引擎提供的机器语义之上,再进行提取、约束与组合。


五、Evidence 怎样把一次分析变成可复核的记录

逆向结论很容易脱离原始上下文。例如,“程序调用了某个系统接口”这句话,可能来自一段汇编、一条运行日志,也可能只是字符串匹配后的猜测。把它们写成同样肯定的语气,读者便无法判断证据强弱。

REA 用 Evidence 记录目标摘要、provider、分析 profile、操作参数、原始与规范化结果、源位置、关联记录和限制。同时,它区分observed、derived、inferred,使直接观察、派生结果与推断保留不同身份(REA contributors, 2026e)。

Evidence ID 基于语义内容的规范化 JSON 与 SHA-256 生成。导入时可以重新核对内容是否符合标识,账本则以不可变记录组织这些结果。这样,一项结论能够沿引用回到此前的分析,而不只是落在聊天记录里的一段文字。

这里存在一个容易误解的边界:内容哈希能检查记录的一致性,不能证明记录者诚实。重新构造一份虚假内容并计算摘要,并不会因为“哈希有效”而变成真实观察。真实目标、采集方法和独立验证仍然重要;Evidence 提供的是复核所需的结构。

静态文件与运行时脚本,怎样确认是同一个对象

REA 可以把已有的静态 application graph 与浏览器、Electron 或 V8 Inspector 的被动观察进行关联。这个关联步骤消费已取得的 Evidence,自身不会因为一条路径映射就获得更多读取文件或访问网络的权限(REA contributors, 2026f)。

有捕获源码时,精确内容摘要可以提供较强的身份依据;再结合明确的位置映射,能够缩小候选范围。缺少源码字节时,唯一位置对应只能支持较弱的关联。多个候选、内容不一致、捕获范围不完整,都需要分别表达。

这里至少有三个经常被混用的事实:脚本被加载;某个模块包含在已加载的 bundle 中;某段功能实际执行了。前两者都不能直接替代第三者。没有在一次捕获中出现的模块,也可能只是位于尚未触发的功能路径中。

图3:从静态与运行时证据到重建验证的流程

图 3. 从证据关联到对照验证的工作流程。对照测试需由相应工具与分析者组织,图中未表示 REA 会自动执行全部验证。imagegen 概念示意。


六、重建完成,需要怎样的证明

将一段伪代码改写为可编译程序,只解决了重建工作的一部分。命令行参数、错误处理、文件格式、进程退出和并发时序,都可能决定新程序是否能替代旧程序。

REA 提供重建义务账本,把这些要求组织成可以逐项检查的对象。必要义务需要明确的实现归属、要求的用例、可比较的验证边界,以及能够引用的验证结果。缺失依赖、重复 owner、矛盾证据和残余未知都会影响闭合状态。自动分析产生的候选义务也需要审视:没有被生成出来的要求,不能自动算作满足(REA contributors, 2026g)。

例如,原程序在用户取消任务时会终止子进程,并保留已经取得的诊断信息。重建版本中的某个纯函数测试通过,并不能覆盖这一行为。验证必须触及相应进程边界,检查退出和诊断保留的实际结果。

并发程序为何不能只比较日志顺序

设想两个独立 worker 都需要在主进程退出前完成,但它们谁先结束并不影响功能。两次运行可能得到不同的日志顺序。逐行比较会把正常调度差异标成失败;完全忽略顺序,又可能漏掉主进程提前退出的问题。

REA 的进程轨迹规格支持偏序关系和有限轨迹。偏序可以表达哪些事件必须先发生、哪些事件允许交换;有限轨迹可以明确列出可接受的行为序列。比较结论因此有了可检查的前提(REA contributors, 2026h)。

账本与轨迹规格共同回答“已经证明到哪里”。它们并不自动替使用者执行所有验证器,也不构成对任意输入的程序等价证明。验证器本身的来源、输入以及执行结果,仍然需要可信的证据支撑。


七、工程可靠性藏在取消和清理之中

分析引擎可能启动较慢,目标文件可能很大,用户也可能在中途取消请求。此时,如何处理子进程、socket、临时目录和已经取得的结果,会直接影响工具是否能长期使用。

REA 的进程基础设施将资源所有权作为显式问题处理。POSIX 路径结合进程组、运行标识和身份观察约束清理;Windows 原生层使用 Job Object 管理自有进程,并在进程创建阶段建立关联。源码还保留 cleanup incomplete 这类状态,避免把清理失败的资源从管理范围中遗忘(REA contributors, 2026i)。

仅凭 PID 终止进程不够可靠:原进程退出后,PID 可能被重新分配。同样,分析结果已经得到而清理失败,应当保留两个独立事实。把它们合并成一个笼统的“失败”,会丢掉有价值的分析;忽略清理错误,又会使会话留下无法解释的资源。

这些机制有助于限制工具对宿主环境的影响,但它们不构成运行任意恶意程序的通用安全沙箱。REA 各种分析方式的操作范围,仍需按相应工具契约理解。


八、从应用功能追踪到科研软件迁移

REA 官方的 Notion 案例给出了一个具体入口:沿页面剪贴板 API,经过 preload、IPC 和主进程,追到 Electron 的剪贴板写入。页面注明案例目标为 Notion Desktop 7.6.1,部分分析结果记录于 REA 4.1.0。这是项目展示的历史案例,并非本文重新运行的结果(REA Project, n.d.)。

这类调查的意义在于逐步缩小解释范围。先确定暴露的接口,再找转发和接收位置,随后核对参数及处理逻辑,能够把“某个功能可能这样实现”推进为带有源位置的实现说明。实际重建还要补上行为测试。

老旧工具与协议兼容

对于缺少完整源码的设备工具、格式转换程序或桌面应用,REA 可以协助定位输入处理、接口调用和相关代码路径。版本比较则有助于区分改名、结构变化和可能影响行为的修改。

适合优先研究的是边界明确、可以准备输入输出对照的问题,例如一个数据包字段如何解析,一个命令如何返回错误,或者一个配置值怎样影响输出。范围有限的调查更容易形成可复核结果,再据此扩大到相关模块。

科研程序还需要独立的数值基准

科研软件迁移常常更棘手。一个 Fortran/C++ 程序可能已经服务多年,但编译器、依赖库或硬件环境逐渐难以维护。反编译和调用图能够帮助定位计算结构,有限输入下的进程捕获则可以提供外部行为对照。

科学结果是否正确还需要另一层验证:单位、坐标系、时间系统、输入采样、浮点精度、异常数据与守恒关系。相同的输出格式不能证明数值等价,少量样例吻合也不能代表完整任务满足精度要求。

对于 GNSS、遥感或地球科学计算,一个可行用法是把 REA 用于定位算法路径与软件边界,再用独立数据集和可信基准检验重建结果。这里讨论的是面向科研工程的使用思路,并非 REA 已提供专门的科学正确性证明。


九、怎样开始一项可复核的调查

项目 README 给出的设置入口是:

1 npx rea-agents setup


设置过程会展示拟议变更,由使用者审核;不同分析引擎另有相应要求。静态 JavaScript 路线适合作为一个范围清楚的起点,例如分析一份已取得授权的本地应用目录:

1 npx rea-agents analyze-javascript-application \2   /absolute/path/to/app --json


这条命令来自项目说明,用来展示入口形式,本文没有执行该目标分析。npm 实际安装的版本与本文源码快照可能不同,工具名称、参数及可用能力应以所用版本为准。

交给 Agent 的问题也可以更具体一些:

分析这个本地 Electron 应用的剪贴板写入路径。请给出页面接口、preload 转发、IPC 通道和主进程接收位置;区分直接观察与推断,并列出需要运行时验证的部分。

这种请求同时说明了目标、输出和待验证事项。取得第一轮结果后,再根据未知项决定是继续静态读取、补充运行时观察,还是设计对照实验。完成的记录应包括输入摘要、引擎及分析配置、关键位置、结论范围和未解决问题。

原生分析开始前还要明确选择的 provider,并确认它对目标格式与宿主平台的支持。Windows Ghidra、IDA GUI 附着等路线具有各自约束,不能从一个平台上的成功推断到其他组合。


十、对软件生态意味着什么

前面的技术细节共同影响着一件事:谁有能力理解一个已经交付的软件,以及这种理解能否被别人复核。REA 把多种分析工具接入 Agent,并保留证据关系,可能降低初步调查和协作交接的成本。下面讨论的是基于其架构的影响判断;本文没有用户规模、生产部署或对照实验数据,不能据此宣称它已经改变了行业。

软件传播:让实现知识随软件一起流动

软件传播既包括安装包和代码的分发,也包括实现知识的流动。过去,一份闭源安装包能被广泛使用,其内部机制却可能只被少数维护者理解。即使项目已经开源,读懂庞大的依赖、打包产物和运行路径仍然需要经验。REA 的价值在于把“去哪里查、怎样把结果接起来”整理成可重复的工作流,让更多开发者能够从具体问题进入复杂系统。

这有利于技术教学、兼容性研究和停止维护的软件迁移。一个分析者取得的函数位置、调用路径与未知项,可以成为下一位分析者的起点。如果公开材料同时给出制品版本、摘要和分析范围,技术文章与社区讨论就更容易接受复核。对开源作者而言,这也有助于他人理解项目,但不会自动降低维护、设计与验证的难度。

更容易看懂软件,也可能降低模仿功能和寻找攻击面的成本。它会给依赖实现不透明来保护竞争力的产品带来压力。不过,本地制品并不包含完整的服务端系统、业务数据与运营经验,从程序中恢复部分机制也不意味着能复制整个产品。对这种双向影响,更值得观察的指标是分析耗时、错误率和复核成本,而不是 Agent 一次生成了多少代码。

安全审计:把线索推进到可复现的问题

在授权审计中,安全人员常常要跨越多个边界:某个 IPC 接口是否检查调用者,外部输入能否到达敏感操作,某次升级是否改变了校验逻辑。REA 的调用关系、值流和运行时证据可以辅助定位这些路径,并让分析者回到具体文件、函数或观察记录。

但发现危险 API、可疑字符串或一条候选路径,只是调查的起点。确认漏洞还需要核对可达性、攻击者能控制的输入、实际权限和触发条件。一次运行没有出现异常,也不能证明不存在漏洞。工具的贡献应体现在问题报告更容易复现、修复更容易验证,而不是把每条线索都升级成告警。

NIST 的 SSDF 将安全实践纳入软件开发生命周期,也面向软件生产者与采购方的沟通提供共同框架。REA 可以作为这类流程中的分析环节;它本身不构成安全认证,也不能替代威胁建模、测试和漏洞响应(NIST, 2022)。SSDF 原文

Agent 介入后,还多了一条需要守住的边界:目标程序中的字符串、页面内容和日志应作为待分析数据处理,不能因为其中出现操作指令,就获得执行权限。运行不可信目标需要合适的隔离环境;将结果交给远程模型之前,也应明确哪些代码、数据和日志允许离开本地。这些属于部署与使用流程的责任,不能仅凭 REA 的“本地执行”或只读分析能力推断已经解决。

供应链透明度:连接清单、制品与行为

软件供应链的困难之一,是开发者声明的依赖、最终打包进去的内容和实际运行的路径不总是处于同一视野。SBOM 提供软件组件清单,帮助提高供应链透明度;CISA 的资料也将组件清单与漏洞影响说明等实践分别介绍(CISA, n.d.)。SBOM 资料入口

REA 可以为核查制品提供补充线索。例如,采购方拿到某个版本的安装包后,可以调查其中的模块、原生依赖和相关行为,再与供应商材料对照。清单、制品观察和漏洞影响结论需要彼此核对。看到组件名称不一定能确定其精确版本,存在某个依赖也不代表相关漏洞一定可触发。

这里需要明确能力边界:本文没有验证 REA 能自动生成完整、符合指定标准的 SBOM,也没有验证其能自动完成漏洞数据库匹配或持续监控。把 REA 接入制品审查,是可行的工程方向;将它描述为现成的供应链合规平台,会超出当前证据。

许可证与合规:证据更清楚,责任仍需逐项判断

一个软件包可能同时包含自有代码、开源依赖、第三方资源和商业组件。逆向分析可以帮助定位相关文件和许可线索,但许可证名称、版权归属、实际适用范围及分发义务需要结合原始材料核实。SPDX 为许可证提供标准化标识与表达式,并明确提醒使用者不要在添加标识时移除原有版权声明(SPDX, n.d.)。许可证信息指南

REA 自身采用 MIT 许可证,并不会改变被分析软件的许可条件。能够读取、反编译或解释一个程序,与有权复制、改编、分发它属于不同问题。WIPO 的版权资料说明,软件可以受到版权保护,相关权利及例外需要结合适用制度理解;具体项目还应核对合同、许可文本和所在地规则(WIPO, n.d.)。版权问答

对企业而言,可操作的做法是把技术事实与授权记录一起保留:分析的是哪份制品,从何处取得,允许开展哪些操作,结论依赖哪些观察,哪些材料能够对外分享。公开报告也应按披露范围处理个人信息、业务数据和凭据。Evidence 的内容摘要可以帮助核对记录,却不能自行证明授权有效、材料真实,或取得法律意义上的证据资格。

因此,REA 对软件生态最有潜力的贡献,是让理解与复核软件的能力更容易被共享。传播、审计和合规团队可以围绕同一份制品讨论具体事实,同时保留各自需要作出的判断。要实现这一点,工具能力之外,还需要准确的来源记录、明确的授权和持续的人工复核。


十一、REA 最值得关注的技术方向

从系统整体看,REA 最有分量的技术是跨分析域的证据一致性与语义关联。从自有算法看,JavaScript 的有限值域、别名与变异传播最值得细读;从机器级逆向看,Ghidra High P-code 的利用、跨函数值流和特定跳表恢复展示了另一种技术深度。

这几部分共同应对一个现实问题:软件理解是逐步积累的,而每一步都可能改变后续解释。错误的目标身份会污染整条分析链,静态候选被误当成运行事实会夸大结论,过早宣称重建完成则会掩盖尚未测试的行为。

沿着现有设计继续发展,值得检验的方向包括真实应用上的误判与未知比例、多版本引擎的契约一致性、大结果的内存和传输成本,以及 Agent 是否能选对工具并正确使用证据。这些指标需要实际基准,工具数量和一段漂亮的回答都无法替代它们。

对分析者而言,一次有价值的调查可以先停在一个小而明确的结论上:某个参数确实流入了这个调用;某条 IPC 路径已找到两端;某项行为只在这些输入下得到验证。REA 提供的结构,使这些结论能够继续被检查、补充和推翻。下一位接手者可以沿着证据继续工作。


资料与版本说明

本文参考 REA README、当前源码及配套架构技术报告整理。源码基线为4353089c670070ef918f88f7b131ed240feb83dd,版本字段为6.4.0,核对日期为 2026 年 10 月 11 日。前期源码分析中的架构守卫检查已通过;本文没有重新运行全部单元测试、真实逆向引擎或性能基准。软件能力描述、项目官方案例与本文提出的应用思路已分别注明。

三张配图根据源码关系与正文中的概念示例设计,使用 imagegen 生成,属于技术示意图,不是实际运行截图、观测数据或完整能力清单。软件生态影响部分属于工程分析,不代表已测得的行业影响或对具体项目的合规结论。本文沿用 LibreCube、Typesense 参考文章的技术介绍结构,事实依据来自 REA 本身及相关上游资料。


参考文献
  1. REA contributors. (2026a).REA: Reverse Engineer Anything—README(源码快照4353089c). GitHub.项目说明

  2. REA contributors. (2026b).Binary session composition and provider selection(源码). GitHub.共享组合入口;引擎选择器;snapshot 规则

  3. REA contributors. (2026c).JavaScript semantic analysis(源码及回归测试). GitHub.语义分析入口;引用生命周期测试;primitive 归一化;资源预算

  4. National Security Agency. (2026, January 16).P-code reference manual. Ghidra.官方手册

  5. REA contributors. (2026d).Ghidra bridge and native value tracing(源码). GitHub.Java bridge;跨函数值流

  6. REA contributors. (2026e).Evidence and evidence ledger(源码). GitHub.Evidence 模型;会话证据账本

  7. REA contributors. (2026f).JavaScript static/runtime reconciliation. GitHub.关联规则与适用范围

  8. REA contributors. (2026g).Reconstruction obligation ledgers. GitHub.重建义务指南;证明边界的兼容规则

  9. REA contributors. (2026h).Process trace specification and comparison(源码). GitHub.轨迹规格;轨迹比较

  10. REA contributors. (2026i).Owned provider processes and Windows process control(源码). GitHub.进程基础设施;Windows 原生实现

  11. REA Project. (n.d.).How Notion copies text and HTML. Retrieved October 11, 2026, fromREA 官方案例

  12. National Institute of Standards and Technology. (2022).Secure Software Development Framework (SSDF) Version 1.1(NIST SP 800-218).官方发布页

  13. Cybersecurity and Infrastructure Security Agency. (n.d.).SBOM resources library. Retrieved October 11, 2026, fromCISA 资料库

  14. SPDX. (n.d.).Handling license info. Retrieved October 11, 2026, fromSPDX 指南

  15. World Intellectual Property Organization. (n.d.).Frequently asked questions: Copyright. Retrieved October 11, 2026, fromWIPO 版权问答

来源:gnss.ac.cn《REA:让软件逆向有据可查》

相关学习资料