当前位置:首页 > 逆向工程 > 正文

Cheat Engine 入门实战:从扫描到指针链,自己动手定位游戏数据

约 3370 字 · 预计阅读 9 分钟
一句话总结:Cheat Engine 是逆向入门最顺手的工具,本篇用它的四步法(首次扫描、变化筛选、指针扫描、偏移链验证)把「血量在哪个地址」从一个黑盒问题变成可复现的流程,全程在虚构靶场《星陨 Online》上演示。

前面八篇 C++ 系列里,所有偏移都是「编的」。很多人看完第一反应是:那真实偏移怎么来?答案就是本篇的主角 Cheat Engine(简称 CE)。

先约定:靶场仍是虚构的《星陨 Online》,文中的地址和数值都是演示用的。CE 本身是合法的开源工具,用途从游戏调试到软件测试都有,练手请用自己的程序或自建服务器。

CE 在做什么

游戏运行时的血量存在内存里,但没有名字,只有一个地址。CE 干的事就是:猜。它让你反复输入「我知道的数值」,然后扫描整个进程内存,把「刚好等于这个值」的地址全列出来,再通过「数值变化前后的对比」把候选集一步步缩小。

一个 4GB 进程可能有几百 MB 可读页,直接找等于大海捞针。CE 的聪明之处在于用变化筛选:搜一次「100」,打两枪变 87 再搜 87,来回几次,几十万个地址会收敛到几个。这跟调试里的二分法是一个思路。

四步法:从几十万到一条链

图 1:四步法收敛的过程,每一步都把候选集砍掉一个数量级

第一步,确定数值类型。先看这个值在游戏里怎么显示:血量整数(4 字节 int)、比例(float)、金币(可能 8 字节)。类型选错,扫描一万次也命中不了。靶场的血量是 4 字节整数。

第二步,首次扫描。CE 附加到 StarFall.exe,输入当前血量 100,类型选 4 字节,点首次扫描。几秒后左侧列表给出几十万个地址——别慌,这是正常的。

第三步,变化筛选。回游戏挨一枪,血量掉到 87,回 CE 输入 87 点「再次扫描」。重复三四轮(挨枪、搜新值),列表会从几十万缩到个位数。这时候逐个改值验证:改成 50 游戏里血条跟着变,就锁定了。

第四步,指针扫描。直接改这个地址,重启游戏就失效——因为地址每次启动都变。真实做法是找「谁指向它」:CE 的「找出是什么访问了这个地址」能列出访问指令,逆推寄存器来源,一层层往上找静态基址。手动找链很考耐心,CE 自带的「指针扫描」能自动化这一步:以当前地址为目标,扫出指向它的多级指针路径。

偏移链怎么读

指针扫描的结果形如:

"StarFall.exe"+0x18AC000 -> +0x20 -> +0x138

读法是:取 StarFall.exe 的模块基址,加 0x18AC000 得到一个指针,解引用后加 0x20 得到另一个指针,再解引用加 0x138,就是血量地址。这不就是绘制系列第二篇里那个 RPM(base + 0x18AC000 + ...) 的逻辑吗?是的,那份偏移表就是这么来的——先 CE 找到,再写进代码。

验证链是否可靠的标准很简单:重启游戏三次,三次都能用同一个基址加偏移读到你改过的值,才算稳定。一次能用不算数,ASLR 会让运气成分很大。

五个新手必踩的坑

类型选错。float 和 int 看着都是数字,搜不到就先换类型试,这是最高频的问题。

多级指针层级搞反。链的阅读顺序是从基址往外,写代码时顺序反了会读到垃圾值。建议在 CE 里把链复制出来,用代码跑一遍对答案。

只找偏移不找结构。血量找到了,同结构里的坐标、阵营通常就在附近(同一个类实例里),用 CE 的「浏览内存区域」看一眼布局,能一次拿到一批偏移,比逐个找快十倍。这也是下一篇 ReClass 要讲的内容。

改值不写代码。CE 手动改只适合验证,生产用法一定是「找到 → 验证 → 写进 C++ 读取」,否则每次重启都要重来。

在线上游戏上练。这条不是技术坑是底线坑。反作弊对 CE 这类调试器附加特别敏感,附加即封。练手请用单机、自建服务器或 Pwn Adventure。

下一篇预告

CE 能找到单点偏移,但一整套玩家结构体(坐标、血量、阵营、骨骼矩阵挨在一起)靠手工逐个抠太慢。下一篇上 ReClass:把内存当结构体来读,一次还原出整个对象的字段布局。

目录导航
  • CE 在做什么
  • 四步法:从几十万到一条链
  • 偏移链怎么读
  • 五个新手必踩的坑
  • 下一篇预告
  • 相关文章:

  • 用 ReClass 还原游戏结构体:从内存碎片到可直接用的偏移表2026-10-20 23:21:57
  • 发表评论

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。