Files
cgss-http-hook/README.md
T
2026-07-08 12:39:25 +08:00

4.5 KiB

cgss-dmm-hook

面向 Windows / DMM 版 CGSS 客户端的最小 version.dll 代理工程。

用途

  • 转发 UnityPlayer.dll 实际导入的少量 version.dll 导出函数
  • 等待 IL2CPP 运行时初始化稳定
  • 可选地 hook Stage.NetworkUtil.GetSchemeType(),在需要时强制切到 http
  • 支持通过 config.json 覆盖 api_urlasset_url
  • 支持 hook CodeStage.AntiCheat.ObscuredTypes.ObscuredPrefs,直接接管启动所需的 9 个整型参数
  • 自动拉起同目录下的 cgss-borderless-helper.exe,用外部 helper 处理 F11 无边框全屏

目录结构

  • src/:代理、日志、IL2CPP 符号解析、hook 逻辑
  • deps/minhook/:内置的 MinHook 源码

说明

  • 本项目不依赖 Il2CppDumperscript.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.dll
  • build/cgss-borderless-helper.exe
  • build/libwinpthread-1.dll
  • build/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。默认 true
  • api_url:必填。API 主机名,按原始字段格式填写,不带 scheme;留空时程序会弹窗提示
  • asset_url:资源主机名,按原始字段格式填写,不带 scheme;留空时回落到 asset-starlight-stage.akamaized.net/
  • launch_borderless_helper:是否自动启动 cgss-borderless-helper.exe。默认 true
  • viewer_id:启动参数接管里使用的 VIEWER_ID。默认 589089289

当前版本会在运行时直接接管以下 ObscuredPrefs 整型键,不再依赖预先写注册表:

  • VIEWER_ID
  • TUTORIAL_STEP
  • TUTORIAL_LOADED_FROM_SERVER_FLAG
  • TUTORIAL_IS_DIRTY_LOCAL_DATA
  • POLICY_PRE_ANNOUNCE_DATE
  • POLICY_ANNOUNCE_DATE
  • BN_CONTENT_RUN
  • BN_CONTENT_AGREE_ANALYSIS
  • BN_CONTENT_AGREE_ADVERTISEMENT

其中只有 VIEWER_ID 通过 config.json 配置,其余值按当前已验证样本固定写入。

使用方法

  1. build/version.dllbuild/cgss-borderless-helper.exebuild/libwinpthread-1.dll 一起复制到 imascgstage.exe 同目录
  2. 如需覆盖地址,在同目录放置 config.json
  3. 启动游戏
  4. 进入游戏后按 F11 切换无边框全屏
  5. 如果 hook 未生效,查看 cgss-dmm-hook.logcgss-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 会在进入代理代码前直接拒绝加载,此时通常表现为游戏无法启动,且不会生成任何日志。
  • makemake 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 开源。