33

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

虽然这个功能在我尝试的大多数游戏上都有效,但在许多游戏上也失败了,例如 NFS Most Wanted。为什么?这些游戏运行时是否有任何不同的机制,或者只是一些反作弊?

4

3 回答 3

20

作弊引擎Speedhack:

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

作弊引擎新的Speedhack:

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

检测:

  • 这两种方法都可以通过每隔几秒发送一个数据包来轻松检测到,以供服务器验证
  • 游戏可能能够检测到被注入的dll

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

于 2014-07-18T10:02:05.387 回答
20

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

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

对于任何处理硬件的目的,程序通常会求助于系统调用,因为这是操作系统最擅长的,而其中之一恰好是知道时间。电脑游戏通常需要渲染 60 帧/秒,为了实现这一点,他们需要每16.6 毫秒调用一次渲染函数。在 Windows 上,“ GetTickCount() ”通常用于返回自 Windows 启动以来经过的毫秒数(“如果自上次滴答计数超过16ms后经过的毫秒数,则渲染一个新帧,否则继续。” )。

一般来说,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;
}

我不确定它是如何被检测到的,但我会接受@Harold 的想法,即游戏可能会发现 DLL 被注入。

于 2016-09-06T17:59:07.280 回答
5

我认为它在某些应用程序(主要是游戏)中不起作用的原因是某些游戏将游戏内时钟链接到每秒帧数。因此,如果您尝试对其进行快速破解,您的游戏将会变慢或崩溃。

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

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

于 2015-10-16T20:18:52.297 回答