
1. 背景与核心概念1.1 什么是 Cheat EngineCheat Engine简称 CE是一款开源的内存扫描和调试工具。很多读者第一次接触它是在单机游戏里修改数值、体验“魔改”玩法。但它的能力远不止于此CE 本质上是一个完整的内存分析工具链可以完成以下工作进程附加与内存扫描枚举目标进程的内存区域扫描指定数值并支持多次筛选缩小范围。指针扫描与偏移追踪定位动态地址背后的静态基址和偏移链解决每次启动程序地址变化的问题。反汇编与调试基于内置的反汇编引擎和调试器查看并修改指令流。Lua 脚本扩展CE 内嵌 Lua 脚本引擎可以自动化扫描、修改和自定义界面这是它区别于普通内存修改器的核心能力。Cheat Table.CT 文件以结构化文件保存地址列表、脚本和修改逻辑方便复用和分享。从专业角度看CE 是学习 Windows 内存管理、进程地址空间、指针溯源和调试器原理的优质实践工具。在安全测试、CTF 比赛、逆向分析和游戏安全研究领域它都有用武之地。1.2 什么是 AI 编程AI 编程指利用大语言模型LLM驱动的编程助手辅助开发者完成代码生成、代码补全、报错解释、重构建议和测试生成等工作。常见工具包括GitHub Copilot老牌 AI 编程助手深度集成 VS Code、JetBrains 系列。Cursor基于 AI 的新一代代码编辑器强调多文件上下文理解对 AI 编程有专门优化。JetBrains AI Assistant / 通义灵码 / 文心快码在 IDE 内部提供对话式编码支持。通用大模型对话工具如 Claude、GPT 等也常被用来生成参考代码、解释概念。AI 编程的核心价值不是“替你写一切代码”而是缩短你从“想法”到“可运行代码”之间的距离。对于 CE 这种脚本化强、API 细节多的工具AI 编程可以快速给出 Lua API 用法示例、扫描流程模板和报错排查建议。1.3 为什么要把 CE 和 AI 编程结合起来CE 的 Lua 脚本、指针扫描、AOB 扫描等操作学习曲线较陡。网上资料往往零散有的只讲游戏修改不讲原理有的只贴 CT 表不讲脚本逻辑。新手容易卡在几个地方不知道 Lua 脚本怎么加载和运行。地址偏移如何计算、基址如何获取概念混乱。写脚本时对 CE 内置 API 不熟悉效率低。遇到“扫描结果不稳定”“附加失败”“脚本报错”等问题时没有排查思路。这时候AI 编程工具可以充当“随身导师”你描述需求它生成脚本框架你粘贴报错它帮你分析原因。但 AI 生成的代码不一定完全正确你需要具备基本的调试能力来验证和修正。本文正是一套“CE 基础操作 AI 辅助编程”的入门课帮助你建立完整的学习闭环。2. 环境准备与版本说明2.1 下载与安装 Cheat EngineCheat Engine 官方提供 Windows 版本安装过程比较简单但有几个注意点。下载渠道建议从官网下载避免第三方压缩包捆绑广告或恶意文件。版本选择CE 不同版本界面和 Lua API 略有差异。本文示例以较新的 7.x 版本为例。安装选项安装过程中如果出现捆绑软件勾选记得取消保持最小安装。安装完成后打开 CE界面大致分为左上角“进程选择”按钮小电脑图标。中间“扫描区域”支持“值”“类型”“扫秒方式”等选项。下方地址列表Cheat Table 列表。菜单栏包含“表”“调试”“内存查看”等功能入口。版本提示不同版本的 CE 界面布局会有微小差异但核心功能一致。你不需要纠结具体版本号重点是掌握操作思路。2.2 选择 AI 编程工具AI 编程工具的选择主要看你的开发习惯场景推荐工具原因习惯 VS CodeCursor / GitHub Copilot编辑器集成好对话式生成方便习惯 JetBrainsIDEA、PyCharm 等GitHub Copilot / 通义灵码插件生态成熟支持常见语言想快速提问、生成参考代码Claude / GPT / 通义千问对话式交互适合解释概念和排查报错想配合 Python 自动化内存操作Cursor Python 环境Cursor 对 Python 项目结构理解较好我建议新手准备一个“AI 编程提示词模板”比如你是一名熟悉 Cheat Engine 和 Lua 脚本开发的技术专家。 请帮我实现一个 CE Lua 脚本功能如下 1. 自动附加目标进程进程名不固定由用户输入。 2. 在指定地址范围内扫描一个整数值。 3. 将扫描结果输出到 CE Lua 控制台。 要求代码注释详细说明每个 API 的作用并给出可能的报错处理。把需求描述得越具体AI 返回的结果越可用。2.3 准备测试目标程序学习 CE 时不建议一上来就操作复杂的商业软件。推荐以下方式自己写一个简单的测试程序比如一个 C/C 程序声明一个全局变量循环自增或者 Python 写的简单进程需要 exe 化。使用 CE 自带的教程程序CE 安装目录自带“Tutorial”程序专门用来练习扫描、指针和脚本是官方推荐的新手练习工具。开源练习项目GitHub 上有一些“故意留了漏洞”的内存练习程序。本文示例采用“自写测试程序 CE 脚本 AI 辅助”的方式重点演示整个过程。3. 核心原理解析3.1 内存扫描的基本原理每个进程运行时系统会为它分配独立的内存空间。程序中的变量、数组、对象都落在某个地址上。CE 做的事情是在进程的地址空间中寻找等于你输入数值的内存单元。第一次扫描是“全量扫描”速度较慢。之后当你修改了目标数值CE 再进行“再次扫描”缩小候选范围。反复几次最终定位到存放该值的地址。这个流程的关键概念地址Address内存单元在进程地址空间中的位置通常用十六进制表示。数值Value当前地址存储的数据。类型Type数据解释方式如 Byte、2 Bytes、4 Bytes、8 Bytes、Float、Double、String。位数Hex / Decimal扫描时值用十进制或十六进制表达。新手常犯的错误是类型选择不对导致扫不到值。比如游戏浮点数值用 Float 存储你却用 4 Bytes 扫描自然找不到稳定结果。3.2 动态地址与指针偏移现代程序尤其是游戏和大型软件不会让关键变量一直待在固定地址。每次启动进程系统分配的内存地址都可能不同。为了稳定定位CE 引入了指针Pointer机制。假设你找到一个目标地址0x017A4B28里面存放了“金币值”。重启程序后这个地址可能变成0x01B2C880。但如果你能找到一个全局静态地址0x00A1B2C0它保存的内容是一个“指针”指向一块结构体结构体偏移0x4B28处才是真正的金币值。那么目标地址 [0x00A1B2C0] 0x4B28[0x00A1B2C0]表示取这个地址中存储的值再与偏移相加。在 CE 中你可以右键扫描结果选择“指针扫描”Pointer Scan来生成可能的指针链。这个过程计算量大但 AI 编程可以帮助你理解指针链的含义、编写“用 Lua 自动计算指针地址”的脚本。3.3 AOB 扫描与特征码当地址动态变化、指针链又过于复杂时另一个常用方法是 AOBArray of Bytes扫描。它扫描指令序列或数据结构中的特征字节串只要特征码稳定无论地址怎么变都能定位。AOB 示例// 特征码8B 45 08 83 C0 01 89 45 08 scan: 8B 45 08 83 C0 01 89 45 08在 CE 中使用“扫描类型”选择“Array of Bytes”输入十六进制特征码配合通配符??表示任意字节。AOB 扫描常用于制作游戏修改脚本、绕过动态地址限制。3.4 Lua 脚本与 CE APICE 内嵌 Lua 脚本引擎这意味着你可以把“扫描、附加、修改、遍历地址列表”等操作全部用脚本自动化。核心 API 包括API作用openProcess(processName)按进程名附加getAddress(name)获取符号名或模块地址readInteger(address)读取指定地址的 4 字节整数writeInteger(address, value)写入 4 字节整数readFloat(address)读取浮点数writeFloat(address, value)写入浮点数createMemScan()创建内存扫描对象createFoundList()创建扫描结果列表getAddressList()获取当前地址列表registerLuaFunction(name, func)注册自定义 Lua 函数到 CE 菜单print(string)输出到 Lua 控制台注意CE Lua API 在不同版本中略有增减。AI 编程时需要告诉 AI 你使用的 CE 版本否则可能生成新版才有的 API。3.5 为何 AI 编程适合这个场景CE 的 Lua API 文档分散、版本差异多新手用自然语言描述需求AI 生成的代码可以作为起点。AI 擅长把“模糊需求”转化为“可运行的框架”并且能解释每行代码的作用。但 AI 也有局限它可能“一本正经地编造”不存在的 API。它可能忽略 CE 版本差异。它无法预知目标进程的内存布局。所以正确姿势是AI 生成框架你负责验证和调整。脚本跑不通时把报错信息完整粘贴给 AI它会给出修改建议。这是一个“人机协作”的迭代过程。4. 完整实战案例AI 辅助编写 CE Lua 脚本下面用一个完整案例串起整个流程。目标编写一个 CE Lua 脚本自动附加目标进程、扫描一个整数值、把结果输出到 Lua 控制台并尝试读取和修改目标地址。4.1 创建项目结构我们不需要复杂的工程目录先按下面结构准备ce-ai-demo/ ├── target_app/ │ └── demo_target.cpp # C 测试程序 ├── scripts/ │ ├── auto_scan.lua # CE Lua 扫描脚本 │ └── pointer_demo.lua # CE Lua 指针示例 └── ai_prompt/ └── prompt.txt # AI 提示词模板4.2 编写测试目标程序这里用 C 写一个简单的控制台程序定义一个全局变量循环自增并等待用户输入。这样我们可以用 CE 附加后观察变量变化。// 文件路径target_app/demo_target.cpp #include iostream #include thread #include chrono // 全局变量模拟游戏中的关键数值 int g_score 100; int main() { std::cout Demo Target Process std::endl; std::cout g_score initial value: g_score std::endl; std::cout Press Enter to exit... std::endl; // 每 500ms 让 g_score 加 1方便 CE 再次扫描验证 while (true) { std::this_thread::sleep_for(std::chrono::milliseconds(500)); g_score; std::cout g_score g_score std::endl; } return 0; }编译命令Windows MinGW 示例g -o demo_target.exe target_app/demo_target.cpp运行后你会看到g_score从 100 开始一直递增。4.3 编写 AI 提示词打开你的 AI 编程工具输入下面提示词你是一名 Cheat Engine Lua 脚本开发专家。请编写一个 CE Lua 脚本完成以下功能 1. 弹出输入框让用户输入目标进程名例如 demo_target.exe。 2. 使用 openProcess 附加该进程。 3. 使用 createMemScan 创建一个内存扫描扫描一个 4 字节整数初始值为 100。 4. 扫描完成后使用 createFoundList 获取结果列表。 5. 将结果数量输出到 Lua 控制台。 6. 如果结果数量为 1直接输出该地址如果结果数量大于 1提示用户手动再次扫描。 7. 每个关键步骤都要有注释解释 API 的作用。 要求兼容 Cheat Engine 7.x代码完整可运行考虑附加失败和扫描为空的异常情况。AI 通常会返回类似下面的脚本。我们以这份脚本为基础逐行理解、验证。4.4 核心 Lua 脚本源码-- 文件路径scripts/auto_scan.lua -- 说明AI 辅助生成的 CE Lua 扫描脚本手动整理版 -- 适用于 Cheat Engine 7.x -- 用户输入进程名 local processName demo_target.exe -- 附加进程 -- openProcess 会从系统进程列表中查找该名称的进程 -- 如果找不到返回 false local opened openProcess(processName) if not opened then print([错误] 无法附加进程: .. processName) return end print([成功] 已附加进程: .. processName) -- 创建内存扫描对象 -- createMemScan() 返回一个 MemScan 对象用于定义扫描参数并执行 local scan createMemScan() -- 设置扫描参数 -- 第一个参数扫描类型0 表示精确数值扫描 -- 第二个参数值类型4 表示 4 BytesvtByte0, vtWord1, vtDword2, vtQword3, vtSingle4, vtDouble5, vtString6 -- 注意不同版本 CE 的常量映射可能不同建议用 4 或参考脚本函数模板 -- 第三个参数扫描模式0 表示“精确值”匹配 -- 第四/第五个参数扫描地址范围0x0 到 0xFFFFFFFFFFFFFFFF 表示全范围 -- 第六个参数要扫描的数值这里我们扫描 100 -- 第七个参数十六进制模式false 表示使用十进制 -- 第八个参数对齐方式1 表示按 1 字节对齐速度慢但更全面 scan.firstScan( 0, -- 扫描类型精确值 4, -- 值类型4 Bytes 0, -- 匹配模式等于 0x0, -- 起始地址 0xFFFFFFFFFFFFFFFF, -- 结束地址 100, -- 数值 false, -- 是否为十六进制 1, -- 对齐 false -- 忽略大小写仅字符串用 ) -- 执行扫描 -- waitTillDone(true) 表示等待扫描完成 scan.waitTillDone(true) -- 创建结果列表 local foundList createFoundList(scan) foundList.initialize() -- 获取结果数量 local count foundList.Count print([信息] 扫描结果数量: .. tostring(count)) if count 0 then print([错误] 没有找到数值请确认进程正在运行且数值类型正确。) return end -- 如果结果只有一个输出来地址 if count 1 then local address foundList.Address[0] print([结果] 唯一地址: 0x .. string.format(%X, address)) print([结果] 当前值: .. tostring(readInteger(address))) else print([提示] 结果较多请回到 CE 主界面修改目标数值后再用“再次扫描”筛选。) end -- 清理 foundList.destroy()在 CE 菜单栏选择“表 - Lua 脚本/执行 Lua 脚本”打开脚本编辑窗口将代码粘贴进去点击“执行”。如果所有步骤成功Lua 控制台会输出类似[成功] 已附加进程: demo_target.exe [信息] 扫描结果数量: 1 [结果] 唯一地址: 0x1A2B3C40 [结果] 当前值: 1234.5 脚本解释与参数说明上面的脚本有几个关键点需要展开说明。第一firstScan参数非常多。新手最容易在这里被绕晕。核心参数是值类型和匹配模式。值类型选错扫描结果为空匹配模式选错结果会异常多。如果扫描结果数量巨大优先检查这两项。第二foundList.Address[0]只是读取地址。它返回的是字符串形式的十六进制地址需要通过string.format(%X, address)规范化输出。第三readInteger的 API。它用于读取 4 字节整数。如果要读浮点数可以用readFloat。对于新手建议先掌握整数和浮点数两类其他类型按需查阅。第四这个脚本是“一次性”的。运行完就销毁结果列表。实际运用中你可能希望把地址保留在地址列表Cheat Table中方便后续手动修改。这需要在脚本中调用getAddressList().getMemoryRecord().Description等 API属于进阶主题。4.6 扩展用 AI 实现“自动修改数值”在上面的基础上我们可以让 AI 继续生成“将扫描到的唯一地址写入自定义值”的代码。你只要继续向 AI 提问接上面的脚本。如果扫描结果唯一请弹出一个输入框让用户输入新数值然后将该地址的值修改为输入的值。AI 可能生成类似代码-- 文件路径scripts/write_value.lua核心片段 if count 1 then local addr foundList.Address[0] print([结果] 唯一地址: 0x .. string.format(%X, addr)) -- 弹窗输入新数值 local newValue inputQuery(修改数值, 请输入新的整数, 100) if newValue nil then print([提示] 用户取消输入。) return end -- 尝试转换输入为数字 local num tonumber(newValue) if not num then print([错误] 输入不是合法数字。) return end -- 写入整数 writeInteger(addr, num) print([成功] 已将地址写入新值: .. newValue) -- 读取验证 print([验证] 当前值: .. tostring(readInteger(addr))) end这个片段展示了 CE 脚本中常见的“读改写”流程定位地址 - 读取值 - 写入新值 - 再读验证。4.7 配合 Python 做内存操作有些场景你不想继续用 CE 界面而是希望用 Python 脚本自动化读取和修改内存。这里可以引入pymem库开源项目常用于游戏内存分析。这在 AI 编程场景下非常常见因为 AI 能快速生成 Python 代码。pip install pymemPython 示例# 文件路径scripts/pymem_demo.py # 说明使用 pymem 读取目标进程的全局变量值 # 注意需要目标进程以同权限运行且本例只是演示思路 import pymem import pymem.process process_name demo_target.exe try: pm pymem.Pymem(process_name) # 获取进程模块基址这里是示例实际地址需要结合 CE 扫描确定 module pymem.process.module_from_name(pm.process_handle, process_name) # 这里需要结合具体偏移生产代码建议用 CE 离线分析后填入真实地址 base_address module.lpBaseOfDll # 假设全局变量相对模块基址偏移为 0x100需根据实际编译情况调整 address base_address 0x100 value pm.read_int(address) print(f读取地址 0x{address:X} 的值: {value}) except pymem.exception.ProcessNotFound: print(目标进程未找到请先运行 demo_target.exe) except Exception as e: print(f程序错误: {e})注意全局变量的偏移需要你结合 CE 或编译器符号确定这里只是一个“思路示例”不是可以直接套用的固定代码。AI 编程时把这类提示发给 AI它通常会给出更贴合你项目的模板。5. 常见问题与排查思路5.1 附加进程失败问题现象常见原因解决思路openProcess返回 false进程名拼写错误在任务管理器中确认进程名注意大小写附加后提示权限不足目标进程以管理员权限运行以管理员身份运行 CE附加的是 64 位程序CE 是 32 位模式版本不支持确认 CE 以正确位数运行5.2 扫描结果太多或扫不到问题现象常见原因解决思路扫描结果上百万值类型选错或匹配模式选错换成 Float、4 Bytes 等正确类型使用“再次扫描”筛选扫描结果为 0目标程序没有该值或进程未运行确认进程附加成功确认值类型与程序变量类型一致扫描后地址再次启动失效动态地址问题使用指针扫描或 AOB 扫描5.3 Lua 脚本报错问题现象常见原因解决思路attempt to index a nil valuefoundList 未初始化检查foundList.initialize()是否调用bad argumentAPI 参数类型错误对照 CE API 文档检查参数或把报错粘贴给 AI 分析找不到createMemScanCE 版本过旧升级到 7.x 或查阅旧版 API 名称5.4 AI 生成的代码不能用这是最常见的“坑”。AI 生成的 CE Lua 脚本可能存在以下问题使用了自定义封装函数但你没导入。使用了其它脚本框架的 API。版本不兼容。解决办法向 AI 明确版本在提示词中写明“Cheat Engine 7.x”。把完整报错回贴给 AI让 AI 看到错误信息后修正。从简入繁先让 AI 生成“打印一行文字”的最小脚本跑通后再叠加功能。善用 CE 官方示例CE 安装目录自带 Lua 脚本示例可以作为参考。6. 最佳实践与工程建议6.1 脚本开发规范模块化把“附加进程”“扫描”“修改值”拆成独立函数方便复用。注释完整CE Lua API 并不算广为人知注释里写明每个参数的含义方便以后查阅。异常处理openProcess、扫描结果为空、写入失败都要有日志输出避免“静默失败”。统一输出在 Lua 控制台输出统一格式比如[成功] xxx、[错误] xxx、[警告] xxx。6.2 与 AI 协作的提示词技巧写 AI 提示词时尽量包含以下要素角色你是一名 CE Lua 脚本专家。目标进程进程名、位数、运行环境。数据特征数值类型、初始值、变化规律。功能清单要做什么按优先级排序。限制条件CE 版本、是否允许弹窗、是否需要权限处理。输出要求注释详细、代码完整、说明运行方式。一个完整提示词示例请编写一个 Cheat Engine 7.x 的 Lua 脚本。目标进程是 Windows 64 位程序 test.exe。 我要扫描一个 Float 类型的玩家血量值初始值是 100.0角色受伤后血量会减少。 请实现 1. 附加 test.exe 2. 精确扫描 Float 值 100.0 3. 如果结果数量大于 1提示用户手动再次扫描 4. 如果结果唯一给出地址 5. 提供读取当前血量和设置凝血量的函数 6. 关键代码写注释说明每个 API 的作用。6.3 安全与合规边界CE 是一把双刃剑。务必注意以下几点仅用于合法场景学习、调试自己开发的程序、CTF 比赛、安全研究、单机游戏逆向学习。不要用于商业游戏作弊绝大多数商业游戏都禁止修改内存可能导致封号甚至涉及法律风险。不要在未授权系统上操作生产环境、他人设备、在线服务一律不要尝试。注意杀毒软件误报部分安全软件会把内存修改工具标记为风险程序建议只在本地测试环境使用并添加白名单。6.4 性能与稳定性建议扫描时优先限定地址范围CE 支持按模块、按区域扫描。只扫目标模块的地址区间速度会快很多。避免频繁全量扫描生产脚本中定位地址后尽量缓存不要每次启动都全量扫描。写入操作前确认地址有效程序退出或对象释放后地址可能失效。写入前可以读取一次如果读出来类型异常则跳过写入。日志化在脚本中加入时间戳和操作记录方便回溯问题。7. 总结与学习路线本文围绕“Cheat Engine AI 编程”这个组合从概念开始到环境准备、核心原理、完整实战案例再到排查思路和工程建议。你现在应该理解CE 不只是游戏修改器更是内存分析学习工具。AI 编程可以有效缩短 CE 脚本开发的学习曲线但 AI 生成代码需要验证和调试。附加进程、类型匹配、地址偏移、AOB 扫描、Lua API 是核心知识主线。遇到问题先看类型和版本再交给 AI 排查人机协作效率最高。下一步你可以按这个顺序继续学习CE 自带 Tutorial完成全部章节覆盖扫描、指针、碎码等基础。再看 CE 官方 Lua 示例学习脚本对地址列表的操作。尝试写一个自动化脚本比如“扫描血量变化的核心逻辑”。用 AI 辅助做一个小项目把 CE 定位能力与 Python 脚本结合实现一个内存监控小工具。操作时记得所有实验都在本地测试环境完成尊重软件使用协议。把 CE 当作“理解计算机内存的窗口”把 AI 当作“随叫随到的编程助手”这个学习过程会顺畅很多。