尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

如何绕过Electron的ASAR完整性校验?Wand-Enhancer原生C代理DLL内存改写Fuses详解

如何绕过Electron的ASAR完整性校验?Wand-Enhancer原生C代理DLL内存改写Fuses详解 如何绕过Electron的ASAR完整性校验Wand-Enhancer原生C代理DLL内存改写Fuses详解【免费下载链接】Wand-EnhancerAdvanced UX and interoperability extension for Wand (WeMod) app项目地址: https://gitcode.com/GitHub_Trending/we/Wand-EnhancerWand-Enhancer 是一款面向 Electron 应用 WandWeMod的开源增强工具本文详解它如何绕过 Electron 的 ASAR 完整性校验一边用 C# 重写 asar 包的 SHA256 哈希一边靠一个原生 C 编写的version.dll代理 DLL在进程启动瞬间把 Electron Fuses 里的 ASAR 校验位从内存中抹掉。全文从原理讲到代码新手也能看懂。⚡ 先搞懂ASAR 完整性校验是什么Electron 应用通常把整个前端代码打包进一个app.asar文件。为了防止用户篡改包内内容新版 Electron 引入了两层防线机制作用校验位置ASAR Integrity对 asar 内每个文件计算 SHA256 哈希整文件 每 4MB 分块启动时逐一比对应用主进程Electron Fuses烧录在可执行文件里的 8 个开关位其中FUSE_ASAR_INTEGRITY_VALIDATION第 4 位控制是否执行上面的哈希校验Electron 可执行文件的内存镜像只要 Fuses 里 ASAR 校验位是开启状态你往app.asar里塞任何文件、改任何字节哈希对不上应用就会拒绝启动——这就是很多 mod 工具卡住的地方。️ Wand-Enhancer 的双管齐下思路Wand-Enhancer 的补丁流水线见 Enhancer.cs 的Patch()方法同时解决两个问题重写 asar把原始app.asar备份、解包注入远程 Web 面板等资源再重新打包。重新打包必然破坏原有哈希于是用 IntegrityHelper.cs 按 4MB 分块重算整套 SHA256 完整性数据让包自洽熔断校验开关即使哈希正确Fuses 开关仍会阻止一切非常规加载。这一步交给原生 C 代理 DLL 在内存里完成不修改任何磁盘文件。 代理 DLL 的核心 trick伪装成系统库 version.dll整个 trick 的入口在 Enhancer.cs 的AttachProxyDll()补丁器把内嵌资源解压到Wand 安装目录下的version.dll。为什么叫这个名字Windows 的 DLL 搜索顺序是应用程序目录优先而version.dll是几乎所有程序都会加载的系统库。于是 Electron 主进程加载的其实是 Wand-Enhancer 编译的代理版本真正的系统库则被代理转发。代理 DLL 由三个文件组成位于tools/asar-fuses-bypass/library.def声明LIBRARY VERSION对外导出 20 个GetFileVersionInfo*/VerQueryValue*等版本 APIlibrary.cDllMain在DLL_PROCESS_ATTACH时先把真正的C:\Windows\System32\version.dll加载进来所有导出函数只是转发器32 位甚至用__declspec(naked)jmp实现零开销跳板业务方完全无感fuses.c真正干活的disable_asar_integrity()在转发器就位后调用一次。对上层来说这 20 个版本函数照常工作只有校验开关被悄悄摘除了。 内存改写 Fuses 的 5 个步骤fuses.c 的disable_asar_integrity()是整个项目最精妙的 190 行 C 代码流程如下定位模块基址GetModuleHandleA(NULL)拿到主程序在内存中的基址解析 DOS/NT 头确认 PE 有效扫描 32 字节哨兵SentinelFuses 数据块FuseWire前面有一段 32 字节的魔数签名代码按 8 字节对齐逐块比对 4 个 64 位常量64 位或 8 个 32 位常量32 位并先试偏移 0、再试偏移 4兼容不同 Electron 版本的对齐差异校验版本与长度FuseWire结构含version和wire_length字段仅支持version 1若wire_length 5不够 8 个开关位则安全跳过找到第 4 位开关按枚举FUSE_ASAR_INTEGRITY_VALIDATION 4索引到目标字节状态取值为0关/1开/r移除若已是r说明已打过补丁幂等返回成功VirtualProtect 改写内存页默认只读先VirtualProtect临时放开为PAGE_READWRITE把字节写成r再还原保护。一次成功只改一个字节且只发生在进程内存里——磁盘上的 exe 一个比特都不动所以任何文件哈希/签名扫描都无法察觉。 自己编译运行含环境清单如果你想验证整套流程克隆仓库如需要git clone https://gitcode.com/GitHub_Trending/we/Wand-Enhancer准备环境CMake、MSVCVisual Studio 2022 或 Build Tools、Node.js pnpm、.NET Framework 4.8 开发包运行build.cmd脚本会用 CMakeLists.txt 编译代理 DLL注意add_library(version SHARED ...)直接产出无lib前缀的version.dll并静态链接 CRT再构建 WPF 主程序运行WandEnhancer.exe勾选补丁类型界面会自动完成备份 → 解包 → 打补丁 → 重算完整性哈希 → 重打包 → 落地version.dll日志里看到Proxy DLL attached即全部成功。 小提示fuses.c里ENABLE_LOGGING默认关闭调试时可置 1会在 DLL 旁生成同名.log记录哨兵地址与改写结果。❓ 常见疑问为什么不直接改磁盘上的 Fuses 字节那样会破坏 exe 哈希且每个 Electron 版本偏移都不同极易失效内存方案与版本无关靠哨兵签名自适应。只重算哈希、不动 Fuses 行不行不行——FuseWire里 ASAR 校验位开启时Electron 仍会强制比对任何微小差异都会导致启动失败所以两处必须同时处理。撤销怎么办删除version.dll再用备份还原app.asar与app.asar.unpacked即可补丁器每次运行前会自动做备份/还原。✅ 总结层面手段关键代码磁盘层解包-注入-重打包 SHA256 完整性重算AsarSharp/Integrity/IntegrityHelper.cs内存层代理version.dll扫描 Fuses 哨兵1 字节熔断tools/asar-fuses-bypass/fuses.c兼容层20 个版本 API 全量转发业务零感知tools/asar-fuses-bypass/library.c这套重算哈希 内存熔断的组合展示了绕过 Electron ASAR 完整性校验的完整工程实践不改磁盘、可自适应、可逆、且对所有版本 API 保持透明。【免费下载链接】Wand-EnhancerAdvanced UX and interoperability extension for Wand (WeMod) app项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表