CheatEngine的速度如何破解?

Shu*_*ham 26 low-level anti-cheat

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

虽然这个功能已经在我尝试的大多数游戏中都有效,但它在许多游戏上都失败了,例如,NFS最想要的.为什么?有没有不同的机制来运行这些游戏,或者只是一些反作弊?

小智 17

作弊引擎旧的 Speedhack:

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

作弊引擎新的 Speedhack:

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

检测:

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

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


Shu*_*ham 12

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

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

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

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

虽然,我无法确定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;
}
Run Code Online (Sandbox Code Playgroud)

我不确定它是如何被发现的但是我会跟@ Harold一样认为游戏可能会发现DLL被注入了.

  • 术语nitpick:它看起来像`gettimeofday()`的libc包装器的钩子,没有用修改过的`sys_gettimeofday()`函数构建自定义内核.所以你可以说他们挂钩了gettimeofday包装器函数来拦截系统调用并修改返回值. (3认同)

小智 6

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

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

就我个人而言,我只遇到过极少数不会对 speedhack 做出反应的游戏。即使它们与 FPS 相关,您仍然可以在某种程度上对其进行加速。