Cheat Engine有一个叫做速度黑客的功能,它基本上可以减慢或提高游戏的速度。实际上,不仅仅是游戏,如果有一个带有时钟滴答的软件,它也可以加快速度。这是如何工作的呢?我可能会想象有一些内在的时钟,这些事情在上面运行,但不确定这些事情是如何在低水平上发生的。
虽然这个功能在我尝试的大多数游戏上都有效,但在许多游戏上也失败了,例如NFS最想要的游戏。为什么?这些游戏有没有不同的运行机制,或者只是一些反作弊的机制?
发布于 2016-09-07 01:59:07
三年后,我想我知道的足够回答我自己的问题了。:)
计算机程序通常使用称为系统调用的预定义函数与内核通信。每个操作系统都有一组不同的调用,但它们通常执行类似的操作,如分配内存、读写文件或处理进程。根据this page的说法,在Windows NT内核中有大约480+系统调用。
对于处理硬件的任何目的,程序通常求助于系统调用,因为这是操作系统最擅长的,而其中一件事恰好是知道时间。电脑游戏通常需要渲染60帧/秒,为了实现这一点,他们需要每隔16.6ms调用一次渲染函数。在Windows上,"GetTickCount()(https://msdn.microsoft.com/en-us/library/windows/desktop/ms724408(v=vs.85%29.aspx)“通常用于返回自窗口启动以来经过的毫秒数(”如果自上次滴答计数以来没有经过的毫秒数大于16ms,则渲染一个新帧,否则继续。“)。
一般而言,SpeedHacking的工作方式是将代码注入正在运行的进程中,并修改计时函数以返回加速/减速的“滴答”,从而修改程序的运行速度。
虽然,我不能确定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;
}
我不确定它是如何被检测到的,但我会同意@Harold的想法,即游戏可能会发现DLL被注入。
发布于 2014-07-18 18:02:05
作弊引擎旧 Speedhack:
作弊引擎新 Speedhack:
当作弊引擎速度dll被注入到程序中时,它会修改为您在作弊引擎面板中选择的速度。
的基本参考
检测:
来源: http://wiki.cheatengine.org/index.php?title=Cheat_Engine:Internals#Speedhack
发布于 2015-10-17 04:18:52
我认为它在一些应用程序(主要是游戏)中不起作用的原因是,一些游戏将游戏中的时钟与每秒的帧数联系起来。因此,如果你试图加速它,你的游戏将会变慢或崩溃。
来源: http://hackerbot.net/tutorials/353-speed-up-hack-slow-down-cheat
就我个人而言,我只遇到过很少的游戏不会对speedhack做出反应。即使它们与FPS捆绑在一起,你仍然可以在某种程度上加速它。
https://stackoverflow.com/questions/17512906
复制相似问题