-
-
Notifications
You must be signed in to change notification settings - Fork 960
开发者文档
- Qt5: 作为软件的UI开发库
- ProcessMonitor: 监控系统进程,同时管理进程注入状态
- bridge: brige32和bridge64分别用来将速度补丁注入32位和64位的游戏进程
- winutils: 对win32 API调用的封装,主要封装了不同的注入方法函数和进程内存访问函数
- minhook: 在速度补丁DLL中,用inline hook的方式篡改系统时间函数
时间函数篡改主要是通过inline hook + Trampoline跳板技术实现,原理图如下,简单说明一下
- 目标函数:是我们准备Hook的Windows系统调用函数
- Detour函数:是我们自己定义的篡改的时间函数,用来返回一个欺骗游戏的时间值
概括一下这张图的原理:就是将目标函数中的前5个字节修改成JMP汇编指令,让原本系统调用函数的流程跳到我们自己编写的Detour函数中,从而执行我们自己的时间函数代码,并最后返回一个经过倍率计算后的时间值
现在我们已经知道了变速的核心技巧,但是这个篡改后的返回值应该是多少呢?
为了使变速返回的效果更确信稳定,我们必须搞清楚这个篡改后返回的值到底应该怎么算出来,这里我直接给出计算公式
篡改后的计算公式:detourcall = baseline + (kernelcall - baseline) * 变速倍率
各变量含义如下
- baseline:时间参照基点,可以使用DLL的注入的时间作为基点
- kernelcall: 原本调用Windows系统时间函数返回的值
- detourcall: 我们定义的时间函数返回的值
举个例子,我想要让游戏加速2倍,那么时间得计算如下

- Qt6 IDE 开源社区版(注意这里只是IDE,不是依赖库)
- MSVC编译器(不要用MinGW)
- vcpkg(包依赖管理)
特别说明一下,为什么我没有选择Qt6作为依赖库,原因是OpenSpeedy需要编译出x86和x64的速度补丁,而恰好Qt6是不支持x86架构的,所以只能选择Qt5作为依赖库来编译整个项目
- Qt5 x86和x64 静态库
- Qt5 winextras 模块
我们使用开源版的IDE就够了,直接去官网下载,正常流程安装
下载地址:https://www.qt.io/download-open-source
使用VS Studio安装器安装,安装的时候在弹出的界面选择C++桌面开发选项
下载地址:https://visualstudio.microsoft.com
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章节,查看解决方法
安装好Qt5的静态库后,需要在IDE中配置,方能在编译的时候告诉编译工具使用对应的Qt5静态库版本,操作步骤如下
- 添加Qt版本 选择安装好的Qt5静态库的qmake:x86的Qt5静态库 & x64的Qt5静态库
- 设置构建套件
注意x86的编译器需要和x86的Qt静态库匹配,x64的编译器需要和x64的Qt静态库匹配
打开项目的CMakeLists.txt文件,选择刚刚创建好的构建套件
如下图,原因是因为没有安装MFC和ATL库
解决方法:通过Visual Studio安装器安装MFC和ATL即可, 打开VS安装器,点击修改,弹出安装界面,勾选适用于最新xxx的MFC、ATL
提示包含不能在当前代码页(936)中表示的字符,如下图
解决办法:需要将Windows系统设置成默认UTF-8编码的格式
在设置 -> 时间和语言 -> 语言和区域 -> 相关设置 > 管理语言设置 -> 更改系统区域设置 打开Beta版:使用Unicode UTF-8提供全球语言支持开关