Wand-Enhancer 完整指南:WeMod 本地补丁的原理、构建流程与失效回退
【免费下载链接】Wand-EnhancerAdvanced UX and interoperability extension for Wand (WeMod) app项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer
Wand-Enhancer 是一个开源的 WeMod 增强工具,做法是对 WeMod 安装目录内的app.asar做正则替换,属于典型的 WeMod 本地补丁:实现 WeMod 禁用自动更新、本地解锁 Pro 显示、F12 打开 DevTools、WeMod 远程面板等能力。全部改动只发生在你本机的 WeMod 安装目录里,代码可审计;运行过程不发起任何外网请求,唯一的例外是远程面板,它只在局域网内监听。
工作原理:静态改文件,外加三道护栏
改一个 Electron 客户端大致有两条路:直接改磁盘上的包(静态),或者在进程跑起来之后注入代码(运行时)。Wand-Enhancer 选了前者,并配了一个小垫片。两者取舍如下:
- 生效时机:静态方式在每次启动前就已就位;运行时方式需要挂到已运行的进程上。
- 可恢复性:静态方式删掉备份即可还原;运行时方式依赖卸载注入器。
- 版本稳定性:静态方式的正则锚点会随 WeMod 更新漂移,但 patcher 能明确报告失配;运行时注入点相对固定,一旦打偏则风险更高。
"敢改"的底气来自三道护栏:
- 自动备份。首次打补丁前把原始包复制为
app.asar.backup;之后每次重打都先从这个备份恢复出干净状态再动手,补丁因此不会层层叠加。 - 失配即报错。正则锚点全部从压缩后的代码里动态解析,对不上时直接抛出
The version may not be supported并中止,不会悄悄写坏原文件。核心逻辑在 WandEnhancer/Core/Enhancer.cs。 - 垫片职责单一。
tools/asar-fuses-bypass/里编译出的 DLL 只做一件事:放在 WeMod 可执行文件旁、命名为version.dll,让 Electron 的 asar 完整性 fuse 检查放行改过的包。它不是代码注入器。
完整管线可以归纳为四步:
- 用 AsarSharp 把
resources/app.asar解包到app.asar.unpacked/; - 对解出的
app-*.bundle.js和index.js做正则替换,并写入 remote-panel 目录; - 重新打包,覆盖原位置的
app.asar; - 把
version.dll写到 WeMod 根目录。
动手流程:从克隆到补丁生效
目前拿不到官方预编译的 exe,稳妥路径是 fork 仓库后跑 CI。只想在 Windows 上本地构建的话:
构建依赖与编译步骤
git clone https://gitcode.com/GitHub_Trending/we/Wand-Enhancer cd Wand-Enhancer build.cmd # 依赖:CMake、Node.js + pnpm、VS2022、.NET Framework 4.8脚本按顺序完成:装 web-panel 依赖、打前端、用 CMake 编译原生 DLL、还原 NuGet 包、编译 WPF 解决方案。
首次运行:定位安装目录
第一次运行 WandEnhancer.exe,它会尝试自动找到 WeMod 安装目录:查注册表、扫常见路径,甚至从正在运行的进程反查;只要目录里存在app-x.x.x\resources结构即可通过校验。没找到的话,手动粘贴路径。
勾选开关并确认日志
在补丁弹窗里勾选需要的项(可多选),然后盯日志区:依次出现Extracting app.asar、每条补丁的Patch applied,最后一行是Done!。重启 WeMod 生效,顺利的话全程不到一分钟。
五个补丁开关速查
| 开关 | 做了什么 | 适合谁 | 注意 |
|---|---|---|---|
| ActivatePro | 把账号接口的本地返回值改成period: "yearly", state: "active",并堵住改语言、后台刷新账号时抹掉订阅的几条路径 | 想在本地界面解锁 Pro 显示的人 | 保持 patcher 版本最新,防止状态回退 |
| DisableUpdates | 让ACTION_CHECK_FOR_UPDATE处理器直接返回空,客户端停止检查新版本,版本钉在当前补丁版本 | 不想让更新冲掉补丁的人 | 补丁失效时靠备份回退 |
| DisableTelemetry | 目前仅在枚举中占位,无对应实现 | — | 尚未实现,勾选可能直接报错 |
| DevToolsOnF12 | 在 Electron 主进程挂before-input-event钩子,按 F12 以 detach 模式开/关独立窗口 DevTools | 想给 WeMod 打开 DevTools 调试 DOM 或验证脚本的人 | 无 |
| RemoteWebPanelPreview | 把内置 web 面板、bridge 与渲染脚本写进 app.asar,PC 上起 3223 端口的 HTTP/WS 服务 | 想把手机当遥控器的人 | 自定义脚本运行的前提 |
两项需要单独说明:
RemoteWebPanelPreview:这是其余功能的地基。它把整个内置面板打进 asar,手机扫码即用;同时,你的自定义脚本只有勾了它才会被打包进客户端。
DisableTelemetry:这个开关在枚举里留着位置(WandEnhancer/Models/PatchConfig.cs),但补丁实现还没落地,现在勾它可能直接抛错。是否落地,盯 CHANGELOG.md 即可。
进阶:自定义脚本 + 手机远程面板
自定义脚本注入
脚本进入客户端只有一条路:在补丁弹窗里添加.js文件,或把它们放进 patcher 可执行文件同级的renderer-scripts/目录。打包时脚本会被塞进客户端渲染进程执行,前提是勾了远程面板开关。注意脚本可能跑多次,一次性工作要挂全局标志:
// 防重复执行 if (!globalThis.__myScriptInstalled) { globalThis.__myScriptInstalled = true; WandEnhancer.log("脚本已运行,apiVersion:", WandEnhancer.apiVersion); // 这里可以访问完整 DOM,甚至 Node 的 require }脚本抛错只会被记进日志,不会拖垮 WeMod。
远程面板拓扑与协议
整条链路都在局域网内:手机浏览器(同一 Wi-Fi)经 HTTP/WS(TCP 3223)连到跑在 PC 上的面板服务;服务通过 Electron IPC 进入bridge.cjs(注入 WeMod 主进程),再触达 Wand 渲染进程的 trainer API 与游戏状态。桥接层源码在web-panel/bridge/,生产构建会打成一个bridge.cjs塞进 asar。端口、路径这类协议常量统一收在 web-panel/protocol/web-contract.json,动协议前先改它。面板能力覆盖:游戏列表、远程启停 trainer、按分类勾选 cheat、置顶常用项、保存预设。
WeMod 补丁失败排查:四组症状对照
| 症状 | 原因 | 处理 |
|---|---|---|
| 打完补丁 WeMod 起不来 | 当前版本的代码锚点与正则对不上,属版本未适配 | 停用它,按下面"回退方法"恢复 |
| Windows / SmartScreen 报警告 | CI 产物未签名 | 正常现象,核对自建 workflow 日志即可;对来路不明的"预编译 exe"一律不可信——同名假教程里放过木马,官方从不在 release 发二进制 |
| 手机扫码后页面打不开 | 不同网段 / 防火墙拦截 / 网络被标为"公用" | 确认 PC 与手机同一 Wi-Fi 且路由器未开 AP 隔离;放行 Windows 防火墙 TCP 3223 入站;网络类型改"专用";跨网络就配 Tailscale |
| Pro 过一两天变回 Free | 早期版本在后台刷新账号数据时丢订阅状态 | 1.0.9.1 与 1.0.9.3 已修复;把 patcher 升到最新版重打一遍 |
补丁失效的回退方法
任何 WeMod 补丁回退都依赖那份app.asar.backup:
- 停用它,删掉
resources下的app.asar; - 把
app.asar.backup改回app.asar的原名; - 若备份也丢了,直接重装 WeMod,等 patcher 适配新版本再来。
收尾:它适合谁
适合:
- 能自己跑 CI 或在本地完成编译的人;
- 想把 WeMod 版本钉住、又需要手机远程操作的人;
- 愿意读一眼源码、核对补丁行为再下手的人。
不适合:
- 只想"一键下载 exe"图省事的人;
- 对本地文件备份毫无概念的人;
- 把账号安全放在第一优先级的人。
从备份机制到锚点校验,Wand-Enhancer 用一份可审计的开源实现,演示了一个 Electron 客户端本地修改的完整边界。
【免费下载链接】Wand-EnhancerAdvanced UX and interoperability extension for Wand (WeMod) app项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考