Skip to content

开发者文档

Game1024 edited this page Oct 28, 2025 · 3 revisions

项目介绍

项目架构

  • Qt5: 作为软件的UI开发库
  • ProcessMonitor: 监控系统进程,同时管理进程注入状态
  • bridge: brige32和bridge64分别用来将速度补丁注入32位和64位的游戏进程
  • winutils: 对win32 API调用的封装,主要封装了不同的注入方法函数和进程内存访问函数
  • minhook: 在速度补丁DLL中,用inline hook的方式篡改系统时间函数
image

技术原理

时间函数篡改主要是通过inline hook + Trampoline跳板技术实现,原理图如下,简单说明一下

  • 目标函数:是我们准备Hook的Windows系统调用函数
  • Detour函数:是我们自己定义的篡改的时间函数,用来返回一个欺骗游戏的时间值

概括一下这张图的原理:就是将目标函数中的前5个字节修改成JMP汇编指令,让原本系统调用函数的流程跳到我们自己编写的Detour函数中,从而执行我们自己的时间函数代码,并最后返回一个经过倍率计算后的时间值

image

欺骗时间计算公式

现在我们已经知道了变速的核心技巧,但是这个篡改后的返回值应该是多少呢?

为了使变速返回的效果更确信稳定,我们必须搞清楚这个篡改后返回的值到底应该怎么算出来,这里我直接给出计算公式

篡改后的计算公式:detourcall = baseline + (kernelcall - baseline) * 变速倍率

各变量含义如下

  • baseline:时间参照基点,可以使用DLL的注入的时间作为基点
  • kernelcall: 原本调用Windows系统时间函数返回的值
  • detourcall: 我们定义的时间函数返回的值

举个例子,我想要让游戏加速2倍,那么时间得计算如下 0424263f-edc5-481d-a528-4266e4f93668

📕编译说明

构建工具

  • Qt6 IDE 开源社区版(注意这里只是IDE,不是依赖库)
  • MSVC编译器(不要用MinGW)
  • vcpkg(包依赖管理)

特别说明一下,为什么我没有选择Qt6作为依赖库,原因是OpenSpeedy需要编译出x86和x64的速度补丁,而恰好Qt6是不支持x86架构的,所以只能选择Qt5作为依赖库来编译整个项目

依赖库

  • Qt5 x86和x64 静态库
  • Qt5 winextras 模块

🔨开发环境搭建

Qt6 IDE

我们使用开源版的IDE就够了,直接去官网下载,正常流程安装

下载地址:https://www.qt.io/download-open-source

MSVC 编译器

使用VS Studio安装器安装,安装的时候在弹出的界面选择C++桌面开发选项

下载地址:https://visualstudio.microsoft.com

image

安装Qt5静态依赖库

OpenSpeedy 依赖Qt5静态库编译,推荐使用vcpkg安装Qt5的静态库,可以省去很多编译的麻烦

安装vcpkg可以参考官方文档 set-up-vcpkg章节

vcpkg安装成功后,执行一下命令安装依赖库

rem 安装32bit的qt5静态库
vcpkg install qt5:x86-windows-static

rem 安装64bit的qt5静态库
vcpkg install qt5:x64-windows-static

rem 安装qt5 winextras 模块
vcpkg install qt5-winextras:x64-windows-static
vcpkg install qt5-winextras:x86-windows-static

如果你在安装qt5-winextras时报错缺少MFC/ATL库,请跳转到FAQ章节,查看解决方法

配置QtCreator构建套件

安装好Qt5的静态库后,需要在IDE中配置,方能在编译的时候告诉编译工具使用对应的Qt5静态库版本,操作步骤如下

  1. 添加Qt版本 选择安装好的Qt5静态库的qmake:x86的Qt5静态库 & x64的Qt5静态库
  1. 设置构建套件

注意x86的编译器需要和x86的Qt静态库匹配,x64的编译器需要和x64的Qt静态库匹配

image image

编译项目

打开项目的CMakeLists.txt文件,选择刚刚创建好的构建套件

image image

🔍FAQ

安装qt5-winextras库报错

如下图,原因是因为没有安装MFC和ATL库

解决方法:通过Visual Studio安装器安装MFC和ATL即可, 打开VS安装器,点击修改,弹出安装界面,勾选适用于最新xxx的MFC、ATL

image image image

编译前代码页(936)报错

提示包含不能在当前代码页(936)中表示的字符,如下图

解决办法:需要将Windows系统设置成默认UTF-8编码的格式

image

在设置 -> 时间和语言 -> 语言和区域 -> 相关设置 > 管理语言设置 -> 更改系统区域设置 打开Beta版:使用Unicode UTF-8提供全球语言支持开关

image