注入代码到 steam UI 及禁用 steam 更新检查

当前 steam 版本: 8.63.11.84, 更新于 2024年1月13日,8:58:56

注意到 steam 的 UI 是网页格式的, 检查后确定其使用 CEF 展示, 在 steam 根目录游走发现steamui\localization下放了 steam 的本地化文件, 且steamui\chunk~2dcc5aaf7.js是入口文件.

尝试随机修改一些翻译后触发了 steam 的更新, 更新后相关文件复原. 注意到 logs 下有许多日志, bootstrap_log.txt描述了启动流程. 当一切正常时, 最后几行如下:

1
2
3
[2024-01-18 19:40:21] 正在验证安装...
[2024-01-18 19:40:21] Performing checksum verification of executable files
[2024-01-18 19:40:22] Verification complete

修改任何关键文件后, 则会有如下类似输出:

1
2
3
4
5
6
7
8
9
10
[2024-01-18 19:43:16] Downloaded new manifest: /steam_client_win32 version 1705108172, installed version 1705108172, existing pending version 0
[2024-01-18 19:43:16] Package file bins_cef_win32_win7.zip.vz.314ded663999d66f03023b3a12690d93d9d34974_66447549 missing or incorrect size
[2024-01-18 19:43:16] Package file bins_webhelpers_win32_win7.zip.vz.fe15dbe6e1b60812fbaee813884270a7b58aac0e_2518032 missing or incorrect size
[2024-01-18 19:43:16] Add pending download: https://client-update.akamai.steamstatic.com/bins_cef_win32_win7.zip.vz.314ded663999d66f03023b3a12690d93d9d34974_66447549
[2024-01-18 19:43:16] Manifest download: send request
[2024-01-18 19:43:16] Add pending download: https://client-update.akamai.steamstatic.com/bins_webhelpers_win32_win7.zip.vz.fe15dbe6e1b60812fbaee813884270a7b58aac0e_2518032
[2024-01-18 19:43:16] Manifest download: send request
[2024-01-18 19:43:16] 正在下载更新 (已下载 0,共 67,349 KB)...
...省略进度行
[2024-01-18 19:43:23] 正在下载更新 (已下载 35,320,共 67,349 KB)...

注意到大部分 bootstrap 里的输出都是英文的, 而正在验证安装是中文的, 那么肯定在某个地方放置了翻译文件. 全局搜索可知public\steambootstrapper_schinese.txt下有一些启动时翻译文件, 找到相关行如下:

1
2
3
"SteamBootstrapper_UpdateInstalling"			"正在安装更新..."
"SteamBootstrapper_InstallVerify" "正在验证安装..."
"SteamBootstrapper_DownloadComplete" "下载完成。"

遂全局搜索SteamBootstrapper_InstallVerify发现在steam.exe中有引用, 使用 IDA Pro 打开 steam.exe.


在 String 视图中有:

Alt text

循其引用, 只见其一, 所在片段如下:

Alt text

那么sub_466120肯定是一个翻译函数, 随意修改 steam 一些字节, 重新运行可见:

1
2
3
4
...
[2024-01-18 20:23:35] 正在验证安装...
[2024-01-18 20:23:36] BVerifyInstalledFiles: bad CRC on steam.exe (da921668 expected, ef3173b5 actual)
....

那么只要把验证函数空置, 应该就能处理掉不少问题, 搜索 BVerifyInstalledFiles 可见:

1
2
3
4
5
Address	Length	Type	String
.rdata:006E729C 00000028 C BVerifyInstalledFiles: bad directory %s
.rdata:006E72C4 00000037 C BVerifyInstalledFiles: %s is %lld bytes, expected %lld
.rdata:006E72FC 00000026 C BVerifyInstalledFiles: can't read %s\n
.rdata:006E7324 0000003F C BVerifyInstalledFiles: bad CRC on %s (%x expected, %x actual)\n

第一个是处理错误目录的, 第二个是检查长度的, 第三个是报错不能读取的, 第四个是检查文件 CRC 的.

打开此函数反汇编伪代码, 前几行是:

1
2
3
4
5
6
7
8
9
10
v4 = (int)this;
v76 = this;
sub_457870(v47);
v77 = 0;
sub_4616F0(v46, 778, v4, 1);
if ( !(_BYTE)a2 && !(unsigned __int8)sub_49A920(v46) )
{
v5 = 1;
goto LABEL_87;
}

LABEL_87在尾巴上, 接近返回, 大概就是兜底. 因此反转此条件. 将两个jnz改成jz, 之后修改翻译文件, 将Login_PickUser改做:

1
"Login_PickUser":"谁要玩游戏 Hello World?"

启动 steam 可见:

Alt text

被糊掉的是我的头像

至此修改成功. 查看 Login_PickUser 附近代码有:

Alt text

这附近引用到了一个s.Config, 导出看看:

Alt text

现在可以一键替换「steam」为「斯迪姆」了

注入代码到 steam UI 及禁用 steam 更新检查

https://myuan.fun/注入代码到steam-UI及禁用steam更新检查/

作者

myuan

发布于

2024-01-18

更新于

2024-01-18

许可协议

评论