2013-07-07 134 views
16

Cheat Engine附带一个称为速度黑客的功能,它基本上可以减慢或提高游戏速度。实际上,不仅游戏,如果有时钟滴答软件,它也可以加快速度。这是如何运作的?我可以想象有一些内部时钟可以运行这些事情,但不知道这些事情是如何发生在低级别的。CheatEngine的速度如何工作?

尽管这个功能对我尝试过的大多数游戏都有效,但它在很多方面也失败了,例如NFS Most想要的。为什么?这些游戏运行有没有什么不同的机制,或者只是一些反作弊?

回答

11

作弊引擎 Speedhack:

  • 运行在一个非常高的优先级的线程
  • 采用定时睡眠,以加快游戏
  • 当一个函数被调用的应用程序,它会给予一个加速的模拟计时器

作弊引擎 Speedhack:

  • 当作弊引擎速度DLL被注入到程序时,它被修改为您在作弊引擎面板
  • 选择的速度设置的当前时间
  • 返回时间= basetime +基准参照( (CURRENTTIME-basetime)*速度

检测:

  • 这两种方法都容易通过发送PACKE检测随着时间每隔几秒钟吨至由服务器进行验证
  • 游戏可能能够检测该dll被注入

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

4

我想它之所以在某些应用程序(主要是游戏)中不起作用的是,某些游戏将游戏内时钟与每秒帧数关联起来。因此,如果您尝试加快速度,您的游戏会减速或崩溃。

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

个人而言,我只遇到过极少数的游戏,难道不给speedhack反应。即使它们与FPS绑定,你仍然可以在一定程度上加快它的速度。

6

三年后,我想我已经足够回答我自己的问题了。 :)

计算机程序通常使用预定义的函数与系统调用进行通信。每个操作系统都有一组不同的调用,但通常他们做类似的事情 - 分配内存,读写文件或处理进程。根据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注入。

+2

术语nitpick:看起来像'gettimeofday()'的libc包装的钩子,而不是用修改后的'sys_gettimeofday()'函数构建自定义内核。所以你可以说他们挂钩了gettimeofday包装函数来拦截系统调用并修改返回值。 –