REA ASAR完整性校验:如何检测被篡改的Electron应用包(完整指南)
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
REA 是一款开源的逆向工程 Agent 工具,内置 ASAR 完整性校验能力,可以逐条核对 Electron 应用包中每个文件的 SHA-256 声明值与实际字节,帮你快速发现被篡改、注入或替换过的app.asar应用包,并且全程不执行任何应用代码,安全、快速、免费。
为什么 Electron 应用包容易被篡改?
Electron 应用(如大量桌面客户端)会把全部前端代码、资源文件打成一个ASAR 归档(通常是app.asar)。由于 ASAR 本质上只是"文件清单 + 拼接的字节流",攻击者只需修改其中一个 JS 文件的几个字节,就能悄悄注入恶意逻辑,而用户肉眼完全看不出变化。
常见的篡改场景有 3 类:
- 清单未动、内容被改:文件头声明的 SHA-256 还在,但实际字节已被替换;
- 解包文件被换:ASAR 外的
.asar.unpacked伴生文件(常存放原生插件.node)被调包; - 包体整体被重打包:归档大小或头部结构发生变化。
要可靠地检测这些问题,核心思路只有一条:把"声明的哈希"和"实际的哈希"逐条比对。这正是 REA 的 ASAR 完整性校验所做的事情。
REA 如何执行 ASAR 完整性校验
REA 的 ASAR 读取器 AsarArtifactReader.ts 在校验过程中做了多层防线,普通用户无需了解细节,但知道原理会更安心:
逐条读取 Electron 完整性元数据ASAR 头部的文件元数据中,每个文件条目可携带
integrity字段(算法为 SHA256)。REA 会在清单阶段提取每个条目的声明哈希AsarArtifactReader.ts。按声明范围精确读取,边读边算哈希读取任何文件前,REA 会先校验该条目在归档中的偏移和长度是否越界,再按字节范围流式读取并计算实际 SHA-256,最后与声明值比对。任何不一致都会被标记为
integrity类型失败,并给出逻辑路径、声明值、计算值 AsarArtifactReader.ts。unpacked 伴生文件同样受检很多应用把原生模块放在
<archive>.unpacked目录。REA 明确规定:unpacked 只是存放方式,不是免检通行证——这些伴生字节同样要和归档声明的完整性值做哈希比对,且读取时会防符号链接逃逸 AsarArtifactReader.ts。防止"边读边被换"的时间差攻击打开文件后 REA 会再次检查容器大小和文件 inode,如果在清单与读取之间包体被二次替换,会被判定为完整性失败,而不是静默通过 AsarArtifactReader.ts。
新手一键操作步骤:3 步完成检测
第 1 步:安装 REA
先按官方安装文档完成环境配置(含 Hopper / Ghidra 等可选引擎):
- 安装说明:installation.md
- CLI 总览:cli.md
第 2 步:对 ASAR 包执行分析
拿到目标应用目录后,把其中的app.asar(或解包目录)直接交给 REA:
rea analyze /absolute/path/to/apps/app.asar --json通用rea analyze命令会自动为.asar文件选择 JavaScript 应用静态分析工作流,返回应用图、Electron 边界摘要以及完整性校验结果,无需启动浏览器或任何 Electron 进程。
也可以用专用命令显式指定目标:
rea analyze-javascript-application /absolute/path/to/apps/app.asar --json详见:javascript-artifact-reconstruction.md
第 3 步:读懂完整性结论
当某个文件声明值与实际值不符时,结果中会包含:
- 逻辑路径:包内哪个文件出了问题;
- 声明 SHA-256 vs 计算 SHA-256:两个哈希值并列呈现;
- 是否 unpacked 条目:判断问题出在包内还是伴生目录。
默认策略下,任何不一致都会直接返回失败。如果你希望"记录不一致但继续分析其余文件",可以在请求中显式选择integrity_policy: record-and-continue,这样已校验通过的文件仍可继续分析,而篡改记录不会丢失(见 mcp-contracts.md 的完整性处理章节)。
两种典型结果怎么看?
| 结果状态 | 含义 | 建议动作 |
|---|---|---|
| 全部一致 | 包体与声明的完整性元数据相符,无篡改证据 | 存档本次 SHA-256 作为基线 |
出现integrity失败 | 声明哈希与实际字节矛盾,包被改动过 | 定位逻辑路径,对照官方渠道重新获取安装包 |
hash_status: unavailable | 声明了 unpacked 伴生文件但字节缺失 | 缺失字节被记为 unknown,而非"已验证",需补齐文件再验 |
值得注意的细节:伴生文件缺失时,REA 会继续分析包内嵌入的 JavaScript,同时把缺失的原生/资源字节如实记为未知项——既不假装通过,也不假装文件不存在(见 javascript-artifact-reconstruction.md)。
进阶:用源码理解校验细节
如果你对实现感兴趣,以下模块值得浏览:
- ASAR 读取与哈希校验核心:AsarArtifactReader.ts
- 流式读取时的字节数与哈希验证:AsarEntryStream.ts
- 清单扫描中的完整性矛盾记录:scanCanonical.ts
- 完整性策略(fail / record-and-continue):policy.ts
常见问题 FAQ
问:校验需要运行目标应用吗?不需要。整个流程是纯静态的:读字节、算哈希、比对照明。REA 的重建路径从不使用eval、Function或 DOM,也不会执行应用的引导代码,对可疑样本非常安全。
问:普通用户没有哈希工具,能用 REA 吗?可以。一条rea analyze命令即可完成,结果里直接给出声明值与实际值的差异,不需要你手动算 SHA-256。
问:结果可以保存和对比吗?可以。CLI 支持--json输出与证据导入/导出(rea evidence-import/rea compare),适合把"官方包"和"可疑包"的结果并列对比,详见 cli.md。
总结
检测被篡改的 Electron 应用包,本质上就是"声明哈希 vs 实际哈希"的逐条核对。REA 的 ASAR 完整性校验把这件事做成了开箱即用的一步命令:逐条校验包内文件与.asar.unpacked伴生文件、防止读取期间的二次替换、缺失文件如实标记为未知。无论你是安全研究员还是只是想确认下载的安装包没被动手脚,都值得一试。
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考