何为 CE,及其原理
CE(Cheat Engine)是一款开源的内存编辑工具,广泛用于修改单机游戏中的数值,比如生命值、金钱、弹药等。其基本原理是通过扫描和修改游戏在运行时存储在内存中的数据来达到修改游戏的目的。以下是详细的工作原理:
1. 内存扫描
游戏运行时会将各种数据(如生命值、金钱等)存储在计算机的内存中。CE 可以扫描这些内存区域来查找特定的数值。例如,如果你在游戏中有 100 点生命值,你可以在 CE 中输入 100,然后让 CE 扫描内存,找出所有存储了 100 这个数值的内存地址。
2. 数值变动检测
第一次扫描后,你可能会得到很多结果,因为内存中可能有很多地方存储了 100 这个数值。为了进一步缩小范围,你可以回到游戏中,改变生命值,比如让生命值减少到 90,然后在 CE 中再次扫描内存,这次只查找那些数值从 100 变为 90 的地址。通过多次改变和扫描,可以逐渐锁定准确的内存地址。
3. 锁定和修改数值
找到正确的内存地址后,你可以锁定该地址,使其数值保持不变,或直接修改该地址中的数值。例如,你可以将生命值改为 9999,或者将金钱数值修改为一个很大的数字。
4. 动态地址处理
有些游戏每次运行时会将数值存储在不同的内存地址,这种情况下,需要处理动态地址。CE 提供了一些高级功能,比如指针扫描和代码注入,帮助找到稳定的地址或计算出实际数值的存储地址。
5. 指针扫描
指针扫描是指通过查找指向某个内存地址的指针链,找到一个稳定的指针路径,即使游戏重启后,数值的内存地址变化,通过指针链仍能定位到正确的内存地址。
6. 代码注入
代码注入是指在游戏运行的过程中,插入自定义的代码来修改游戏行为。这通常涉及修改游戏的汇编代码,以改变游戏逻辑或直接修改数值。
基本数值修改方法
使用 Cheat Engine(CE)进行基本数值修改主要包括以下几个步骤:扫描内存、变动检测、锁定和修改数值。以下是具体的操作流程:
1. 下载和安装 Cheat Engine
首先,从 Cheat Engine 的官方网站下载并安装 CE。
2. 打开游戏和 Cheat Engine
启动你想修改的游戏并保持它在运行状态,同时打开 Cheat Engine。
3. 选择游戏进程
在 Cheat Engine 界面中,点击左上角的“电脑图标”按钮,这将打开进程列表窗口。找到并选择你正在运行的游戏进程,然后点击“打开”按钮。这样 CE 就会附加到游戏进程。
4. 初次扫描
假设你想修改游戏中的生命值为 100。在 Cheat Engine 的主界面中,在“数值类型”(Value Type)下拉菜单中选择合适的数据类型(通常选择 4 字节)。然后在“数值”(Value)框中输入当前生命值(例如 100),并点击“首次扫描”(First Scan)按钮。CE 将扫描游戏的内存,找出所有包含该数值的内存地址。
5. 变动检测
返回游戏,改变生命值,比如让它变为 90。然后回到 Cheat Engine,在“数值”(Value)框中输入新的生命值(90),并点击“再次扫描”(Next Scan)按钮。这样,CE 会再次扫描内存,找出数值从 100 变为 90 的内存地址。重复这个步骤几次,直到剩下的内存地址数量较少。
6. 确认和修改地址
通过上述步骤,找到一个或几个可能的内存地址。在这些地址中,双击其中一个地址将其添加到下面的地址列表中。在地址列表中,右键点击该地址并选择“更改数值”(Change Value),然后输入你想要的新数值(例如 9999)。
7. 锁定数值
如果你希望数值保持不变,可以勾选地址左侧的复选框,这将锁定该地址,使其数值不会因游戏操作而变化。
8. 验证修改
返回游戏,检查修改是否生效。如果生命值已经变为 9999,则说明修改成功。否则,返回 Cheat Engine,尝试修改列表中的其他地址,直到找到正确的地址。
数值修改注意事项
在使用 Cheat Engine(CE)进行数值类型修改时,选择正确的数值类型至关重要,因为这决定了 CE 如何扫描和解释内存中的数据。以下是一些关于数值类型修改的注意事项:
1. 了解常见数值类型
- 4 字节(4 Bytes):大多数整数值(如生命值、金钱、得分等)通常以 4 字节存储。
- 2 字节(2 Bytes):较小的整数值或标志位通常以 2 字节存储。
- 8 字节(8 Bytes):较大的整数值或一些特定的数据(如长整型值)。
- 浮点数(Float):用于存储带小数的数值(如坐标、速度等)。
- 双精度浮点数(Double):用于存储更高精度的浮点数值。
- 字节(Byte):用于存储非常小的整数值或标志位。
- 文本(String):用于存储字符串数据。
2. 确定正确的数值类型
在开始扫描之前,尽量了解你想要修改的数据在游戏中可能使用的数值类型。例如,生命值和金钱通常使用 4 字节整数,坐标或物理属性可能使用浮点数。如果不确定,可以尝试多种数值类型。
3. 处理不同进制的数值
一些游戏可能会使用不同的进制来表示数值(例如十六进制)。在 CE 中,可以通过右键点击数值框并选择“十六进制”来切换进制显示。
4. 避免误修改其他数据
- 多次扫描:通过多次改变和扫描数值来减少结果,提高准确性。
- 冻结数值:在确定数值修改正确后,可以冻结数值,但应小心锁定错误的地址可能会导致游戏崩溃。
5. 浮点数的特殊性
浮点数存储方式与整数不同,因此在修改浮点数时,需要特别注意以下几点:
- 精度问题:浮点数的精度有限,在修改时应避免输入超出原始精度范围的值。
- 小数点输入:在 CE 中输入浮点数时,应使用小数点格式(如 3.14)。
- 变化检测:浮点数值变化可能不会像整数那样明显,因此在变动检测时需要小心观察。
- 可以尝试关闭快速扫描
6. 动态地址和多层指针
许多游戏会使用动态内存地址,这意味着每次运行游戏时,数值的存储地址会变化。在这种情况下,需要使用指针扫描或多层指针(Pointer)来找到稳定的内存地址。
使用技巧
作弊表格
Edit > Settings > CEShare,点击CEShare community URL:下拉选中Fareless...
使用 Cheat Engine(CE)中的作弊表格(Cheat Table)可以大大简化修改过程。作弊表格是一种保存了内存地址、数值类型、脚本和注释的文件(通常扩展名为.CT),可以直接导入 CE。以下是如何使用作弊表格的详细步骤:
1. 下载或创建作弊表格
- 下载现成的表格:许多游戏的作弊表格可以在 Cheat Engine 的官方网站、论坛或其他游戏修改社区中找到。
- 创建自己的表格:在找到并确认内存地址和修改值后,可以将其保存为作弊表格,以便以后使用。
2. 打开 Cheat Engine 和游戏
启动你想修改的游戏并保持它在运行状态,同时打开 Cheat Engine。
3. 选择游戏进程
在 Cheat Engine 界面中,点击左上角的“电脑图标”按钮,这将打开进程列表窗口。找到并选择你正在运行的游戏进程,然后点击“打开”按钮。这样 CE 就会附加到游戏进程。
4. 打开作弊表格
点击 Cheat Engine 界面左上角的“文件”(File)菜单,然后选择“打开”(Open)。找到你下载或创建的作弊表格文件(扩展名为.CT),然后打开它。表格中的内容将会加载到 CE 的主界面中。
5. 使用作弊表格中的条目
作弊表格加载后,你会看到表格中的内存地址、描述和数值等信息:
- 激活脚本:如果表格中包含脚本(通常标记为“[ENABLE]”和“[DISABLE]”),你可以勾选它们来激活或停用对应的作弊功能。
- 修改数值:双击某个条目的数值列,可以直接输入你想要修改的新数值。
- 锁定数值:勾选条目左侧的复选框,可以锁定该地址,使其数值保持不变。
6. 保存修改后的表格
如果你对表格进行了新的修改或添加了新的条目,可以通过以下步骤保存:
- 保存表格:点击“文件”(File)菜单,选择“保存”(Save)或“另存为”(Save As),将表格保存为新的
.CT文件,以便日后使用。
示例操作
假设你有一个游戏的作弊表格,里面包含无限生命、无限金钱等功能:
- 下载表格:例如从一个游戏修改论坛下载
game_cheats.ct。 - 打开表格:在 CE 中打开该表格。
- 激活脚本:勾选“无限生命”和“无限金钱”脚本前的复选框。
- 修改数值:如果表格中有金钱数值条目,双击该数值,输入 999999,并确认。
- 验证修改:返回游戏,查看生命值和金钱是否已变为无限或 999999。
通过以上步骤,你可以轻松使用 Cheat Engine 的作弊表格来修改游戏数值和行为,大大简化了手动扫描和修改内存的过程。
修改游戏速度
推荐设置快捷键,比如:Ctrl+Shift+1/3/5

