恢复 PCL 2 启动器被移除的「下载」页与「整合包安装」功能
📖 详细图文手册:docs/使用说明.md —— 含完整步骤、10 条故障排除、跨机器拷贝指南
-
仅供个人自用。请勿倒卖、二次分发或用于商业用途。
-
本补丁绕过的是 PCL 作者出于合规考量主动加入的限制。官方更新说明原文:
为遵守相关法律法规,PCL 不再提供 MC 下载功能,非常抱歉 qwq……
使用本补丁的风险由使用者自行承担。
-
补丁会修改 PCL 主程序的可执行文件。工具会自动备份原文件,但建议你自己也留一份。
-
下载的游戏文件来自 Mojang 官方服务器,与官方启动器一致。请使用正版账号登录。
从 PCL 2.99.0.0 开始,作者在代码里把「下载」页的加载器整个替换成了一个直接抛异常的占位实现,同时把「整合包安装」入口也加了硬拦截。
因为控制开关是一个编译期常量(Const),编译器把它内联后删掉了正常分支,所以:
- ❌ 更换下载源 / 镜像源 —— 无效
- ❌ 清理缓存 —— 无效
- ❌ 修改配置文件 —— 无效
必须在 IL(中间语言)层面修改。本工具做的就是这件事。
| 位置 | 改动 |
|---|---|
PageDownloadInstall.LoaderInit |
把「抛异常的 LoaderTask」替换为真实的 ModDownload.DlClientListLoader |
ModModpack.ModpackInstall |
重建两个被编译器删空的重载:无参入口恢复「选文件 → 安装」,3 参重载恢复完整的 Select Case PackType 分发,接回全部 7 个 InstallPack* 安装器 |
- 下载页仍是原地等长替换;
- 整合包修复在 PE 文件中新增一个节存放重建的方法体,并重定向方法 RVA。文件会增大约 2 KB,所有原有 RVA 不变,不影响重定位表、资源与 PCL 其它功能。
⚠️ 旧版补丁只把整合包入口的「拦截闸门」改成nop,但那段代码本身已被编译器判定为不可达而删除,Select Case分发从未被恢复 —— 也就是说压缩包/整合包下载此前一直是坏的。本版才真正修好。
本版重建逻辑已通过:
- Mono.Cecil 重新解析:IL 指令、
switch的 10 个目标、异常处理表 3 个子句边界、leave目标、全部元数据 token 均正确; - 与官方
ModModpack.vb源码逐行核对:Select Case PackType的 7 路映射与参数完全一致; - 真实启动 PCL:进程稳定存活、
responding=True、无崩溃转储 —— 新增 PE 节被 Windows 加载器接受,手写 IL 合法; - 从发布 ZIP 解压后端到端复跑:输出与已验证产物逐字节一致,且重复运行幂等。
自动化的 IL/启动验证无法覆盖「点击按钮后的图形界面交互」。建议你在自己电脑上用任意一个
.zip整合包点一次「安装整合包」做最终确认(下载页 → 整合包安装,或拖 zip 进 PCL,或「手动安装整合包」按钮)。
下载本仓库的 PCL-patch.zip,解压到任意目录。
💡 建议放在简单路径下,例如
C:\PCL-patch\。 不建议放在Downloads、带空格或中文很长的目录里。
从网上下载的 ZIP 解压出来的文件,会被 Windows 打上「来自 Internet」标记, 导致 .NET 拒绝加载其中的 DLL,报错:
未能加载文件或程序集"…\tools\Mono.Cecil.dll"或它的某一个依赖项。
不支持操作。(异常来自 HRESULT:0x80131515)
解决方法:在解压后的目录中打开 PowerShell,执行
Get-ChildItem -LiteralPath '解压后的路径' -Recurse -File | Unblock-File例如:
Get-ChildItem -LiteralPath 'C:\PCL-patch' -Recurse -File | Unblock-File也可以:右键 ZIP → 属性 → 勾选「解除锁定」→ 确定 → 再解压。
关闭主窗口,并检查右下角托盘区没有 PCL 图标(常见失败原因)。
双击 apply-patch.bat。
看到以下两行即成功:
[OK] 复核:下载页已接回真实加载器
[OK] 复核:整合包安装分发已恢复
然后重新打开 PCL → 左侧「下载」→ 应该能看到版本列表。
双击 restore-original.bat,会从备份文件还原。
| 要求 | 说明 |
|---|---|
| 操作系统 | Windows 10(2016+)/ Windows 11 开箱即用 Windows 7 / 8.1 需先装 WMF 5.1 |
| PowerShell | 5.1 或更高(Win10/11 自带) |
| .NET Framework | 4.8(PCL 本身就需要,能跑 PCL 就一定满足) |
| 磁盘权限 | PCL 若装在 Program Files 下,需以管理员身份运行 |
报错 HRESULT:0x80131515 / 未能加载 Mono.Cecil.dll
文件被 Windows 标记为「来自 Internet」。见上文「第 2 步:解除文件锁定」。
提示「文件被占用」/ cannot access the file
PCL 还在运行。常见原因是托盘图标没退。
- 关闭 PCL 主窗口
- 检查屏幕右下角托盘区,右键退出 PCL
- 任务管理器结束所有
Plain Craft Launcher 2进程 - 重试
脚本遇到这种情况会安全退出,不会把文件改坏。
双击 bat 窗口一闪而过
通常是文件不完整。确认目录结构如下:
PCL-patch\
├─ apply-patch.bat
├─ restore-original.bat
├─ Patch-PCL.ps1
└─ tools\
├─ Mono.Cecil.dll
├─ patchcode.b64
└─ Rebuild-Modpack.ps1
提示「禁止运行脚本」/ about_Execution_Policies
不要直接双击 .ps1。两个 .bat 已内置 -ExecutionPolicy Bypass,
只对本次运行生效,不会修改系统设置。
提示 type PCL.PageDownloadInstall not found / refusing to patch
目标文件不是 PCL,或版本结构差异过大。
这是安全保护:结构校验不通过时拒绝修改,原文件保持不动。
请确认 -PclPath 指向的是真正的 PCL 主程序,并核对下方版本兼容性。
提示「当前文件无需修改」
两种情况之一:已经打过补丁了,或该版本本身没有这个限制。无需操作。
杀毒软件报警
工具需要改写 exe 字节,属于启发式误报。添加信任即可。 修改是原地等长的,文件会略微增大(新增一个 PE 节)。
打完补丁 PCL 打不开了
立刻双击 restore-original.bat 还原,即可回到官方原版。
工具按代码结构定位,不写死地址,因此跨机器、跨路径都能用。
| PCL 版本 | 文件大小 | 状态 | 说明 |
|---|---|---|---|
| 2.99.0.0 | 5980160 字节 |
✅ 已验证 | 原版 / 补丁后哈希见下表 |
| 其它 2.x | 视情况 | 结构相同则成功,否则安全中止 |
| 状态 | SHA256 |
|---|---|
| 官方原版(备份) | 6B6E1260CB5A1D6A303855F1C60CAB3D0BC1AEBBA7E40A964180188B271E7386 |
| 补丁后(旧版,仅下载页) | 5992425A0ECD39ABB8A5FD8F96BCB5AE3BB5A132ABFB7641CD866EA3B0D65F63 |
| 补丁后(本版,下载页 + 整合包,5982208 字节) | B54BE96B4C43EB7AE3608BD034DC60463043EB59B806BD4C5B46891A8BE08447 |
自查命令:
Get-FileHash "Plain Craft Launcher 2.exe" -Algorithm SHA256- ✅ 同一版本,在任何电脑上都适用
- ✅ 结构相同的新版本,通常也能成功
⚠️ 结构不同 → 安全中止,不会损坏文件
PageLoaderInit必须是 8 参数的实例方法- 替换区间内必须确实存在
LoaderTask的构造指令
任一不满足即中止,原文件保持原样。
| 场景 | 结果 |
|---|---|
| 换盘符 / 中文路径 / 带空格路径 | ✅ 通过 |
| 从任意工作目录调用 | ✅ 通过 |
| 指向错误的 exe 文件 | ✅ 安全中止,文件未变 |
| 指向非 .NET 程序 | ✅ 安全中止,文件未变 |
| 文件带 Internet 锁定标记 | ✅ 自动解除后正常 |
如果你文件大小不是
5980160字节,说明是不同构建。运行脚本后留意输出的PCL version与守卫检查结果;若中止,把输出反馈过来即可适配。
PCL 自动更新会用官方文件覆盖本补丁,下载功能会重新失效。
重新运行一次 apply-patch.bat 即可。
建议在 PCL 设置中关闭「自动更新」,避免补丁被静默覆盖。
| 文件 | 作用 |
|---|---|
apply-patch.bat |
双击 = 打补丁 |
restore-original.bat |
双击 = 还原官方原版 |
Patch-PCL.ps1 |
主脚本(实际逻辑) |
tools/Mono.Cecil.dll |
.NET 元数据解析库(只读分析) |
tools/patchcode.b64 |
下载页补丁逻辑(C# 源码编码形式) |
tools/Rebuild-Modpack.ps1 |
整合包安装重建逻辑(动态定位 + 幂等) |
本项目不修改源码重新编译,原因是官方开源版本为删减版:
ModSecret.vb 中注明「部分代码已被删除」,更新功能、赞助功能均为空实现,
微软登录 ClientId 与 CurseForge API Key 也是空的,编译产物无法替代官方版本。
因此采用直接改写 IL 字节的方式:
- 使用 Mono.Cecil 只读分析,取得方法 RVA、元数据 token 与替换区间(全部动态推算)
- 下载页:在
.text段内原地等长替换字节 - 整合包:重建两个方法体写入新增 PE 节,重定向 MethodDef RVA,并重算异常处理表偏移
- 修改后重新用 Cecil 解析校验,确认下载页与整合包分发均已生效
本项目与 PCL 官方(龙腾猫跃)无任何关联,非官方作品。
一切使用后果由使用者自行承担。若你认同作者的处理方式,请支持官方版本。