Cheat Engine
Reading time: 10 minutes
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
Cheat Engine 是一个有用的程序,可以找到在运行游戏的内存中保存的重要值并进行更改。
当你下载并运行它时,你会 看到 一个 教程,介绍如何使用该工具。如果你想学习如何使用该工具,强烈建议完成它。
你在搜索什么?
这个工具非常有用,可以找到 某个值(通常是一个数字) 在程序的内存中存储的位置。
通常数字 以 4字节 形式存储,但你也可以找到 双精度 或 浮点 格式,或者你可能想寻找 不同于数字 的东西。因此,你需要确保 选择 你想要 搜索的内容:
你还可以指示 不同 类型的 搜索:
你还可以勾选框以 在扫描内存时停止游戏:
热键
在 编辑 --> 设置 --> 热键 中,你可以为不同的目的设置不同的 热键,例如 停止 游戏(如果你想在某个时刻扫描内存,这非常有用)。还有其他选项可用:
修改值
一旦你 找到 你 寻找的值(更多内容在接下来的步骤中),你可以通过双击它来 修改它,然后双击它的值:
最后 勾选复选框 以在内存中完成修改:
对 内存 的 更改 将立即 应用(请注意,直到游戏不再使用此值,该值 不会在游戏中更新)。
搜索值
所以,我们假设有一个重要的值(比如你用户的生命值)你想要提高,并且你正在内存中寻找这个值)
通过已知的变化
假设你在寻找值 100,你 执行扫描 搜索该值,并且你发现了很多匹配项:
然后,你做了一些事情使得 值发生变化,你 停止 游戏并 执行 下一次扫描:
Cheat Engine 将搜索 从 100 变为新值 的 值。恭喜,你 找到了 你在寻找的 地址,现在你可以修改它。
如果你仍然有多个值,做一些事情再次修改该值,并执行另一个“下一次扫描”以过滤地址。
未知值,已知变化
在你 不知道值 但你知道 如何使其变化(甚至变化的值)的情况下,你可以寻找你的数字。
所以,首先执行一种类型为“未知初始值”的扫描:
然后,使值发生变化,指示 值 如何变化(在我的情况下是减少了 1)并执行 下一次扫描:
你将看到 所有以所选方式修改的值:
一旦你找到了你的值,你可以修改它。
请注意,有很多 可能的变化,你可以根据需要 多次执行这些步骤 以过滤结果:
随机内存地址 - 查找代码
到目前为止,我们学习了如何找到存储值的地址,但在 游戏的不同执行中,该地址很可能位于内存的不同位置。所以让我们找出如何始终找到该地址。
使用一些提到的技巧,找到当前游戏存储重要值的地址。然后(如果你愿意,可以停止游戏)右键单击找到的 地址 并选择“查找访问此地址的内容”或“查找写入此地址的内容”:
第一个选项 有助于了解 代码 的 哪些部分 在 使用 此 地址(这对于更多事情很有用,比如 知道你可以在哪里修改游戏的代码)。
第二个选项 更加 具体,在这种情况下更有帮助,因为我们想知道 这个值是从哪里写入的。
一旦你选择了其中一个选项,调试器 将 附加 到程序,并且会出现一个新的 空窗口。现在,玩 游戏 并 修改 该 值(无需重新启动游戏)。窗口 应该会 填充 正在 修改 该 值 的 地址:
现在你找到了修改值的地址,你可以 随意修改代码(Cheat Engine 允许你快速将其修改为 NOP):
因此,你现在可以修改它,使得代码不会影响你的数字,或者总是以积极的方式影响它。
随机内存地址 - 查找指针
按照之前的步骤,找到你感兴趣的值。然后,使用“查找写入此地址的内容”找出哪个地址写入此值,并双击它以获取反汇编视图:
然后,执行新的扫描 搜索“[]”之间的十六进制值(在这种情况下是 $edx 的值):
(如果出现多个,通常需要最小的地址)
现在,我们已经 找到了将修改我们感兴趣的值的指针。
点击“手动添加地址”:
现在,勾选“指针”复选框,并在文本框中添加找到的地址(在这种情况下,前一张图片中找到的地址是 "Tutorial-i386.exe"+2426B0):
(注意第一个“地址”是从你输入的指针地址自动填充的)
点击确定,一个新的指针将被创建:
现在,每次你修改该值时,即使值所在的内存地址不同,你也在 修改重要值。
代码注入
代码注入是一种技术,你将一段代码注入目标进程,然后重新路由代码的执行以通过你自己编写的代码(例如给你积分而不是减少它们)。
所以,想象一下你找到了一个地址,它正在从你的玩家生命中减去 1:
点击显示反汇编以获取 反汇编代码。
然后,点击 CTRL+a 调出自动汇编窗口并选择 模板 --> 代码注入
填写 你想要修改的指令的地址(这通常是自动填充的):
将生成一个模板:
因此,将你的新汇编代码插入到“newmem”部分,并从“originalcode”中删除原始代码,如果你不想让它被执行。在这个例子中,注入的代码将增加 2 分而不是减去 1:
点击执行等等,你的代码应该被注入到程序中,改变功能的行为!
参考
- Cheat Engine 教程,完成它以学习如何开始使用 Cheat Engine
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。