CheatEngine的加速作弊是如何工作的?

40

Cheat Engine提供了一个名为速度提升的功能,可以加速或减慢游戏运行速度。实际上不仅仅是游戏,如果有计时器的软件也可以被加速。这是如何实现的呢?我可以想象这些程序内部会有一些时钟来运行,但不确定在低层次上是如何实现的。

虽然这个功能在我试过的大多数游戏上都有效,但在许多游戏中也失败了,例如《极品飞车:最想要》。为什么?这些游戏运行的机制是否不同,还是只是一些反作弊措施?

3个回答

27
三年后,我想我已经知道足够回答自己的问题了。:)
计算机程序通常使用预定义函数(称为系统调用)与内核通信。每个操作系统都有一组不同的调用,但通常它们会执行类似的任务,比如分配内存、读写文件或处理进程。根据这个页面,Windows NT 内核中大约有 480 多个系统调用。
对于与硬件相关的任何目的,程序通常会诉诸于系统调用,因为这正是操作系统最擅长的事情之一,而且其中一个就是知道时间。电脑游戏通常需要以每秒 60 帧的速度渲染画面,并且为此他们需要每16.6 毫秒调用一次渲染函数。在 Windows 上,通常使用“GetTickCount()”来实现这一点,该函数返回自 Windows 启动以来经过的毫秒数(“如果自上一个时刻计数以来经过的毫秒数超过16ms,则渲染新帧,否则继续。”)。
总体而言,SpeedHacking 是通过将代码注入正在运行的进程并窃取计时函数来返回加速/减速的“ticks”,以修改程序的运行速度。
虽然我不能确定 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被注入了。


5
жңҜиҜӯз»ҶиҠӮпјҡйӮЈзңӢиө·жқҘеғҸжҳҜй’©еҸ–дәҶlibcеҢ…иЈ…еҷЁзҡ„gettimeofday()еҮҪж•°пјҢиҖҢдёҚжҳҜжһ„е»әдёҖдёӘиҮӘе®ҡд№үеҶ…ж ёдёҺдҝ®ж”№иҝҮзҡ„sys_gettimeofday()еҮҪж•°гҖӮеӣ жӯӨпјҢдҪ еҸҜд»ҘиҜҙ他们钩еҸ–дәҶgettimeofdayеҢ…иЈ…еҮҪж•°жқҘжӢҰжҲӘзі»з»ҹи°ғ用并дҝ®ж”№иҝ”еӣһеҖјгҖӮ - Peter Cordes
我并不是在反驳你关于应用程序使用GetTickCount()的观点,但作为一名程序员,它是一个非常糟糕的函数,因为它需要链接到多媒体库,并且只能精确到8至16毫秒之间。我更喜欢clock()函数,它被认为是精确到CLOCKS_PER_SEC(1000)或1毫秒。虽然GetTickCount可能有一些固有的稳定性(毕竟它肯定是出于某种原因而存在于多媒体库中),但我无法确定。 - Orwellophile
我不知道CheatEngine是如何做到的,但十年前,我想让WarZone 2100在研究技术时运行得更快。我注入了一个GetTickCount的补丁,在其中返回原始函数结果乘以4。效果非常好。 - user1532080

23

Cheat Engines 旧版 速度hack:

  • 在一个非常高的优先级线程中运行应用程序
  • 使用定时睡眠来加速游戏
  • 当调用一个函数时,它将被赋予一个模拟计时器,该计时器将被加速

Cheat Engines 新版 速度hack:

  • 当Cheat Engine速度dll注入到程序中时,它会被修改为您在Cheat Engine面板中选择的速度
  • 设置当前时间的基础参考点
  • 返回时间=基准时间+((当前时间-基准时间)×速度

检测:

  • 通过每隔几秒发送一个包含时间的数据包进行验证,两种方法都很容易被检测到
  • 游戏可能能够检测到注入的dll文件

来源:http://wiki.cheatengine.org/index.php?title=Cheat_Engine:Internals#Speedhack


6
我认为它在某些应用程序(主要是游戏)中无法正常工作的原因是,一些游戏将游戏内时钟与每秒帧数链接起来。因此,如果您尝试加速它,您的游戏将变慢或崩溃。

来源: http://hackerbot.net/tutorials/353-speed-up-hack-slow-down-cheat

就个人而言,我只遇到过很少数不会对速度作弊做出反应的游戏。即使它们被绑定到FPS上,您仍然可以将其速度作弊到一定程度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接