v2.2
cgss-dmm-hook
面向 Windows / DMM 版 CGSS 客户端的最小 version.dll 代理工程。
用途
- 转发
UnityPlayer.dll实际导入的少量version.dll导出函数 - 等待 IL2CPP 运行时初始化稳定
- 可选地 hook
Stage.NetworkUtil.GetSchemeType(),在需要时强制切到http - 支持通过
config.json覆盖api_url和asset_url - 支持 hook
CodeStage.AntiCheat.ObscuredTypes.ObscuredPrefs,直接接管启动所需的 9 个整型参数 - 自动拉起同目录下的
cgss-borderless-helper.exe,用外部 helper 处理F11无边框全屏
目录结构
src/:代理、日志、IL2CPP 符号解析、hook 逻辑deps/minhook/:内置的 MinHook 源码
说明
- 本项目不依赖
Il2CppDumper或script.json GameAssembly.dll出现时,IL2CPP runtime 可能还不能安全访问,因此 hook 线程会额外等待一小段时间- 运行时日志会写到游戏目录下的
cgss-dmm-hook.log - 生成的 DLL 包含 Windows 版本资源,定义在
src/version.rc - 项目主许可证见
LICENSE,第三方依赖说明见THIRD_PARTY_NOTICES.md - 支持通过
force_http控制是否 hook scheme,默认true config.json中的 URL 会自动规范化:若写了http://或https://会自动去掉,若末尾缺少/会自动补上
构建
cmake -S . -B build -G Ninja -DCMAKE_SYSTEM_NAME=Windows \
-DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc \
-DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++
cmake --build build
或直接使用:
make
默认也会同时生成可分发压缩包。
生成可分发压缩包:
make package
输出
build/version.dllbuild/cgss-borderless-helper.exebuild/libwinpthread-1.dllbuild/package/cgss-dmm-hook-v2.2.zip
config.json
{
"force_http": true,
"api_url": "",
"asset_url": "asset-starlight-stage.akamaized.net/",
"launch_borderless_helper": true,
"viewer_id": 589089289
}
字段说明:
force_http:是否强制将 scheme 改成http。默认trueapi_url:必填。API 主机名,按原始字段格式填写,不带 scheme;留空时程序会弹窗提示asset_url:资源主机名,按原始字段格式填写,不带 scheme;留空时回落到asset-starlight-stage.akamaized.net/launch_borderless_helper:是否自动启动cgss-borderless-helper.exe。默认trueviewer_id:启动参数接管里使用的VIEWER_ID。默认589089289
当前版本会在运行时直接接管以下 ObscuredPrefs 整型键,不再依赖预先写注册表:
VIEWER_IDTUTORIAL_STEPTUTORIAL_LOADED_FROM_SERVER_FLAGTUTORIAL_IS_DIRTY_LOCAL_DATAPOLICY_PRE_ANNOUNCE_DATEPOLICY_ANNOUNCE_DATEBN_CONTENT_RUNBN_CONTENT_AGREE_ANALYSISBN_CONTENT_AGREE_ADVERTISEMENT
其中只有 VIEWER_ID 通过 config.json 配置,其余值按当前已验证样本固定写入。
使用方法
- 将
build/version.dll、build/cgss-borderless-helper.exe和build/libwinpthread-1.dll一起复制到imascgstage.exe同目录 - 如需覆盖地址,在同目录放置
config.json - 启动游戏
- 进入游戏后按
F11切换无边框全屏 - 如果 hook 未生效,查看
cgss-dmm-hook.log和cgss-borderless-helper.log
说明:
cgss-borderless-helper.exe现在只负责外部窗口 borderless 行为,不再修改 Unity 内部Screen.SetResolution。- 这样更接近 Borderless Gaming 的工作方式,也能减少退出时的干扰。
version.dll只在imascgstage.exe主进程中继续启动 hook 和 helper;被其他进程间接加载时会跳过。- 不要只单独分发
version.dll。当前构建依赖libwinpthread-1.dll,如果目标机器缺少它,Windows 会在进入代理代码前直接拒绝加载,此时通常表现为游戏无法启动,且不会生成任何日志。 make和make package都会自动把运行所需文件整理到build/package/cgss-dmm-hook/,并生成带版本号的压缩包,例如build/package/cgss-dmm-hook-v2.2.zip。ObscuredPrefs注册表键值对的加解密分析文档已随仓库提供,见 [ObscuredPrefs 加解密分析文档.md](docs/ObscuredPrefs 加解密分析文档.md)。
致谢
- 本项目的
version.dll代理注入思路与运行时 IL2CPP hook 方向,受gkms-localify-dmm项目启发。 cgss-borderless-helper.exe的外部无边框全屏处理思路,参考了 Borderless Gaming 项目;本项目同样按 GPL 开源。