今天在 GitHub Trending 上看到一个有意思的项目:Wand-Enhancer,一个专注于本地客户端配置管理与用户体验增强的开源工具,通过修改本地 Electron 应用实现布局定制、远程控制面板等高级功能。
一、项目概述
Wand-Enhancer 是由 k1tbyte 开发的开源互操作性工具,旨在扩展本地客户端配置并改善 Wand 应用的用户体验。项目采用 Apache-2.0 许可证,核心特性包括:
- 本地环境配置管理:无需联网即可管理和调整客户端配置
- 自动化兼容性调整:适配新版本客户端,减少手动迁移成本
- 布局与主题定制:客户端侧的高级界面自定义
- AI 功能增强:集成 AI 能力扩展应用功能
- 远程 Web 面板:通过局域网 HTTP/WebSocket 服务器实现移动端远程控制
项目定位与安全设计
项目明确不发布预编译二进制文件,用户必须从自己的 Fork 通过 GitHub Actions 构建可执行文件。这一设计决策源于安全考量——项目作者发现大量诈骗者将恶意软件伪装成该项目教程进行传播,因此采用"仅源码分发 + 自行构建"模式保障用户安全。
二、技术原理
2.1 整体架构
Wand-Enhancer 采用三层架构设计:
┌─────────────────────────────────────────────┐
│ WPF GUI Application │
│ (.NET Framework 4.8 + C#) │
│ - Patcher Dialog │
│ - Remote Web Panel Toggle │
└───────────────────┬─────────────────────────┘
│
┌───────────────────▼─────────────────────────┐
│ Native Helper (C++) │
│ - CMake 构建 │
│ - ASAR Integrity Patching │
└───────────────────┬─────────────────────────┘
│
┌───────────────────▼─────────────────────────┐
│ Remote Web Panel (Node.js + pnpm) │
│ - HTTP/WebSocket Server (Port 3223) │
│ - Frontend (React/Vue) │
└─────────────────────────────────────────────┘
2.2 核心技术:Electron ASAR 完整性修补
Wand 应用基于 Electron 框架构建,Electron 使用 ASAR 归档格式打包应用代码。Wand-Enhancer 通过修改 version.dll 代理,在 Wand 进程内部修改 Electron 的 ASAR-integrity fuse 字节:
// 伪代码示例:ASAR 完整性检查绕过
// 实际实现位于 Native Helper (C++)
#include <Windows.h>
#include <fstream>
void PatchASARIntegrity(const std::wstring& asarPath) {
// ASAR header 中的 fuse 字节偏移
const size_t FUSE_OFFSET = 0x08;
const byte FUSE_ENABLED = 0x01;
const byte FUSE_DISABLED = 0x00;
std::fstream asar(asarPath, std::ios::in | std::ios::out | std::ios::binary);
// 读取 fuse 状态
asar.seekg(FUSE_OFFSET);
byte fuseValue;
asar.read(reinterpret_cast<char*>(&fuseValue), 1);
// 禁用完整性检查
if (fuseValue == FUSE_ENABLED) {
asar.seekp(FUSE_OFFSET);
asar.write(reinterpret_cast<char*>(&FUSE_DISABLED), 1);
}
asar.close();
}
这一修改允许注入自定义 JavaScript 代码到客户端渲染进程,实现界面定制和功能扩展。
2.3 .NET Patcher 实现原理
Patcher 工具使用 .NET Framework 4.8 构建,核心流程:
- 用户选择 Wand 安装路径
- 验证应用完整性:检查
app.asar文件存在性 - 应用补丁:
- 注入
version.dll代理到安装目录 - 修改 Electron fuse 字节
- 可选:注入自定义 JavaScript 脚本到
renderer-scripts/
- 注入
- 启用 Remote Web Panel:启动局域网 HTTP 服务器
// Patcher 核心逻辑示意
public class WandPatcher
{
public void ApplyPatch(string wandPath, PatchOptions options)
{
var asarPath = Path.Combine(wandPath, "resources", "app.asar");
// 验证 ASAR 存在
if (!File.Exists(asarPath))
throw new FileNotFoundException("app.asar not found");
// 复制 version.dll 代理
var versionDll = Path.Combine(wandPath, "version.dll");
File.Copy(options.VersionDllSource, versionDll, overwrite: true);
// 处理自定义脚本注入
if (options.EnableWebPanel && options.CustomScripts.Any())
{
InjectCustomScripts(asarPath, options.CustomScripts);
}
// 记录日志
Log.Info($"Patch applied successfully to {wandPath}");
}
}
2.4 自定义脚本注入机制
用户可通过两种方式注入 JavaScript:
- Patch Dialog 中添加
.js文件 - 放置到
renderer-scripts/目录
注入脚本运行在 Wand 的渲染进程,拥有完整的 DOM 和 Node.js require 访问权限:
// 示例:监听并处理对话框
if (!globalThis.__dialogHandlerInstalled) {
globalThis.__dialogHandlerInstalled = true;
WandEnhancer.log("Dialog handler initialized");
new MutationObserver(() => {
const dialog = document.querySelector("ux-dialog:not([data-seen])");
if (dialog) {
dialog.setAttribute("data-seen", "1");
WandEnhancer.log("Dialog detected and marked");
// 自定义处理逻辑
}
}).observe(document.documentElement, { childList: true, subtree: true });
}
关键设计点:
- 脚本可能执行多次,需用全局标志防护单次操作
WandEnhancerhelper 提供日志输出、远程面板 URL、API 版本等信息- 错误被捕获并记录,不会导致 Wand 崩溃
三、安装与快速开始
3.1 构建前置条件
从源码构建需要以下环境:
- CMake:构建 Native Helper
- Node.js + pnpm:Web Panel 前端依赖
- Visual Studio 2022 或 Build Tools for Visual Studio 2022
- 工作负载:Desktop development with C++
- .NET Framework 4.8:桌面构建工具 / 目标包
3.2 从 Fork 构建(推荐)
步骤 1:Fork 仓库
访问 https://github.com/k1tbyte/Wand-Enhancer,点击右上角 “Fork” 创建个人副本。
步骤 2:启用 GitHub Actions
进入你 Fork 的仓库 → “Actions” 标签 → 启用 Workflows。
步骤 3:运行构建工作流
选择 “Build executable” 工作流 → “Run workflow” → 保持默认分支 → 启动构建。
步骤 4:下载构建产物
等待构建完成(通常 5-10 分钟),进入完成的 Run → 下载 Artifact(ZIP 压缩包)。
步骤 5:解压并运行
提取 WandEnhancer.exe,按照向导选择 Wand 安装路径并应用补丁。
3.3 本地源码构建
# 克隆仓库
git clone https://github.com/k1tbyte/Wand-Enhancer.git
cd Wand-Enhancer
# 安装依赖(自动执行)
# - pnpm install(Web Panel)
# - CMake build(Native Helper)
# - MSBuild(WPF Solution)
build.cmd
构建脚本会自动完成所有依赖安装和编译步骤,最终输出 WandEnhancer.exe。
四、使用方法与实战
4.1 基础使用流程
- 启动 WandEnhancer.exe
- 选择 Wand 安装路径(通常为
C:\Users\<用户名>\AppData\Local\Programs\Wand) - 配置补丁选项:
- 启用/禁用 Remote Web Panel
- 添加自定义 JavaScript 脚本
- 点击 “Patch” 等待完成
- 重启 Wand 应用
4.2 远程 Web 面板配置
局域网访问:
- 确保 PC 和手机处于同一 Wi-Fi 网络
- 在 WandEnhancer 中悬停 “Connect” 按钮
- 使用手机扫描 QR 码访问控制面板
远程访问(跨网络):
- 使用 Tailscale 等 VPN 工具建立虚拟局域网
- 在 Tailscale 网络中访问 PC 的 IP:3223
安全注意事项:
- 面板使用 HTTP 明文传输,无配对码保护
- 仅在受信任的局域网或 VPN 中使用
- 切勿将端口 3223 直接暴露到公网
4.3 自定义脚本注入实战
场景:自动隐藏特定 UI 元素
// renderer-scripts/hide-annoying-banner.js
if (!globalThis.__bannerHiderInstalled) {
globalThis.__bannerHiderInstalled = true;
const style = document.createElement('style');
style.textContent = `
.annoying-banner-class {
display: none !important;
}
`;
document.head.appendChild(style);
WandEnhancer.log("Banner hider script loaded");
}
场景:拦截并修改 API 请求
// renderer-scripts/api-interceptor.js
if (!globalThis.__apiInterceptorInstalled) {
globalThis.__apiInterceptorInstalled = true;
const originalFetch = window.fetch;
window.fetch = async (...args) => {
const [url, options] = args;
// 修改特定请求
if (url.includes('/api/trainer')) {
WandEnhancer.log(`Intercepted trainer API: ${url}`);
// 可添加自定义 headers 或修改 body
}
return originalFetch(...args);
};
}
4.4 故障排查
Windows Defender 警告:
- GitHub Actions 构建的产物未签名,可能触发 SmartScreen 警告
- 解决方案:在 Windows 安全中心添加排除项,或确认来源后点击"仍要运行"
远程面板无法访问:
- 检查 PC 和手机是否在同一网络
- 确认路由器未启用 AP 隔离(Guest Wi-Fi 常见)
- Windows 防火墙允许入站 TCP 3223 端口
- 将网络配置从"公用"改为"专用"
五、常见问题与解决方案
Q1: 为什么没有预编译的 .exe 下载?
原因: 项目作者发现大量诈骗者使用该项目的名义传播恶意软件,因此采用"仅源码分发 + 用户自行构建"策略。
解决方案: 从你的 Fork 的 GitHub Actions 构建产物下载,确保代码来源可信。
Q2: 构建失败,缺少 .NET Framework 4.8?
解决方案: 安装 .NET Framework 4.8 Developer Pack,包含目标包和构建工具。
Q3: Patch 后 Wand 无法启动?
可能原因:
- Wand 版本更新导致兼容性问题
- ASAR 文件损坏
解决方案:
- 重新安装 Wand 官方版本
- 等待 WandEnhancer 更新适配新版本
- 检查项目 Issues 是否有相关讨论
Q4: 自定义脚本不生效?
排查步骤:
- 确认脚本使用
.js扩展名 - 检查语法错误(使用浏览器开发者工具测试)
- 确认 Remote Web Panel 已启用(脚本依赖相同的注入机制)
- 添加
WandEnhancer.log()调试输出
Q5: 如何获取项目更新通知?
在 GitHub 仓库中选择 Watch → Custom → Releases,当有新版本发布时接收邮件通知。
六、技术价值与启发
Wand-Enhancer 项目展示了几个值得关注的技术方向:
Electron 应用逆向与扩展:通过修改 ASAR fuse 字节实现客户端功能增强,这一技术可应用于其他 Electron 应用的本地化定制。
安全分发模式:“仅源码 + GitHub Actions 构建"模式有效防止第三方恶意分发,值得开源项目借鉴。
插件化架构设计:自定义脚本注入机制提供了灵活的扩展能力,用户无需修改核心代码即可实现定制功能。
远程控制面板:局域网 HTTP + WebSocket 服务器的实现模式,可扩展到其他桌面应用的远程管理场景。
项目地址:https://github.com/k1tbyte/Wand-Enhancer
⚠️ 免责声明: 本工具仅用于学习和研究目的,请勿用于违反软件许可协议或相关法律法规的场景。使用前请务必阅读项目的 Legal Disclaimer。