前言
游戏作弊我认为应该属于网络安全的一个具体场景,算是网络攻防对抗的一个具体事例,并且随着娱乐性质的游戏广泛传播,很多人可能没听过DOS攻击,但游戏外挂多少都听到过一些,游戏作弊的方式有很多,比如开图卦、瞬移卦、连招卦等等,很多外挂的形式与游戏类型有关,比如开图卦经常会在MOBA类型中出现,而像游戏提示脚本更是数不胜数,这类脚本很多并没有攻击游戏本身,只是一个收集数据统计显示的作用,甚至很多外挂脚本随着游戏版本的更迭变成了游戏内部的功能,我喜欢称之为“内挂”,类似记牌器这种。
最近也是有玩家反应,在回合制PVP游戏中,对面低属性玩家根本毫无胜算,但是利用变速机制拖慢战斗节奏成心恶心自己,姑且不论这算不算一种战术,单从技术分析这种玩家是怎么做到的,也就是游戏变速是怎么实现的。想想我们平时看视频的时候,很多长内容在浮躁的内心下不开倍速是很难看下去的,为什么45分钟的视频可以在15分钟内播完呢?开3倍速就可以了呀,游戏也是一样,游戏中的时间是我们赋予给游戏的资源,速度是可变的,甚至说我们现实中的时间也是可以根据各自的情况进行改变的,比如夏令时的提出,【难说我们自己不是被高维生物操控的NPC】,而游戏中改变时间的快慢则更加容易,可能只要修改个系数就可以了。
游戏加速的原理
游戏加速的工具我在平时的研究和学习中使用过一些,下面以 Cheat Engine
为例来说说它的原理,它通过操控游戏程序的运行环境来实现加速,其核心原理是修改游戏的时间流逝逻辑或影响执行速度,通常有以下几种方法:
修改时间相关的函数调用
CE 的加速功能利用了现代计算机中时间的实现机制。它拦截和修改游戏程序调用的时间相关函数,从而影响游戏的时间流逝速度。
- 拦截时间函数调用
游戏程序通常通过系统的 API 或内置函数获取时间,CE 会拦截这些函数调用,并篡改返回值,使游戏感知到的时间加快或减慢。例如:- Windows 平台上的
QueryPerformanceCounter
或GetTickCount
。 - 游戏引擎中常见的时间相关函数(如 Unity 的
Time.deltaTime
)。
- Windows 平台上的
- 修改时间增量
- 游戏逻辑往往依赖于时间增量(Delta Time)计算,例如
Frame Time = Current Time - Last Time
。 - CE 通过修改返回的时间值来缩短 Delta Time,模拟游戏时间流逝得更快。
- 游戏逻辑往往依赖于时间增量(Delta Time)计算,例如
- 影响 FPS(帧率)计算
- 游戏帧率与时间逻辑密切相关,CE 通过操控时间流逝来影响帧间时间,从而提升游戏运行速度。
调整 CPU 指令执行速度
除了修改时间流逝,CE 的加速功能还可以通过直接操控程序的指令执行速度来实现。
- CPU 时钟控制(Speedhack)
- Cheat Engine 使用的 “Speedhack” 技术能够干预程序执行的指令频率。
- 它通过改变 CPU 为目标程序分配的时钟周期数,影响程序的运行速度。例如:
- 加速:让游戏在单位时间内完成更多的指令执行。
- 减速:降低程序指令执行速度,导致游戏运行变慢。
- 线程调度干预
- CE 修改游戏线程的优先级或节奏,使其在操作系统调度中获得更多的资源时间片,从而加快运行速度。
修改内存中的时间变量
Cheat Engine 可以直接修改游戏程序内存中与时间相关的变量值,影响游戏逻辑的运行速度。
- 内存扫描
- CE 会扫描游戏进程的内存地址,查找存储时间或速度的变量。
- 例如,玩家可以通过 CE 搜索一个逐步递增的数值,找到游戏内的时间计数器。
- 锁定或调整变量值
- 找到目标变量后,CE 可以将其锁定在一个固定的值,或者以更快的速度递增或递减。
- 例如,将计时器的增量调整为原来的两倍,使游戏时间流逝速度加快。
使用虚拟化技术操控环境
在现代游戏中,许多开发者会将关键逻辑交给外部库或硬件计时器处理,Cheat Engine 通过虚拟化技术操控整体环境:
- 修改虚拟机时间
- 如果游戏运行在虚拟机(如 VMware、Hyper-V)中,CE 可以直接修改虚拟机的系统时钟,加速虚拟时间流逝。
- 影响全局时钟
- 修改系统时钟速度(例如 Windows 的高精度计时器)。
- 通过动态链接库(DLL)注入影响游戏调用的时间函数。
加速外挂的检测方法
刚刚说了加速外挂的原理,对于一些影响游戏平衡和体验的外挂肯定要进行检测和治理,那么有哪些检测方法呢?游戏加速外挂的判定主要依赖于检测游戏内与外部环境的异常行为,可以分成客户端检测、服务器端检测和综合检测等策略:
客户端检测方法
客户端检测是从玩家的游戏客户端进行分析,重点是识别是否存在非正常行为或外部程序干预:
- 内存篡改检测
- 检查内存中的关键值是否被篡改,例如速度相关的参数。
- 比较内存数据的哈希值是否发生异常变化。
- 进程和模块扫描
- 检测与游戏同时运行的进程列表,寻找已知加速工具(如Cheat Engine等)。
- 扫描加载的动态链接库(DLL),检测外部注入模块。
- 窗口名称和输入异常检测
- 检查外挂常用工具(如调试器、加速器)的窗口标题。
- 分析输入信号的频率(如鼠标点击或键盘输入的速度是否超过人类极限)。
- 时间校验
- 校验本地系统时间是否被外部工具篡改(加速器可能通过修改本地时间影响游戏速度)。
服务器端检测方法
服务器端检测是通过分析玩家的网络通信和游戏内行为模式来判断加速外挂:
- 操作频率分析
- 检测玩家操作频率(如移动、攻击、交互等)是否明显超出正常范围。
- 针对每秒操作次数(APM)进行统计,判断是否超人类极限。
- 行为模式检测
- 通过机器学习或规则匹配分析玩家行为是否符合外挂模式。
- 检测不合常理的移动速度、攻击频率或技能冷却时间异常。
- 延迟和网络包检查
- 检测与服务器通信的网络延迟,识别通过外挂产生的非正常数据包(如丢包率过低或数据包频率过高)。
- 分析玩家发来的时间戳是否异常(外挂可能加速时间流逝)。
- 游戏逻辑校验
- 验证服务器端计算结果与玩家发来的数据是否一致,例如移动速度或技能冷却时间。
综合检测策略
结合客户端和服务器端的检测数据进行综合判定:
- 行为对比与异常报告
- 将玩家行为与全体玩家的历史数据进行对比,识别潜在的外挂行为。
- 通过日志分析工具记录异常行为以便进一步审查。
- 动态更新规则
- 随着外挂技术的进步,定期更新外挂检测规则和特征库。
- 利用反外挂团队搜集新型外挂的信息,及时调整检测算法。
- 诱导与陷阱机制
- 在游戏中嵌入诱导机制(如伪造漏洞或测试数据),观察玩家是否利用这些信息进行异常操作。
高级检测技术
- 反虚拟化和反调试技术
- 检测游戏是否运行在虚拟机中,防止外挂通过模拟环境绕过检测。
- 判断是否有调试工具附加到游戏进程。
- 机器学习与大数据分析
- 利用机器学习训练模型来识别异常玩家行为,尤其是高频操作或非自然行为模式。
- 分析大规模玩家数据,检测外挂使用的共性特征。
总的来说就是提取特征,判断异常,针对这一点其实有一个较为简单的方法,游戏世界时一个整体,一旦修改了时间参数,则牵一发而动全身,所有和时间相关的操作都会变形,这样的话我们就可以埋点,类似于之前网站中提交表单里的隐藏字段,我们可以通过隐藏消息固定间隔发送的方式来判断游戏时间进程是否被修改,当然这种说的是CS模式的游戏,对于单机游戏来说,时间问题无解,你创造了一个天圆地方的子世界,那在这个世界中就是天圆地方的。
总结
- 游戏作弊属于网络安全范畴,而加速外挂是游戏作弊中一个常见的门类
- 游戏加速常见有几种方式:修改时间相关的函数调用、调整 CPU 指令执行速度、修改内存中的时间变量、使用虚拟化技术操控环境
- 预防游戏加速的本质方法基本就是提取特征,判断异常,比如一个无CD的普攻,正常人可能1妙10次左右,如果1秒钟收到100次请求显然是不合理的
我命由我不由天,难道谁喊都好使吗?哪吒只是喊了一句就成功了吗?非也!去看看他出生前元始天尊的规划,去看看他师傅太乙真人的教化,去看看他父母甘愿换命的挚爱,所以现如我总觉得今以点带面这个词已经变成了一个贬义词~