☰
如何检测被篡改的 Electron 应用包:用 REA 的 ASAR 完整性校验一条命令出结论
2026/10/18 1:39:41 网站建设 项目流程

如何检测被篡改的 Electron 应用包:用 REA 的 ASAR 完整性校验一条命令出结论

【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea

从非官方渠道装回来的桌面应用,怎么确认没被动手脚?对 Electron 应用来说,答案藏在app.asar里。REA 的 ASAR 完整性校验会逐条核对包内每个文件声明的 SHA-256 与实际计算值,全程静态、不运行目标代码,一条命令即可出结论。

🛡️ 包是怎么被篡改的:攻击者的三种手法

Electron 应用会把全部前端代码和资源打进一个 ASAR 归档,而归档本身只是"文件清单 + 拼接的字节流"。攻击者不需要重新发布应用,三种手法都能悄悄植入恶意逻辑:

  • 只改内容,不动清单:修改归档内某个 JS 文件的字节,但头部元数据里记录的声明哈希原样保留,肉眼和文件大小都察觉不到差异;
  • 换掉 unpacked 伴生文件:归档外的<archive>.unpacked目录存放原生插件(.node文件),把这些伴生文件直接调包,运行时加载的就是被替换的二进制;
  • 整包重打包:改动归档结构或大小后重新打包,头部长度和条目偏移随之变化。

三种手法的共同点:包内的"声明"和"实际"出现了偏差。只要把两者逐条对齐,篡改就无处藏身。

⚖️ 判定原理:声明 SHA-256 与实际字节逐条比对

ASAR 头部的文件元数据里,每个文件条目可以携带integrity字段(SHA256 算法),这就是"声明值"。校验时对每个条目按归档中记录的偏移和长度做字节范围读取,边读边计算实际 SHA-256,再与声明值比对。声明值与实际值一致则通过,任何一条不一致都会被标记为integrity类型失败,并给出逻辑路径、声明值与计算值。整个过程只做读字节、算哈希、比对,属于纯静态分析。

如何一条命令验证 app.asar 完整性

先按官方文档完成环境配置(含 Hopper / Ghidra 等可选引擎):安装说明

npx rea-agents setup

拿到目标应用目录后,把其中的app.asar直接交给 REA。通用rea analyze命令会自动为.asar文件选择 JavaScript 应用静态分析工作流:

rea analyze /absolute/path/to/app.asar --json

也可以用专用命令显式指定目标,并返回应用图、Electron 边界摘要和完整性校验结果:

rea analyze-javascript-application /absolute/path/to/app.asar --json

两条路线都不需要浏览器或 Electron 进程参与,详见 CLI 文档 与 JavaScript 工件重建文档。

📊 结果判读:三种状态分别意味着什么

结果状态含义建议动作
全部一致包体与各条目的声明完整性元数据相符,无篡改证据将本次 SHA-256 结果存档,作为该版本的基线
出现integrity失败某条目的声明哈希与实际字节矛盾,包被改动过按逻辑路径定位文件,从官方渠道重新获取安装包后复验
hash_status: unavailable声明了 unpacked 伴生文件但字节缺失缺失字节按未知记录,既不判"通过"也不判"不存在",补齐伴生目录后再验

边界情况与工程细节

  • unpacked 目录没有豁免权🔍:.asar.unpacked只是存放方式,不是免检通行证。伴生的.node等字节同样与归档声明的完整性值做哈希比对,读取时还阻止符号链接逃逸出预期路径(AsarArtifactReader.ts)。
  • 防止读取期间被二次替换:打开文件后 REA 会复核容器大小与文件 inode;如果在清单阶段与读取阶段之间包体发生了替换,判定为完整性失败,而不是静默放过。
  • 缺失伴生文件的处理:声明了 unpacked 条目但字节缺失时,这些字节如实记为 unknown,包内嵌入的 JavaScript 仍可继续分析,结果不会伪装成"已验证"。
  • 两种完整性策略:默认fail,任何不一致立即失败;调查需要"先看差异、再分析其余文件"时,可传--integrity-policy record-and-continue,篡改记录保留在integrity_contradictions中,已校验通过的条目继续分析。策略语义见 MCP 完整性处理章节。

流式读取的字节数与哈希核算在 AsarEntryStream.ts,清单阶段记录完整性矛盾在 scanCanonical.ts。

FAQ

校验过程会把可疑应用跑起来吗?不会。整个流程是纯静态的:读字节、算哈希、比对声明值,重建路径不使用eval、Function或 DOM,也不执行应用的引导代码。

不装额外的哈希工具,能直接看到差异吗?可以。一条rea analyze命令完成全部比对,结果里直接并列给出声明 SHA-256 与实际计算值,无需手动算哈希。

官方包和可疑包的结果能放在一起比吗?能。用rea evidence-import导入证据记录、rea compare对比两个结果,适合把基线包与可疑包逐条对照。

某个文件校验失败后,其余文件还能分析吗?可以。加上--integrity-policy record-and-continue,不一致条目被隔离记录,通过校验的条目继续分析,且该结果的应用图覆盖度会标记为 partial。

把校验结果变成可复用的基线

对官方渠道的包跑一次,把--json结果存档作为该版本基线;之后任何来源的同类包再跑一次,用rea compare并排对比,差异一目了然。声明值与实际值逐条核对这件事,从此只是一条命令的事。

【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询