CheatEngine 的速度破解如何工作?

Posted

技术标签:

【中文标题】CheatEngine 的速度破解如何工作?【英文标题】:How does CheatEngine's speed hack work? 【发布时间】:2013-07-04 23:23:48 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

作弊引擎旧版 Speedhack:

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

作弊引擎 Speedhack:

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

检测:

这两种方法都很容易检测到,只需每隔几秒发送一个数据包,并由服务器验证时间 游戏可能能够检测到被注入的 dll

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

【讨论】:

【参考方案2】:

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

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

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

通常,SpeedHacking 通过将代码注入运行进程并破解计时函数以返回加速/减速“滴答声”来修改程序的运行速度。

虽然,我不能确定 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;

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

【讨论】:

术语 nitpick:这看起来像是 gettimeofday() 的 libc 包装器的钩子,而不是使用修改后的 sys_gettimeofday() 函数构建自定义内核。所以你可以说他们挂钩了 gettimeofday 包装函数来拦截系统调用并修改返回值。 并不是我不同意你关于使用 GetTickCount() 的应用程序,但作为一个程序员,使用它是一个糟糕的函数,因为它需要链接到多媒体库,并且只能精确到 8 到16 毫秒。我更喜欢 clock() ,它应该精确到 CLOCKS_PER_SEC (1000) 或 1ms。虽然 GetTickCount 是否有一些内在的稳定性(肯定是因为某种原因它在多媒体库中),但我不能说。 我不能说 CheatEngine 是如何做到的,但十年前,我希望 WarZone 2100 在研究技术的同时运行得更快。我为 GetTickCount 注入了一个补丁,我只需返回原始函数的结果乘以 4。就像一个魅力。【参考方案3】:

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

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

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

【讨论】:

以上是关于CheatEngine 的速度破解如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

cheat engine如何设置中文版

Windows 逆向CheatEngine 工具 ( CheatEngine 简介 | 使用 Lazarus 编译 CE 源码 | CheatEngine 相关文档资料 )

cheatengine怎么用

cheatengine怎么用

cheatengine怎么用

MySQL 查询 limit 1000,10 和 limit 10 速度一样快吗? 深度分页如何破解