作弊引擎带有一个名为 speed hack 的功能,它基本上可以减慢或提高游戏速度。实际上,不仅是游戏,如果有一个时钟滴答作响的软件,它也可以加快速度。这是如何运作的?我可能会想象有一些内部时钟在运行这些事情,但不确定这些事情是如何在低级别发生的。
虽然这个功能在我尝试的大多数游戏上都有效,但在许多游戏上也失败了,例如 NFS Most Wanted。为什么?这些游戏运行时是否有任何不同的机制,或者只是一些反作弊?
作弊引擎带有一个名为 speed hack 的功能,它基本上可以减慢或提高游戏速度。实际上,不仅是游戏,如果有一个时钟滴答作响的软件,它也可以加快速度。这是如何运作的?我可能会想象有一些内部时钟在运行这些事情,但不确定这些事情是如何在低级别发生的。
虽然这个功能在我尝试的大多数游戏上都有效,但在许多游戏上也失败了,例如 NFS Most Wanted。为什么?这些游戏运行时是否有任何不同的机制,或者只是一些反作弊?
作弊引擎旧Speedhack:
作弊引擎新的Speedhack:
检测:
来源: http ://wiki.cheatengine.org/index.php?title=Cheat_Engine:Internals#Speedhack
三年后,我想我知道的足够回答我自己的问题了。:)
计算机程序通常使用称为系统调用的预定义函数与内核通信。每个操作系统都有一组不同的调用,但它们通常做类似的事情——分配内存、读写文件或处理进程。根据这个页面,Windows NT 内核中大约有 480 多个系统调用。
对于任何处理硬件的目的,程序通常会求助于系统调用,因为这是操作系统最擅长的,而其中之一恰好是知道时间。电脑游戏通常需要渲染 60 帧/秒,为了实现这一点,他们需要每16.6 毫秒调用一次渲染函数。在 Windows 上,“ GetTickCount() ”通常用于返回自 Windows 启动以来经过的毫秒数(“如果自上次滴答计数超过16ms后经过的毫秒数,则渲染一个新帧,否则继续。” )。
一般来说,SpeedHacking 通过将代码注入运行进程并破解计时函数以返回加速/减速“滴答声”来修改程序的运行速度。
虽然,我不能确定 CE 究竟是如何实现这一点的(源代码很难理解),但另一位程序员在 Linux 上完成了类似的事情(视频)。在源代码中,您可以看到作者如何为此修改了类似的 Linux 系统调用(“ gettimeofday() ”)。
go gettimeofday_orig;
int val;
gettimeofday_orig=(go)dlsym(RTLD_NEXT,"gettimeofday");
if (!timezero)
{
timezero = new timeval;
val = gettimeofday_orig(timezero,tz);
(*tv) = (*timezero);
return val;
}
我不确定它是如何被检测到的,但我会接受@Harold 的想法,即游戏可能会发现 DLL 被注入。
我认为它在某些应用程序(主要是游戏)中不起作用的原因是某些游戏将游戏内时钟链接到每秒帧数。因此,如果您尝试对其进行快速破解,您的游戏将会变慢或崩溃。
来源: http ://hackerbot.net/tutorials/353-speed-up-hack-slow-down-cheat
就我个人而言,我只遇到过很少对 speedhack 做出反应的游戏。即使它们与 FPS 相关联,您仍然可以在某种程度上对其进行快速破解。