CheatEngine的速度如何破解?

时间:2013-07-07 14:15:25

标签: low-level anti-cheat

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

虽然这个功能适用于我尝试过的大多数游戏,但它在很多游戏上都失败了,例如,NFS最想要的。为什么?这些游戏有没有不同的机制,或者只是一些反作弊?

3 个答案:

答案 0 :(得分:14)

作弊引擎 Speedhack:

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

作弊引擎 Speedhack:

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

检测:

  • 这两种方法都很容易通过发送数据包来检测,每隔几秒钟由服务器验证一次
  • 游戏可能能够检测到正在注入的dll

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

答案 1 :(得分:9)

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

计算机程序通常使用称为系统调用的预定义函数与内核通信。每个操作系统都有一组不同的调用,但通常会执行类似的操作 - 分配内存,读写文件或处理进程。根据{{​​3}},Windows NT内核中有大约480个以上的系统调用。

出于处理硬件的任何目的,程序通常采用系统调用,因为这是操作系统最擅长的,而其中一项恰好是知道时间。计算机游戏通常需要渲染60帧/秒,为了实现这一点,他们需要每隔<16.6ms 调用一次渲染功能。在Windows上,通常使用“this page”来返回自Windows启动以来经过的毫秒数(“如果自上次滴答计数超过 16ms 以来没有经过毫秒数,继续渲染一个新的框架。“)。

一般来说,SpeedHacking的工作原理是将代码注入到正在运行的进程中并破解计时功能以返回加速/减速“滴答”以修改程序的运行速度。

虽然,我无法确定CE是如何实现的(源代码很难理解),但另一位程序员在Linux上发布了类似的事情(GetTickCount())。在video中,您可以看到作者如何为此修改了类似的Linux系统调用(“source code”)。

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被注入了。

答案 2 :(得分:4)

我认为它在某些应用程序(主要是游戏)中不起作用的原因是某些游戏将游戏内时钟与每秒帧数相关联。因此,如果你试图快速解决它,你的游戏会变慢或崩溃。

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

就我个人而言,我只遇到了很少的游戏,不会对速度有所反应。即使它们与FPS联系在一起,你仍然可以在某种程度上加速它。