重要声明:学习与道德
在开始之前,必须强调:

- 仅供学习:本教程旨在帮助你理解游戏内存修改的原理,用于学习和研究,请勿在多人在线游戏(如《英雄联盟》、《CS:GO》、《原神》等)上使用Cheat Engine作弊,这会导致你的账号被永久封禁。
- 风险自负:使用Cheat Engine修改单机游戏可能会导致游戏崩溃、存档损坏或出现意想不到的错误,请务必备份你的游戏存档。
- 尊重开发者:支持你喜欢的游戏开发者,购买正版游戏。
第一部分:基础入门
什么是Cheat Engine?
Cheat Engine(作弊引擎)是一个开源的内存扫描和调试工具,它的主要功能是:
- 扫描和修改内存:找到游戏中存储数值(如金钱、生命值、弹药)的内存地址,并实时修改它们。
- 代码注入:向游戏进程中注入自定义的代码,实现更复杂的功能(如无限无敌、自动攻击)。
- 代码查找:通过分析汇编代码,找到控制游戏逻辑的关键点。
- 调试:像开发者一样调试游戏,观察函数调用和变量变化。
安装与界面
- 下载:从官方网站 https://www.cheatengine.org/ 下载最新版本。
- 安装:直接运行安装程序,一路“Next”即可,建议不要安装任何附带的可选软件。
- 启动:首次运行时,可能会被杀毒软件误报,这是因为CE的行为类似于病毒(注入进程、读写内存),你需要添加CE到杀毒软件的白名单,或者在受控环境中运行。
主界面介绍:
- 进程选择器:选择你要修改的游戏进程,你可以点击“闪烁的电脑”图标,或者在列表中手动选择。
- 扫描区域:在这里输入你已知的数值(比如你当前有1000金币),然后点击“初次扫描”或“再次扫描”。
- 地址列表:这里会显示所有匹配的内存地址,双击地址可以将其添加到下方的“受监视的地址”列表。
- 受监视的地址/数值列表:这里是你修改数值的核心区域,你可以在这里添加、修改、冻结地址。
- 工具栏:包含各种功能,如内存查看器、汇编器、堆栈查看器等。
第二部分:核心功能详解
数值扫描(最基础的功能)
这是CE最强大的功能之一,让你能找到游戏中几乎任何可见的数值。
实例:修改单机游戏里的金钱

