Cheat Engine附带一个称为速度黑客的功能,它基本上可以减慢或提高游戏速度。实际上,不仅游戏,如果有时钟滴答软件,它也可以加快速度。这是如何运作的?我可以想象有一些内部时钟可以运行这些事情,但不知道这些事情是如何发生在低级别的。CheatEngine的速度如何工作?
尽管这个功能对我尝试过的大多数游戏都有效,但它在很多方面也失败了,例如NFS Most想要的。为什么?这些游戏运行有没有什么不同的机制,或者只是一些反作弊?
Cheat Engine附带一个称为速度黑客的功能,它基本上可以减慢或提高游戏速度。实际上,不仅游戏,如果有时钟滴答软件,它也可以加快速度。这是如何运作的?我可以想象有一些内部时钟可以运行这些事情,但不知道这些事情是如何发生在低级别的。CheatEngine的速度如何工作?
尽管这个功能对我尝试过的大多数游戏都有效,但它在很多方面也失败了,例如NFS Most想要的。为什么?这些游戏运行有没有什么不同的机制,或者只是一些反作弊?
作弊引擎老 Speedhack:
作弊引擎新 Speedhack:
检测:
来源: http://wiki.cheatengine.org/index.php?title=Cheat_Engine:Internals#Speedhack
我想它之所以在某些应用程序(主要是游戏)中不起作用的是,某些游戏将游戏内时钟与每秒帧数关联起来。因此,如果您尝试加快速度,您的游戏会减速或崩溃。
来源:http://hackerbot.net/tutorials/353-speed-up-hack-slow-down-cheat
个人而言,我只遇到过极少数的游戏,难道不给speedhack反应。即使它们与FPS绑定,你仍然可以在一定程度上加快它的速度。
三年后,我想我已经足够回答我自己的问题了。 :)
计算机程序通常使用预定义的函数与系统调用进行通信。每个操作系统都有一组不同的调用,但通常他们做类似的事情 - 分配内存,读写文件或处理进程。根据this page,在Windows NT内核中大约有480多个系统调用。
对于处理硬件的任何目的,程序通常会诉诸于系统调用,因为这是操作系统最擅长的,而其中的一件事正好是知道时间。电脑游戏通常需要渲染60帧/秒,并且为了实现这一点,他们需要每调用一次渲染函数16.6ms。在Windows上,“GetTickCount()”通常用于此操作,它返回自Windows启动以来经过的毫秒数(“如果从最后一个滴答计数大于012毫秒后过去的毫秒数大于16ms,则渲染一个新的帧,否则继续。 )。一般来说,通过将代码注入正在运行的进程并且破解计时函数以返回加速/减慢“时钟”来修改程序的运行速度,其工作原理如下。虽然我不能确定CE究竟是如何实现的(源代码很难理解),但另一位程序员在Linux上也得到了类似的结果(video)。在source code中,您可以看到作者如何为此修改了针对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;
}
我不知道它是如何检测到的,但我会用@哈罗德的想法,即游戏可能会发现DLL注入。
术语nitpick:看起来像'gettimeofday()'的libc包装的钩子,而不是用修改后的'sys_gettimeofday()'函数构建自定义内核。所以你可以说他们挂钩了gettimeofday包装函数来拦截系统调用并修改返回值。 –