Featured image of post 笔记:Cheat Engine 基础整理

笔记:Cheat Engine 基础整理

Cheat Engine 的核心工作原理、主要功能,以及在 CTF(RPG Maker 游戏)中的实战应用

 · 约 2,061 字

概述

Cheat Engine 简称 CE,是一款非常著名的开源内存扫描工具、十六进制编辑器和调试器。它由 Eric Heijnen(网名 Dark Byte)开发,主要用于修改单机电脑游戏中的数据,但也广泛应用于软件逆向工程、调试和安全测试。

1. 核心工作原理

游戏或软件在运行时,会将数据(如玩家的生命值、金钱、弹药量等)临时存储在电脑的内存(RAM)中。Cheat Engine 的核心功能就是读取和修改这些内存数据。

  • 扫描与筛选:假设你在游戏中拥有 100 枚金币。你可以在 CE 中搜索数字“100”。CE 会在内存中找出成千上万个值为 100 的地址。接着,你在游戏里花掉一些金币,剩下 85 枚。你再在 CE 中搜索“85”,CE 就会在刚才的搜索结果中筛选出变化为 85 的地址。重复几次后,你就能精确定位到控制金币数量的那个唯一内存地址。
  • 修改与锁定:找到地址后,你可以把 85 改成 999999,游戏里的金币就会瞬间暴涨。你还可以将其“锁定(Freeze)”,这样即使游戏试图扣除金币,数值也会保持不变(实现无限金钱或无敌)。

2. 主要功能

除了基础的数值修改,CE 还是一个功能强大的底层分析工具:

  • 内存扫描器 (Memory Scanner):支持各种数据类型(整数、浮点数、字符串等),也支持“未知初始值”扫描(比如游戏里只显示血条没有具体数字时,可以通过血量“减少”或“增加”来进行模糊搜索)。
  • 调试器 (Debugger):可以找出是哪些程序代码(汇编指令)在读取或写入你找到的内存地址。这对于制作高级修改脚本至关重要。
  • 变速齿轮 (Speedhack):可以加快或减慢目标程序的运行速度。常用来跳过漫长的游戏过场动画,或者在动作游戏中放慢速度以完成高难度操作。
  • 指针扫描 (Pointer Scanner):现代操作系统和游戏为了安全,每次启动时数据的内存地址都会发生变化(动态内存分配)。指针扫描可以帮助用户找到固定的“基址(Base Address)”,从而制作出每次启动游戏都能直接使用的修改器(Trainer)。
  • 脚本引擎 (Auto Assembler & Lua):允许高级用户编写汇编脚本或 Lua 脚本,实现更复杂的逻辑修改,甚至打包生成独立的修改器(.exe 文件)分享给别人。

3. 应用场景

  • 单机游戏修改:这是最常见的用途,玩家用来降低游戏难度、跳过重复刷怪(肝)的过程。
  • 软件逆向工程:程序员和安全研究人员使用 CE 来分析未知软件的内部运作机制。
  • 学习汇编语言与计算机基础:CE 自带了一个包含多个关卡的“闯关教程(Tutorial)”,非常适合新手通过实践来学习内存结构、指针、汇编语言等计算机底层知识。

拓展

RPG Maker

中文常译为 RPG 制作大师,是由日本 Enterbrain(现为角川集团旗下)开发的一系列**“低代码/无代码”游戏引擎**

初衷:让完全不懂编程的人,也能做出属于自己的王道 JRPG,它自带了海量的地图图块、音乐、战斗系统,你只需要像“搭积木”一样把它们拼起来。

虽然门槛极低,但它却诞生了无数神作,比如:

  • 催泪神作: 《去月球 (To the Moon)》、《寻找天堂》
  • 心理恐怖/微恐解谜: 《Omori》、《恐怖美术馆 (Ib)》、《青鬼》、《杀戮的天使》、《魔女之家》、《尸体派对》

CTF 中应用

考点 A:Ruby 语言的内存奇葩机制

在搜内存时,往往需要把数字**“乘 2 加 1”**,你肯定觉得很奇怪,为什么不直接存数字,而非要存这样的式子?

因为对于 RPG Maker VX Ace,它的底层脚本语言是 Ruby。 比如,在 C 语言或 C++ 里,数字 600 在内存里就是 600(二进制 0000 0258)。 但在 Ruby 语言里,“万物皆对象”。为了在内存中区分“这是一个对象指针”还是“这是一个极小的整数(Fixnum)”,Ruby 的底层引擎做了一个极客的设定:

  • 它把整数向左移动 1 位(相当于乘 2)
  • 然后把二进制的最后一位强制标记为 1(相当于加 1)
  • 当系统读取到一个内存地址,发现最后一位是 1 时,它就知道:“哦,这不是个指针,这是个整数,我把它减去 1 再除以 2 就能得到真实的数字了。”

这就是为什么在 XP、VX、VX Ace 版本的 RM 游戏里,用 CE 永远搜不到面板数字的真相!这就叫逆向工程中的“数据结构识别”!

考点 B:极其死板的逻辑控制(事件、开关、变量)

RM 游戏没有复杂的物理引擎,它的世界运转全靠三个东西:

  1. 开关 (Switches): 只有 True 和 False。比如 开关001:宝箱是否打开、开关002:BOSS 是否死亡。
  2. 变量 (Variables): 存放整数。比如 变量001:收集到的硬币数、变量002:好感度。
  3. 事件 (Events): 地图上的 NPC、宝箱、门,全叫事件。

在更高级的 CTF 题中,出题人会把 FLAG 藏在某个事件里,并设置条件:只有当 变量051 == 9999 且 开关008 为 True 时,NPC 才会把 FLAG 告诉你。 这时候,用 CE 动态改内存,或者用存档编辑器直接改变量,就成了破局的钥匙。

考点 C:伪加密与解包 (Unpacking)

比如说 Game.rgss3a 文件,是 RM 游戏的“加密包”,里面打包了所有的图片、音乐和核心代码脚本。 这种加密非常薄弱。在逆向安全领域,有很多开源工具(比如 RPGMakerDecrypter)可以一键把这个 .rgss3a 文件解包。 解包后,你可以直接拿到游戏的源代码。很多 CTF 选手甚至懒得打开游戏,直接用文本编辑器搜索解包后的源代码,三秒钟就能找到写在代码里的 FLAG!

Built with Hugo · Theme Stack