值此「六四事件」33 周年之际,防火长城发威,我使用的梯子们断的断、残的残。无奈,我只好打起了中国大陆境内各家网游加速器的主意。

我盯上了哔哩哔哩众多《Apex 英雄》内容创作者力荐的 网易 UU 加速器。我架起虚拟机,请来了 UU 加速器本尊和 Polipo。UU 加速器主要提供「路由模式(模式三)」和「进程模式(模式四)」。我选择了「模式四」,尝试把 polipo.exe 重命名成 r5apex.exe,以期让 UU 加速器「加速」它。

模式四下,重命名为 r5apex.exe 的 Polipo 被 UU 启动

UU 加速器将信将疑地启动了 Polipo 扮演的「Apex 英雄」,不过显然,代理没奏效。

模式三下,UMR 手动修改路由表并跟踪本机到 104.26.13.31 的路由,tracert 提示请求超时

我又尝试了「路由模式(模式三)」,并手动操作本机路由表。结果 UU 加速器也不吃这套。

在互联网上瞎逛的时候,我忽然想起了「白利用」技术(有数字签名的正常 .exe 文件 + 掺了私货的 .dll)。四处 Google 了一番,找到了几篇看不懂的教程。

我又想起了早年间看过某位大佬写的,为《饥荒》桥接 LuaJIT 引擎的文章。于是我找到了 《饥荒游戏扫雷笔记 系列全文合集》(知乎) ,里面刚好详细介绍了用 dinput8.dll 「捅篓子」的方法,还附带了一些源代码。

我原先的计划是替换掉 Steam 目录下的 zlib1.dll,奈何我去网上找了个大小不一样的同名 dll 扔进去,触发了 Steam 的校验机制:Steam 发现了异常,还好心地帮我备份了出问题的 DLL 文件。

于是我把目光转向 bcrypt.dll:Steam 似乎只导入了 BCryptGenRandom 函数。我新建了空白的 bcrypt.dll 文件,结果 Steam 既没崩溃也没报错;我又盯上了 steamwebhelper.exe,它不仅会使用 bcrypt,也会使用 WINMM。我尝试新建空白的 WINMM.dll 文件,报错。看来 WINMM.dll 应该可以用来注入 steamwebhelper.exe

经过一天的努力,我,U.M.R Powered,终于做到了:

  • 使用 AheadLib 生成白利用 DLL 源码
  • 安装 VS2022 + MFC
  • 踩进了 VS2022 新项目默认 WINAPI_FAMILY 设定的坑
  • 构建出了能用的白利用 winmm.dll
  • 把 Polipo 编译链接成 .dll

steamwebhelper.exe 正在监听 TCP 8123 端口

curl 连接 1.1.1.1:443,SNI steamcommunity.com,实际连接上后者

最后,steamwebhelper.exe 按照我的设想,在 8123 端口上启动了 Polipo HTTP 代理服务器。但是,UU 加速器的反滥用机制也有两把刷子——如同设置了 destOverride 的 V2Ray 一样,UU 加速器也会读取 TLS ClientHello 中的 server_name 字段,并按其内容确定目标地址。

P.S.

UMR 发现有一些网游加速器仅通过文件重命名就能顺利实现借道翻墙——但是它们大多有自己的黑名单(比如无法访问 web.archive.org)。读者也可以自行尝试上述的三种方式尝试「滥用」网游加速器。