自定义作弊表格专用快捷键

锁定数值
点击方框锁定数值

锁定后,点击方框右侧,会切换锁定模式
- 绿色向上箭头只增不减
- 红色向下箭头只减不增


找到看不到数值的内存地址/找到关联数值的内存地址
找到看不到的数值的内存地址(例如,无法直接在游戏界面上看到的数值)是一项复杂但可以通过一些技巧和步骤实现的任务。以下是详细的步骤和技巧:
1. 使用未知初始值扫描
如果你不知道具体的数值,可以使用未知初始值扫描来查找内存地址:
- 初次扫描:
- 在 Cheat Engine 中附加到游戏进程。
- 选择“未知初始值”。
- 选择合适的数值类型(如 4 字节、浮点数等)。
- 点击“首次扫描”(First Scan)。
- 变动检测:
- 在游戏中触发可能会改变目标数值的事件。例如,如果你想找子弹数,你可以开枪让子弹数减少。
- 回到 Cheat Engine,选择“减少”(Decreased)或“增加”(Increased),根据你预计的数值变化情况进行再次扫描。
- 继续进行多次变动检测,直到结果范围缩小到可以管理的程度。
2. 使用模糊扫描(Fuzzy Scan)
模糊扫描适用于你不确定数值变化方向或大小的情况:
- 初次扫描:
- 附加到游戏进程。
- 选择合适的数值类型。
- 选择“未知初始值”并进行首次扫描。
- 变化扫描:
- 在游戏中触发变化。
- 使用“变化了”(Changed)或“未变化”(Unchanged)进行再次扫描。
- 重复此过程多次,直到找到相关地址。
3. 查找关联数值
玩家的状态很有可能在同一块内存区域,此时只需找出一个状态值的内存区域,然后右键此地址Browser this memory region,即可查看此值的附近内存区域。
然后操作角色,观察内存区域中的其他值变化,试验出各个值的作用即可。
CoderFinder
启动游戏或运行游戏时,值的位置会在变化时保存。这样值的地址列表将不起作用。
这里需要找出是何条指令修改了目标值。
- 首先首先尝试查找地址,和普通查找数值的方式一样。
- 找到地址后,右键地址列表中的地址,然后选择
Find out what writes to this address,此时会弹出一个窗口。 - 修改目标数值,如果一切顺利,现在应该有一个包含汇编代码的地址。
- 此时可以对此汇编指令进行替换等操作。
寻找网页游戏的进程
Shift+Esc调出 Chrome 的任务管理器,在里面根据网页的标题找到对应的 PID- 在 CE 的
Process List中选择Processes,然后根据 PID 找到进程(转换成十进制)
指针
指针的数值是一个内存地址
指针本身在内存中,也有其地址
多层级指针中,各指针间的地址通过偏移量来计算
假设我们有一个三层级指针的例子:
1
[[base+offset1]+offset2]+offset3
我们需要从最内层到最外层逐步解析。
偏移量
这里0xFF即为下级指针的偏移量

静态地址&指针路径
静态地址是不变的,但是每次游戏启动其数值是随机的(即下一级的指针地址是随机的),各级指针的偏移量不会变。偏移量保存在操作码中

寄存器、操作码
这里需要汇编的知识,如直接寻址、间接寻址、立即寻址等,不多赘述。

手动查找指针路径
查找各级指针
在第一步寻找目标数值的指针中,使用find out what writes to this address,即查找写入此内存区域的指令。
在后续层级的指针中,由于非目标指针的值是内存地址,一般不会被修改,故使用find out what accesses to this address来寻找。

指令的查找如下:这里 0x18 即为偏移量

上一级指针地址的值=此指针地址-偏移量,在查找器中寻找保存此值的地址即可找到上一级指针地址:

重复上述过程,直到找到一个绿色的带有进程名字的地址,此即为静态地址
创建指针路径
点击Add Address Manually,将静态指针和各级偏移量输入即可得到一个指向目标值的指针路径。
Ctrl+S保存 Cheat Table
