尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

如何安全修补Wand的app.asar?Wand-Enhancer备份-解包-正则补丁-重打包流水线全拆解

如何安全修补Wand的app.asar?Wand-Enhancer备份-解包-正则补丁-重打包流水线全拆解 如何安全修补Wand的app.asarWand-Enhancer备份-解包-正则补丁-重打包流水线全拆解【免费下载链接】Wand-EnhancerAdvanced UX and interoperability extension for Wand (WeMod) app项目地址: https://gitcode.com/GitHub_Trending/we/Wand-EnhancerWand-Enhancer是一个开源的本地增强工具它通过「备份 → 解包 → 正则补丁 → 重打包」四步流水线安全地修补 WandWeMod 新品牌客户端的app.asar文件。全文将完整拆解这条流水线的每一步实现原理让你既能放心使用也能看懂它为什么不会把客户端改坏。为什么「备份」是修补 app.asar 的第一步直接改写压缩打包后的 Electron 资源文件一旦失败很难回退。Wand-Enhancer 的做法是首次补丁前把原始的app.asar原样复制为app.asar.backup并连同app.asar.unpacked一起备份。核心逻辑在WandEnhancer/Core/Enhancer.cs的Patch()方法中首次运行创建备份然后才动手解包重复运行发现备份已存在会先把原始app.asar从备份恢复再从干净状态重新打补丁避免补丁叠加UI 防误操作主窗口检测到备份文件存在时会提示已打过补丁并禁用 Patch 按钮见WandEnhancer/View/MainWindow/MainWindowVm.cs防止新手反复修补把版本搞乱。这就是安全二字的落地方式——每次补丁都从出厂状态开始。解包阶段AsarSharp 如何解开 app.asarapp.asar本质是一个「JSON 文件头 拼接的原始文件数据」结构。项目内置的 AsarSharp 库AsarSharp/AsarExtractor.cs负责解包几个值得注意的工程细节打开单个文件句柄顺序定位读取而不是每个文件开一次流1 MB 缓冲批量拷贝速度远快于逐文件打开内置zip-slip 路径穿越防护恶意构造的../条目会被拦截不能把文件写到目标目录之外头中标记为unpacked的文件不内嵌在包内改从旁边的app.asar.unpacked目录读取与 Electron 官方行为保持一致。正则补丁如何在压缩混淆的 JS 里精准定位Wand 的前端代码被压缩成一两个巨大的 bundleindex.js、app-*.bundle.js变量名全是a、b、e这种混淆短名。Wand-Enhancer 的补丁引擎WandEnhancer/Core/EnhancerConfig.cs中的PatchEntry定义用三层漏斗来保证精准SearchHints 预筛先用一两个稳定字符串如接口路径/v3/account快速判断这个文件可能包含目标避免对整个大文件做昂贵正则Target 正则锁定用带命名捕获组的正则匹配整个目标函数并且默认要求唯一匹配SingleMatch。若同一个函数匹配到多处说明客户端版本结构变了工具会直接报版本不受支持而不是盲改——这是防止误伤的关键设计Resolver 自适应混淆后的私有字段名如this.#n89每次发版都会变PatchFactory/Resolver会从匹配结果里动态解析出真实字段名再拼进补丁代码所以补丁不需要针对每个版本号硬编码。如果某个补丁类型到最后仍未命中remainingPatches非空工具会明确报版本可能不受支持并停止而不是留下半成品。重打包细节完整性占位符与 unpack 规则打回app.asar由AsarSharp/AsarCreator.cs完成两个细节直接影响改完之后 Wand 还认不认这个包unpacked 规则重打包时匹配^static\unpacked.*$路径的文件会被移回app.asar.unpacked目录而非写进包内这与原生包的文件布局一致完整性占位符Electron 新版会对 asar 做 sha256 完整性校验打包时为每个文件生成校验占位符AsarSharp/Integrity/IntegrityHelper.cs保证包结构本身能通过格式校验。最后一道坎绕过 ASAR 完整性校验格式正确还不够——Wand 主程序可能还启用了 Electron 的ASAR Integrity Validation fuse它会拒绝加载被修改过的app.asar。项目的解法是tools/asar-fuses-bypass/fuses.c中的原生辅助代码在内存中扫描 Electron 主程序的 fuse 哨兵结构把ASAR_INTEGRITY_VALIDATION这一项的状态改写为rremoved。打包时这段代码被编入一个version.dll代理库Enhancer.cs的AttachProxyDll放到 Wand 安装目录启动时优先加载并替主程序拔保险丝。整个过程不联网、不改服务端逻辑全部是本地客户端层面的调整源码完全开放可审计。如何回退还原补丁后的 Wand 客户端后悔药也在流水线里备好了主窗口的还原操作MainWindowVm.cs的OnBackupRestoring会做三件事先尝试独占打开备份文件若被占用则提示请关闭 Wand 后重试防止文件锁导致还原不完整删除补丁时生成的version.dll用app.asar.backup覆盖回app.asar然后删除备份恢复出厂状态。⚠️ 唯一要记住的纪律不要手动删除app.asar.backup它是唯一的回退依据。快速上手构建并运行 Wand-Enhancer项目官方不发布预编译可执行文件防假冒推荐两种方式获得程序云端构建Fork 仓库后在 Actions 里运行Build executable工作流完成后下载产物中的WandEnhancer.exe本地构建克隆仓库git clone https://gitcode.com/GitHub_Trending/we/Wand-Enhancer装好 CMake、Node.js pnpm、VS2022 与 .NET Framework 4.8 工具后执行build.cmd一次性完成前端构建、原生辅助库编译和 WPF 解决方案编译详见 README.md 的 Build from source 一节。运行后选定 Wand 安装目录通常在AppData\Local\WeMod下在补丁弹窗里勾选需要的增强项Pro 激活、F12 开发者工具、禁用更新、远程网页面板点击 Start日志窗口会逐条打印「Creating backup → Extracting → Patch applied → Done」全流程结束即可看到增强后的客户端。【免费下载链接】Wand-EnhancerAdvanced UX and interoperability extension for Wand (WeMod) app项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表