# Cheat Engine

<details>

<summary><strong>从零开始学习AWS黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE（HackTricks AWS红队专家）</strong></a><strong>！</strong></summary>

支持HackTricks的其他方式：

* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**，请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family)，我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。

</details>

[**Cheat Engine**](https://www.cheatengine.org/downloads.php) 是一个有用的程序，可以找到运行游戏内存中保存重要值的位置并进行更改。\
当您下载并运行它时，会显示如何使用该工具的教程。如果您想学习如何使用该工具，强烈建议您完成教程。

## 您要搜索什么？

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-8d94176661c0cce8e1a5a93224760b8c6688aa05%2Fimage%20\(580\).png?alt=media)

这个工具非常有用，可以找到程序内存中某个值（通常是数字）的存储位置。\
通常数字以**4字节**形式存储，但您也可以找到**double**或**float**格式，或者您可能想查找与数字**不同的内容**。因此，您需要确保选择您要搜索的内容：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-6f6ed93158268be9248c4e3f68c648df12430649%2Fimage%20\(581\).png?alt=media)

您还可以指定**不同类型**的**搜索**：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-91fffc95c17891353bb96de32d5293aa1f152d8d%2Fimage%20\(582\).png?alt=media)

您还可以选中复选框**在扫描内存时停止游戏**：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-0cb31458a9f0625b47d93d50a1d0f6b84368da68%2Fimage%20\(584\).png?alt=media)

### 快捷键

在\_**编辑 --> 设置 --> 快捷键**\_中，您可以为不同目的设置不同的**快捷键**，比如**停止**游戏（如果您想扫描内存的某个时刻非常有用）。其他选项也可用：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-5d65600876b0eccaea055c00ba5e1260b3bc242e%2Fimage%20\(583\).png?alt=media)

## 修改值

一旦您**找到**了您要**查找的值**的位置（关于此更多信息请参见以下步骤），您可以通过双击它，然后双击其值来**修改它**：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-7128185495fb133fa92e5df9c4cf1e3745bd4ebd%2Fimage%20\(585\).png?alt=media)

最后，**勾选复选框**以在内存中完成修改：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-6587056c9adf6c7f1d0091e615a01398897e0abe%2Fimage%20\(586\).png?alt=media)

对内存的**更改**将立即**应用**（请注意，直到游戏再次使用此值之前，该值**不会在游戏中更新**）。

## 搜索值

因此，我们假设有一个重要值（比如您的用户生命值）您想要改进，并且您正在查找内存中的此值）

### 通过已知更改

假设您正在寻找值100，您**执行扫描**以搜索该值，然后找到许多匹配项：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-35d9fa996a39b55ae80bf59976487544582f368e%2Fimage%20\(587\).png?alt=media)

然后，您执行某些操作使**值更改**，然后**停止**游戏并**执行\*\*\*\*下一个扫描**：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-25c6a21a04eb08eee2f86982a963c2376c3fc9ad%2Fimage%20\(588\).png?alt=media)

Cheat Engine将搜索**从100变为新值**的**值**。恭喜，您**找到**了您要查找的值的**地址**，现在可以修改它。\
\&#xNAN;*如果仍然有几个值，请执行某些操作再次修改该值，并执行另一个“下一个扫描”以过滤地址。*

### 未知值，已知更改

在这种情况下，您**不知道值**，但您知道**如何使其更改**（甚至知道更改的值），您可以搜索您的数字。

因此，首先执行类型为“**未知初始值**”的扫描：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-37e88406fbbe4e45c9e44c8eda7023be33b8ffd8%2Fimage%20\(589\).png?alt=media)

然后，使值更改，指示**值如何更改**（在我的情况下，减少了1），然后执行**下一个扫描**：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-c7f15b4f57a476e13055c09b0571d66c50d5c40e%2Fimage%20\(590\).png?alt=media)

您将看到**以选定方式修改的所有值**：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-aa4339870d00672e76c91cb393cf774826589cbe%2Fimage%20\(591\).png?alt=media)

找到您的值后，您可以修改它。

请注意，有**许多可能的更改**，您可以根据需要**多次执行这些步骤**以过滤结果：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-169a0842a80eb102a68367bb704408ba931ec369%2Fimage%20\(592\).png?alt=media)

### 随机内存地址 - 查找代码

到目前为止，我们学会了如何找到存储值的地址，但很可能在**游戏的不同执行中，该地址在内存的不同位置**。因此，让我们看看如何始终找到该地址。

