ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

不运行App也能逆向Electron:REA JavaScript应用图静态分析完全指南

不运行App也能逆向Electron:REA JavaScript应用图静态分析完全指南

【免费下载链接】rea

Reverse engineer anything with agents, from app behavior down to native binaries.

项目地址:https://gitcode.com/gh_mirrors/rea3/rea
点击查看免费下载

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。

⏱️ 确实需要运行时行为时:静态/运行时对账

静态图不执行恢复出的代码。当运行时语义变得重要时,可以走两条互补路径:

  1. 被动观察:通过 CDP 端点检查已打开的 Electronfile://页面(rea list-electron-targets/rea inspect-electron-page),不导航、不点击、不执行渲染进程代码;
  2. 运行时对账: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.

项目地址:https://gitcode.com/gh_mirrors/rea3/rea
点击查看免费下载

相关推荐

上一篇:卸掉PyTorch后,Mac居然能在7毫秒内“做一次决定”?这个开源AI火了
下一篇:2B 模型开始自己「干活」了:端侧通用 Agent 元年启动信号

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表