【免费下载链接】rea
Reverse engineer anything with agents, from app behavior down to native binaries.
Electron 逆向不必再"先把 App 跑起来"。开源项目REA(Reverse Engineer Anything)提供完整的JavaScript 应用图静态分析能力:直接读取本地 ASAR 压缩包或解压后的应用目录,不执行任何应用代码,就能重建模块结构、IPC 通道、contextBridge API 的完整图谱,并且只依赖 Node.js,无需 Hopper、Ghidra 等反编译引擎。
🚀 为什么"不运行"是安全的
很多逆向工具需要 hook 进程、注入脚本或观察运行时行为,这对分析者既是门槛也是风险。REA 的 JavaScript 应用重建走的是纯静态路线:
- 零执行:整个重建路径不使用
eval、Function、vm.runInContext,不接触 DOM,不触发任何 bundle 引导代码。测试套件里甚至专门放了一个"一旦执行就会抛错"的 Webpack fixture,验证重建能恢复模块工厂而不触发任何副作用; - 零依赖引擎:静态 JavaScript/Electron 分析只需要 Node/npm 运行时(Node.js 22.19+ / 24.11+ / 26+),不需要任何反编译引擎;
- 本地运行:分析在你自己的机器上完成,应用不会被上传到任何托管服务。
相关设计见官方文档 javascript-artifact-reconstruction.md,实现位于 src/application/javascript/JavaScriptApplicationService.ts。
⚡ 快速上手:一条命令开始 Electron 逆向分析
第 1 步:运行分析
npx -y rea-agents@latest analyze-javascript-application /绝对路径/你的app --json把路径换成你的目标,例如解压后的 Electron 目录或app.asar文件。Windows 下形如"D:/apps/example"。
也可以用通用入口rea analyze,它会自动为目录和.asar路径选择静态 JavaScript 提供者:
rea analyze /绝对路径/releases/app.asar --json第 2 步(可选):接入 AI Agent
如果你想让 AI 编程助手(Claude Code、Cursor、Codex 等)直接用这套工具做完整调查,运行一次引导式配置即可:
npx rea-agents setup它会显示计划、征询批准后才修改配置。静态 JavaScript 分析本身不需要这一步。详细安装要求见 installation.md。
🗺️ 一张图谱能看到什么:7 类节点 + 12 种关系
REA 的核心产出是一张JavaScript Application Graph(JavaScript 应用图)——一个跨层、带证据的数据契约,把"打包字节、JS 结构、Electron 进程边界、运行时观察、原生插件"统一建模。
节点词表(应用实体)
| 类别 | 示例 |
|---|---|
| 包与工件 | package、installer、artifact、ASAR entry |
| Electron 进程代码 | main、preload、renderer、utility process |
| JS 资产 | asset、chunk、module |
| 源代码恢复 | source map、original source module |
| 窗口与框架 | BrowserWindow、frame、target |
| 进程间通信 | contextBridge API、IPC channel、IPC handler |
| 运行与网络 | worker、service worker、endpoint、storage |
| 原生扩展 | native add-on、native export |
关系词表(有向、带证据)
contains、loads、imports、maps_to、exposes、sends、invokes、handles、calls、persists_to、observed_as、changed_from
举个真实语料里的例子,一条链路就能说清楚 Electron 的通信结构:
package contains app.asar main asset contains BrowserWindow BrowserWindow loads preload role preload asset exposes contextBridge API preload asset invokes uniquely matched main-process IPC handler main-process IPC handler handles literal IPC channel JavaScript asset imports requested native binding也就是说:从渲染层调用,一路追到主进程处理器,再追到原生绑定,全部来自静态推断,且每一步都标注了它是"观察"还是"推断"。
静态语法解析还会恢复package.json元数据、Webpack/Rspack chunk 注册、require/import调用、路由、网络端点、存储观察、source map 原始源名、webPreferences配置、utility-process 入口和.node原生绑定请求。
🔍 证据体系:每个结论都"说得清"
这张图最值得新手关注的不是"能看到什么",而是"怎么证明"。图中每个观察和每条边都携带:
- Authority(权威来源):artifact 字节、AST 分析、静态关系推断、被动 CDP 运行时、原生分析、用户断言等;
- 认识状态:
observed(观察到的)/inferred(推断的)/unknown(未知)/unavailable(不可用); - 置信度:exact / high / medium / low / unknown,与状态独立;
- 位置与摘要:可操作的文件位置 + 内容寻址的 artifact 摘要。
几个关键规则帮你避免被"过度自信"的结论误导:
| 规则 | 含义 |
|---|---|
| AST 观察 ≠ 运行时事实 | 静态语法不证明该路径一定被执行 |
| 动态 IPC 永不配对 | 动态通道、多候选处理器会标记为 ambiguous,而非硬连线 |
| 缺失 ≠ 不存在 | unknown/unavailable显式记录,不会把"没看到"当成"没有" |
| exact 置信度只给观察 | 推断类事实最高只能到 high 或更低 |
实现细节可参考 javascript-application-graph.md 与 src/domain/javascript/javascriptApplicationGraph.ts。
🧭 进阶 5 步工作流:追踪功能、对比版本
拿到应用图 Evidence 后,REA 提供 5 个跨层工作流(CLI 与 MCP 同名,CLI 用连字符):
| 命令 | 用途 |
|---|---|
rea trace-application-feature | 从字面种子(路由/字符串/API/IPC 通道/模块/原生导出)出发,返回完整可达子图 |
rea trace-javascript-semantic | 语义关系追踪:变量来源、调用者、数据流、Promise 链 |
rea compare-application-versions | 对比两个版本的应用图,输出 added/removed/changed 明细 |
rea compare-source-to-bundle | 历史源码 vs 打包产物的映射(modified/split/merged 等) |
rea compare-javascript-export-shapes | 对比某模块导出的返回形状 |
一个典型的"字面量追踪"两步流程:
rea analyze-javascript-application /绝对路径/app --json > application-evidence.json # 用该 Evidence 构造输入后: rea trace-application-feature ./trace-input.json --json注意两点边界:追踪只接受精确字面匹配(正则和可执行谓词一律拒绝),且语义解析 ≠ 路径已执行——resolved表示静态目标唯一,不代表运行时跑过。完整工作流说明见 javascript-application-workflows.md。
⏱️ 确实需要运行时行为时:静态/运行时对账
静态图不执行恢复出的代码。当运行时语义变得重要时,可以走两条互补路径:
- 被动观察:通过 CDP 端点检查已打开的 Electron
file://页面(rea list-electron-targets/rea inspect-electron-page),不导航、不点击、不执行渲染进程代码; - 运行时对账:
rea reconcile-javascript-runtime把已有的静态 Evidence 与被动捕获 Evidence 做交叉推断,生成observed_as边——但它不重跑静态分析,也不会隐式启动或切换任何原生分析引擎。
静态事实、运行时事实、跨层推断三类权威始终分开标注,相关性不会被包装成因果性。
📚 源码与文档索引
| 资料 | 路径 |
|---|---|
| 项目说明(Quick start / 工具目录) | README.md |
| JavaScript 应用图设计 | docs/javascript-application-graph.md |
| 工件重建与静态分析 | docs/javascript-artifact-reconstruction.md |
| 跨层工作流 | docs/javascript-application-workflows.md |
| 应用图领域实现 | src/domain/javascript/javascriptApplicationGraph.ts |
| 应用分析服务 | src/application/javascript/JavaScriptApplicationService.ts |
| Electron 静态分析(IPC/窗口/原生) | src/domain/javascript/electronStaticAnalysisIpc.ts |
小结:REA 把 Electron 逆向从"先运行、再抓包、再猜结构"变成了"读文件、建图谱、带证据下结论"。一条analyze-javascript-application命令,你拿到的不只是一份清单,而是一张每个节点都能回答"凭什么这么说"的 JavaScript 应用图——这对刚接触逆向的新手,可能是理解 Electron 架构最快的方式。
【免费下载链接】rea
Reverse engineer anything with agents, from app behavior down to native binaries.
相关推荐
用 REA 逆向第一个应用:Electron 与 JavaScript 静态分析和模块图谱完整入门指南
用 REA 逆向第一个应用:Electron 与 JavaScript 静态分析和模块图谱完整入门指南 想逆向一个没有源码的桌面应用,却不知道从哪里下手?本教程
逆向工程MCP 服务开发工具静态分析AI 技能/插件REA 的 .NET 托管代码静态分析:不加载、不执行 PE/CLI,也能回答七个逆向问题
REA 的 .NET 托管代码静态分析:不加载、不执行 PE/CLI,也能回答七个逆向问题 本文基于 REA 仓库中的 docs/managed code an
逆向工程MCP 服务AI 技能Path of Building PoE2:流放之路 2 离线构建规划器,5 分钟规划第一个 Build
Path of Building PoE2:流放之路 2 离线构建规划器,5 分钟规划第一个 Build 新号建完,你点开天赋树:几百个节点沿着一圈圈轨道向外排
桌面应用
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考