使用提到的一些技巧，找到当前游戏存储重要值的地址。然后（如果您愿意停止游戏），在找到的**地址**上**右键单击**，然后选择“**查找访问此地址的内容**”或“**查找写入此地址的内容**”：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-5c9179c0d7ec7a17f081a8bcbaa3316b797271b4%2Fimage%20\(593\).png?alt=media)

**第一个选项**有助于了解**代码的哪些部分**正在**使用**此**地址**（这对于更多事情如**知道在哪里可以修改游戏的代码**非常有用）。\
**第二个选项**更**具体**，在这种情况下将更有帮助，因为我们有兴趣知道**这个值是从哪里写入的**。

选择其中一个选项后，**调试器**将**附加**到程序，并将显示一个新的**空窗口**。现在，**玩**游戏并**修改**该**值**（无需重新启动游戏）。**窗口**应该**填满**正在**修改**值的**地址**：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-41d3f2694208abf8c0893b8e03c3b6265e905589%2Fimage%20\(594\).png?alt=media)

现在您找到了修改值的地址，您可以**随意修改代码**（Cheat Engine允许您快速将其修改为NOPs）：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-b523a9de6a6a97b298e8fbfd77e9775819aebb75%2Fimage%20\(595\).png?alt=media)

因此，您现在可以修改代码，使其不影响您的数字，或者始终以积极方式影响。

### 随机内存地址 - 查找指针

按照前面的步骤，找到您感兴趣的值的位置。然后，使用“**查找写入此地址的内容**”找出哪个地址写入此值，然后双击该地址以获取反汇编视图：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-8a7b45e1a330ed730acef9888ac1393dceefa8e4%2Fimage%20\(596\).png?alt=media)

然后，执行新的扫描**搜索“\[]”之间的十六进制值**（在这种情况下为$edx的值）：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-a200506940c879a51a8be60b7d0eff6f12214a4e%2Fimage%20\(597\).png?alt=media)

（\_如果出现多个，通常需要最小地址的一个）\
现在，我们已经**找到将修改我们感兴趣的值的指针**。

单击“**手动添加地址**”：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-8b78137878e651bae5b3d2b10f606ce2d99468f0%2Fimage%20\(598\).png?alt=media)

现在，选中“指针”复选框，并将找到的地址添加到文本框中（在此场景中，上一个图像中找到的地址是“Tutorial-i386.exe”+2426B0）：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-4046f6cc72587b9a8e5ddc8ee9579eea86aa9b2a%2Fimage%20\(599\).png?alt=media)

（请注意，您输入指针地址后，第一个“地址”将自动填充）

单击“确定”，将创建一个新指针：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-c78cbf31b8f1dfa8de2b435afad830a047020398%2Fimage%20\(600\).png?alt=media)

现在，每当您修改该值时，**即使值所在的内存地址不同，您也会修改重要值**。

### 代码注入

代码注入是一种技术，其中您将一段代码注入目标进程，然后重新路由代码执行以通过您编写的代码（例如给您积分而不是扣除积分）。

因此，假设您已找到正在减少玩家生命值的地址：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-22171450f8e3cd548cb4c005f96e26483bb3e8c4%2Fimage%20\(601\).png?alt=media)

单击“显示反汇编器”以获取**反汇编代码**。\
然后，单击**CTRL+a**调用自动组装窗口，并选择\_**模板 --> 代码注入**\_

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-ceb0a0f919bc190fe80aab06ba5c9db156149fed%2Fimage%20\(602\).png?alt=media)

填写**要修改的指令的地址**（通常会自动填充）：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-248451f199ef312be7695a7aad7029d5e3fb0f10%2Fimage%20\(603\).png?alt=media)

将生成一个模板：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-959e9fa02851b76754f8cf923202e84ccb176095%2Fimage%20\(604\).png?alt=media)

因此，在“**newmem**”部分插入您的新汇编代码，并从“**originalcode**”中删除原始代码（如果您不希望执行它）。在此示例中，注入的代码将添加2点而不是减去1：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-7b717c47a76a701e5c286f2d2724bc9d8b59415f%2Fimage%20\(605\).png?alt=media)

**单击执行等等，您的代码应该被注入到程序中，改变功能的行为！**

## **参考**

* **Cheat Engine教程，完成它以学习如何开始使用Cheat Engine**

<details>

<summary><strong>从零开始学习AWS黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE（HackTricks AWS红队专家）</strong></a><strong>！</strong></summary>

支持HackTricks的其他方式：

* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**，请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family)，我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。

</details>