假设一个游戏,你一开始有1000金币。
-
步骤1:启动游戏和CE
- 启动你的游戏。
- 打开Cheat Engine,在进程列表中选择你的游戏进程(
game.exe)。
-
步骤2:初次扫描
- 在CE的“扫描区域”输入
1000。 - 选择数据类型(通常是 4字节,这是最常用的)。
- 点击 “初次扫描” (First Scan)。
CE会开始扫描游戏进程的所有内存,寻找值为1000的地址,这个过程可能需要几秒到几分钟,取决于你的内存大小。
(图片来源网络,侵删) - 在CE的“扫描区域”输入
-
步骤3:再次扫描
- 回到游戏中,花掉或获得一些金币,比如现在你变成了950金币。
- 切回CE,在“扫描区域”输入新的数值
950。 - 点击 “再次扫描” (Next Scan)。
CE会从上一次找到的结果中,筛选出值变为950的地址,现在地址列表中的结果应该会少很多。
-
步骤4:锁定地址
- 重复步骤3几次,每次改变游戏中的金钱值,然后在CE中“再次扫描”。
- 当地址列表中只剩下一个或几个地址时,就说明你找到了目标。
- 双击这个地址,它会自动添加到下方的“受监视的地址”列表。
- 在下方的列表中,找到你添加的地址,勾选 “激活” (Active) 选项,或者直接点击 “冻结” (Freeze) 旁边的锁定图标。
无论你在游戏中怎么花钱,金钱值都会被锁定在你设定的值!
数据类型说明:
- 4字节:最常见,用于整数(如金钱、生命值、弹药数)。
- 2字节:用于较小的整数。
- 浮点数:用于带小数的数值(如经验值百分比、移动速度)。
- 字节:用于0-255的数值。
- 字符串:用于文本(如玩家名字、对话内容)。
- 字节数组:用于扫描一串特定的字节,用于更高级的查找。
指针扫描(解决数值消失问题)
你找到的地址在你重新进入关卡、读档或死亡后会改变,导致你的修改失效,这是因为游戏使用了指针。
-
什么是指针? 指针就像一个“地址的地址”,它不直接存储你的金钱值,而是存储一个内存地址,而这个地址才真正存储着你的金钱值,每次游戏加载时,指针本身可能会改变,但它指向的那个结构(金钱值)的位置是相对固定的。
-
如何找到指针? 假设你通过数值扫描找到了金钱地址,但重启游戏后它变了。
- 添加地址到列表:将找到的地址添加到“受监视的地址”列表。
- 右键 -> 查找访问代码:在列表中右键点击你的地址,选择“查找访问代码”。
- 触发访问:在游戏中花费或获得金钱,这会触发一个断点,CE会暂停游戏并显示是哪段代码(汇编指令)在访问这个地址。
- 分析代码:在弹出的窗口中,你会看到类似
mov eax, [ecx+8]的指令。[ecx+8]就是一个指针表达式。ECX寄存器里存放的是指针的地址。 - 查找指针:右键点击
ECX,选择“在内存中查找” -> “访问过的地址”,然后点击“确定”。 - 指针扫描:在新的窗口中,点击“扫描”,CE会开始寻找指向ECX的指针,扫描完成后,它会给你一个“指针路径”,
game.exe+123456 -> +8。 - 使用指针:你不需要再扫描那个不稳定的地址了,你可以直接在CE的地址列表中输入
game.exe+123456,然后在其偏移量+8处修改金钱值,这样即使重启游戏,只要game.exe+123456这个基址不变,你的修改就依然有效。
扫码功能(扫描未知数值)
有时候你不知道一个数值具体是多少,但知道它变大了或变小了。
- 实例:找到血量
- 不输入任何值,直接点击“扫描”,获取所有内存地址的快照。
- 回到游戏中,受到伤害,血量减少。
- 切回CE,选择 “较少的值” (Decreased value),然后点击“再次扫描”。
- 重复几次,地址列表就会精简到只剩几个,其中一个很可能就是你的血量。
第三部分:高级功能
汇编器与代码注入
这是CE最强大的功能,可以实现数值扫描做不到的事情。
-
什么是汇编? 汇编是CPU能直接理解的低级语言,修改汇编代码就是直接修改游戏的底层逻辑。
-
常用汇编指令:
MOV:移动数据。MOV EAX, 100将100赋值给寄存器EAX。ADD:加法。ADD EAX, 5将EAX的值加5。SUB:减法。SUB EAX, 5将EAX的值减5。JMP:跳转。JMP address直接跳转到指定地址执行。CMP:比较。CMP EAX, 0比较EAX和0是否相等。JE/JNE:如果相等/不相等则跳转。
-
实例:制作无限生命
- 使用数值扫描找到你的生命值地址。
- 右键点击该地址,选择“将地址分配到汇编器”。
- 在弹出的汇编器窗口中,你会看到类似
mov [eax+10], ecx的指令,这是游戏在更新你生命值的代码。 - NOP(无操作):最简单的方法是选中这行代码,然后点击工具栏的 NOP 按钮,NOP会替换掉原指令,使这条指令“什么都不做”,这样游戏就无法再修改你的生命值了。
- 代码注入:更灵活的方法是点击 “代码注入” (Code Injection) 按钮,选择一个游戏模块(如
game.exe),然后输入你自己的汇编代码,注入MOV [eax+10], 100,这样你的生命值就会被强制设置为100。
Auto Assembler (自动汇编器)
这是一个强大的脚本工具,可以自动执行复杂的任务,如编写脚本、创建 trainers(外挂)。
- 功能:
- 定义指针:通过脚本定义指针,方便以后使用。
- 创建Cheat Table (CT文件):将你的所有修改(地址、指针、汇编脚本)保存为一个
.CT文件,下次打开时,只需加载这个文件,就能一键应用所有修改。 - 编写复杂脚本:实现条件判断、循环等逻辑。
脚本与Lua
CE内置了Lua脚本引擎,你可以用Lua语言编写更高级、更自动化的功能。
-
如何使用:
-
在CE中,点击工具栏的“Lua脚本”图标。
-
你可以在这里编写Lua代码,
-- 这是一个简单的Lua脚本,它会每隔100毫秒将金钱值设置为999999 local moneyAddress = 0x12345678 -- 替换成你的实际地址 function updateMoney() writeInteger(moneyAddress, 999999) end -- 创建一个定时器 createTimer(updateMoney, 100) -
点击“执行”按钮来运行脚本。
-
第四部分:实战演练
假设我们要修改一个简单的游戏《植物大战僵尸》(以修改阳光为例)。
- 启动游戏和CE:打开PVZ,选择一个关卡,让游戏运行起来,打开CE,选择
PlantsVsZombies.exe进程。 - 数值扫描:假设你当前有 150 阳光。
- 在CE中输入
150,数据类型选4字节,点击“初次扫描”。 - 收集一些阳光,变成
250。 - 在CE中输入
250,点击“再次扫描”。 - 再花掉一些阳光,变成
200。 - 在CE中输入
200,点击“再次扫描”。 - 重复几次,直到地址列表只剩下几个地址。
- 在CE中输入
- 测试并锁定:双击剩下的地址,添加到下方列表,修改其值为
99999,你会发现游戏中阳光瞬间变多,勾选“冻结”,锁定它。 - 寻找指针(可选):退出当前关卡,重新进入,你会发现阳光地址又变了,这时你需要用“指针扫描”功能来找到稳定的指针路径,并保存为脚本。
- 保存为CT文件:点击CE的“文件” -> “保存为”,将你的修改保存为
MyPVZCT.ct,下次打开时,只需加载这个文件,就能一键修改阳光。
第五部分:常见问题与技巧
- Q: 扫描结果太多,无法精简?
A: 尝试使用“模糊扫描”或“精确值/浮点/双字”等选项,或者使用“扫描变化值”功能。
- Q: 修改了没反应,或者游戏闪退?
A: 1. 数据类型可能选错了,2. 你可能修改了只读地址,3. 游戏有反作弊机制,检测到内存被修改就崩溃。
- Q: 如何找到结构体/类成员?
- A: 找到一个已知的成员地址后,右键 -> “查找访问代码”,观察汇编指令中的偏移量。
[eax+0x10],+0x10就是下一个成员的偏移。
- A: 找到一个已知的成员地址后,右键 -> “查找访问代码”,观察汇编指令中的偏移量。
- Q: 什么是AOB扫描?
A: AOB (Array of Bytes) 扫描,也叫字节数组扫描,当你不知道一个具体数值,但知道一段代码的“签名”时,可以用它来找到这段代码,这在编写高级脚本时非常有用。
Cheat Engine是一个非常强大的工具,但它的强大也伴随着复杂性,学习CE是一个循序渐进的过程:
- 从数值扫描开始,这是基础中的基础。
- 掌握指针,让你的修改更稳定。
- 学习汇编,解锁CE的全部潜能。
- 使用脚本和CT文件,让你的工作自动化。
最重要的是保持耐心和好奇心,多动手实践,多分析内存中的变化,祝你学习愉快!
