一、简介

官网:https://www.wemod.com/

WeMod 是用 Electron 开发的,而 Electron 开发的程序几乎以源码方式发行,所以只要了解一些 JS 和 Electron 知识,就可以轻松修改。

本文经供学习参考,请勿做其他用途!

二、前置

1、代码编辑工具( 安装 Prettier 插件用于格式化 代码)

2、NodeJS

3、asar 模块(用于解压 asar 文件)

1
2
3
4
5
6
7
8
9
10
//安装
npm install asar -g

//解压
asar e app.asar <解压后的目录>
asar extract app.asar <解压后的目录>

//打包
asar p <被打包的目录> app.asar
asar pack <被打包的目录> app.asar

三、开始

  1. 进入 WeMod 根目录: C:\Users\name\AppData\Local\WeMod

    1.png

  2. 再进入需要版本的 resources 文件夹,如 8.0.13路径:C:\Users\Chole\AppData\Local\WeMod\app-8.0.13\resources

    2.png

  3. 以管理员方式启动终端,cd 进此目录
    使用命令解压: asar e app.asar app

    需要注意的是,app.asar 依赖 app.asar.unpacked 文件夹,所以需要放在 一起才可以解压,否则会报错

    而且重新打开 WeMod 后,WeMod 会默认读取 app 文件夹而不是 app.asar

    运行后会得到文件夹 app, 使用编辑工具打开 app 文件夹

    3.png

  4. 修改 index.js 入口文件,在这里可以打开开发者模式,默认情况下,只要查找

1
2
this.browserWindow.loadURL(e)									//这是Electron程序的入口,在后边加上一行
this.browserWindow.webContents.openDevTools() //就可以打开开发者模式,但是 WeMod 进行了封装,所以查找 devMode 并修改值为 true 就可以

devMode: process.defaultApp 改成 devMode: true

改完别忘记把 devMode 修改为 false!!!!

4.png5.png

当然,这一步不是必须的,打开开发者模式主要是为了调试,并找到相关方法

等以后知道修改方法后,可以直接去修改,而不需要打开开发者模式

四、解锁专业版

我们修改的目的是使用专业版的功能,通过查找可以在 /output/app-bundle.js 这个文件里发现isPro()方法,如下:

1
2
3
get isPro() {
return !!this.account.subscription;
}

如果直接修改为return true,会发现专业版功能不可用,这是用就需要用开发者模式调试

6.png

可以发现切换按钮对应的方法,其中有一句:disabled.bind="inputsDisabled"

按钮是否禁用绑定的是 inutsDisabled 方法,所以直接在代码里查找

1、查找 get isPro() 并将方法返回值改成 true

替换return !!this.account?.subscription;return true;

2、全局替换!this.account.subscriptionfalse

修改到这里就可以使用专业版功能了!

五、专业版主题

1、查找 selectTheme 并将下方的 isPro 方法返回值改成 true

return !!this.account?.subscription改成return true

7.png

8.png

2、 查找 resetProTheme 并修改

直接在 if 上加一行:return false;

9.png

10.png

六、去除广告

以游戏库左侧广告为例

11.png

12.png

打开开发者工具,在代码里查找 pro-popup-drawer

发现绑定的是!account.subscription,直接全局替换为false

重新打开WeMod可以发现左侧和游戏内广告都没了

七、修改专业版标识

需 Unicode 转码
1、提示

1
2
3
4
5
6
7
8
copyAppVersion() {
this.#D.copyText(this.appVersion);
this.#Be.toast({
content: "settings_dialog.app_version_copied_toast",
type: "ok",
onTop: true,
});
}
1
2
3
4
5
6
7
8
9
10
11
12
copyAppVersion() {
this.#D.copyText(
unescape(
"\u0042\u0079\u0020\u0043\u0068\u006f\u006c\u0065"
) + this.appVersion
);
this.#Be.toast({
content: "settings_dialog.app_version_copied_toast",
type: "ok",
onTop: true,
});
}

2、Pro 标识

1
2
3
4
5
6
7
8
9
get badge() {
if (this.isCreator) {
return this.creatorMode ? "creator" : "pro";
}
if (this.account.subscription) {
return "pro";
}
return null;
}
1
2
3
4
5
6
7
8
9
10
11
get badge() {
if (this.isCreator) {
return this.creatorMode ? "creator" : "pro";
}
if (true) {
return unescape(
"\u004b\u006c\u0079\u0069\u006e\u0054"
);
}
return null;
}

八、禁用更新

直接删除图一中的 Update.exe,或者改名为 Update1.exe 或者其他,以后想更新了再改回去

1
2
3
4
5
6
checkForUpdate() {
return false; // 直接添加一行应该就可以,没试过
return this.updateFeedUrl
? this.ipcInvoke("ACTION_CHECK_FOR_UPDATE", this.updateFeedUrl)
: Promise.resolve("not-checked");
}

结束!