有没有想过 Cheat Engine 是如何工作的?
Source: Dev.to

如果你曾在 PC 上玩过游戏,你一定听说过一个叫 Cheat Engine 的工具。在本文中,我将解释 Cheat Engine 是什么、它是如何在底层工作,以及 开发者为何应当保护他们的变量。我还会展示一个 C# 的简单示例,并说明使用现有的反作弊工具为何能节省大量时间。
本文面向 游戏开发者以及所有对网络安全感兴趣的人,帮助他们了解内存操作以及如何防止它。
什么是 Cheat Engine,为什么这么多人使用它
Cheat Engine 是一款 Windows 内存扫描器和调试器。多年来已有数百万用户下载使用。有些人用它在单人游戏中作弊,另一些人则用于 学习逆向工程、调试或修改(modding)。
我想说明一点:
Cheat Engine 本身只是一个工具。 它不会自动“破解”游戏。它仅仅 读取和写入 其他正在运行的程序的内存。
游戏会将以下数值存储在内存中:
- 金币
- 生命值
- 弹药
- 分数
Cheat Engine 帮助用户 在内存中找到这些数值 并在游戏运行时进行修改。
程序如何在内存中存储数值
当游戏运行时,它会将变量存储在 RAM(随机存取存储器) 中。例如:
Gold = 500;
Health = 100;
Ammo = 30;
这些数值以数字(通常是整数或浮点数)的形式存放在特定的内存地址上。CPU 会不断读取和写入这些数值。
内存默认情况下没有受到保护。
如果允许其他程序读取该内存,它就可以看到并修改这些数值。
Cheat Engine 如何访问和操作内存
在高层次上(不深入操作系统内部),Cheat Engine 使用普通的 Windows 系统 API 来:
- 打开一个正在运行的进程
- 读取其内存
- 搜索数值(例如,“500 金币”)
- 在数值变化时过滤结果
示例工作流程
| 步骤 | 描述 |
|---|---|
| 1 | 你一开始有 500 金币 |
| 2 | 你花掉了一些金币 → 现在剩下 450 |
| 3 | Cheat Engine 搜索从 500 变为 450 的数值 |
| 4 | 重复几次后,只剩下一个地址——金币变量 |
找到地址后,可以对该数值进行:
- 修改
- 冻结
- 替换
所有这些都在不访问游戏源代码的情况下工作。
为什么普通变量对开发者是个问题
如果游戏以这种方式存储数值:
public int Gold = 500;
那么:
- 该数值在内存中可见
- 容易被扫描
- 容易被修改
这就是为什么许多游戏 不直接存储重要数值。相反,它们会使用混淆或验证技术。
简单的 XOR 混淆示例 (C#)
一种我经常向初学者展示的易用方法是 XOR 混淆。它并不能提供完美的安全性,但可以阻止基本的内存扫描并让大多数脚本小子望而却步。
示例:混淆的金币数值
public class PlayerGold
{
private int secretKey = 0x5A3F;
private int obfuscatedGold;
public void SetGold(int value)
{
obfuscatedGold = value ^ secretKey;
}
public int GetGold()
{
return obfuscatedGold ^ secretKey;
}
}
为什么这有帮助
与其直接存储 500,内存中存储的是一个 被打乱的数字。
真实金币: 500
内存中存储: 23131 // 示例 XOR 结果
Cheat Engine 扫描很难直接找到真实数值,且修改内存中的数值通常会破坏逻辑或在使用蜜罐时什么也不产生作用。
下一步是什么
XOR 混淆是一个很好的第一步,但单独使用不足够。为了进一步强化内存并更好地保护重要变量,请结合以下额外技术:
- 在多个密钥之间切换 以防止静态模式
- 完整性检查(校验和) 用于检测意外的数值变化
- 伪造或诱饵变量(蜜罐) 用于捕获内存扫描器
- 服务器端验证 用于关键或竞争性数值
- 反调试和反内存工具 用于阻止常见的检查方法
这些技术仅代表了专注于保护变量的有效反作弊系统的一部分。实际中的保护往往更进一步,包括:
- 基于时间的验证
- 全局完整性检查
- 安装或环境验证
- 运行时行为分析
最重要的是要理解:
反作弊绝不应是单一功能;它应当是更大安全策略中的一层。
保护你的游戏,而无需重新发明一切
Cheat Engine 能够工作是因为它 观察内存随时间的变化,然后直接操控这些数值。如果重要数据以明文形式存放在 RAM 中,最终会被发现并被修改。
你 可以 通过组合上述技术来构建自己的防护系统。然而,从头开始构建 完整 的解决方案既耗时又容易出错。利用已有的、经过实战检验的反作弊库或服务可以为你带来:
- 更快的开发周期
- 对新作弊手段的定期更新
- 社区验证的可靠性
在决定自行开发之前,建议先评估已有的成熟方案。
完整的反作弊系统需要大量时间、测试以及持续的更新。攻击者适应得很快,维护防御很容易把你从最重要的事情上——开发游戏——分散注意力。
这也是许多开发者选择使用现有反作弊工具,而不是自己从头构建所有内容的原因。
已经有免费反作弊解决方案提供了以下功能:
- 内存篡改检测
- 变量完整性检查
- 运行时保护机制
例如,如果你使用 Unity,可以使用我的免费方案:
关键要点
Cheat Engine 强大是因为 客户端内存默认是公开的。
如果你信任存放在内存中的原始数值,其他人就可以修改它们。
无论你是:
- 编写自己的防护
- 使用简单的混淆
- 还是依赖现有的反作弊工具
规则都是一样的:
永远不要信任存放在内存中的明文数值。
了解 Cheat Engine 的工作原理是防御它的第一步,也是编写更安全软件的第一步。
阅读我的博客了解更多信息:www.guardingpearsoftware.com.
