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

用 ReClass 还原游戏结构体:从内存碎片到可直接用的偏移表

约 3672 字 · 预计阅读 10 分钟
一句话总结:CE 只能告诉你「某个值在哪个地址」,ReClass 让你看到「这个地址周围整块内存长什么样」——本篇用它把玩家对象还原成结构体,直接导出 C++ 代码,把逆向成果变成可维护的偏移表。

前两篇走完了「扫描」和「防守视角」。这篇补上进攻侧欠缺的那块:结构还原。

为什么需要它?CE 找血量,你得到一个地址;但玩家对象里还躺着坐标、阵营、骨骼矩阵、背包指针。逐个用 CE 扫,一晚上能扫出三四个就不错了。ReClass 的思路完全不同:你给我一个地址,我把这一整块内存按结构体展开给你看。

ReClass 的核心概念:一切都是结构体

打开 ReClass,界面就是一个树状表格。第一行定义一个「类」(Class),往下展开字段。每个字段有类型和偏移,值实时从目标进程读。指针类型可以继续展开成子结构,于是整个对象图就一层层铺开了。

理解它只需要一句话:ReClass 不猜值,它把内存按你定义的布局切片,然后显示每一片的内容。你定义得对,看到的就是真实结构;定义错了,看到的就是乱码——所以它本质是个「视图工具」,判断还得靠人。

图 1:同一块内存的两种视角,左边是字节,右边按类型切开后才有语义

实战:还原一个玩家对象

演示对象仍是虚构靶场。假设 CE 找到一个玩家实例地址 0x1A2B3C40(堆对象,每次启动都会变)。步骤如下:

第一步,建类。新建 Class,地址填 0x1A2B3C40。ReClass 会立刻显示前几百字节的内容,大多是零和随机值,正常。

第二步,看开头。x64 程序的对象开头通常是 vtable 指针(8 字节),值形如 0x7FF6xxxxxxxx,指向模块的只读段。看到了就说明这确实是个类实例,而不是一块普通数据。在 ReClass 里把第一个字段设成 ClassPtr 类型,它会把 vtable 的内容也展开——一张函数指针表,顺序固定,这本身也是识别对象类型的依据。

第三步,铺字段。根据已知信息逐个验证:

偏移 类型 字段 验证方式
0x00指针vtable指向模块只读段
0x08char*昵称展开后是可读字符串
0x100int32血量挨打后数值下降
0x104int32最大血量通常是常量 100
0x138float[3]坐标移动后三个值连续变化
0xF4int32阵营取值 2 或 3
0x114float[3]速度移动时非零
0x26A8指针骨骼矩阵展开后是 3×4 矩阵数组

每个字段都要动一下游戏再回来看值,这是唯一可靠的验证方式。凭偏移猜字段,十个里能错五个。

第四步,数组化。实体列表本质是「指针数组 + 步长」,在 ReClass 里用数组节点表示:基址 + 索引 × 0x10,每个元素再展开成上面的类。这样整条实体列表就能像调试器里一样浏览,找敌人时不用来回切窗口。

第五步,导出。ReClass 自带导出功能,能生成 C++ 结构体声明。导出的代码稍微整理(改名字、补类型)就能直接用在绘制系列的内存读取里:

struct Player {
    void*    vtable;        // 0x00
    char*    name;          // 0x08
    char     pad0[0xF8];    // 0x10 - 0x107 未知区
    int32_t  hp;            // 0x100
    int32_t  maxHp;         // 0x104
    int32_t  team;          // 0xF4(注意顺序:靶场布局里 team 在 hp 前面)
    Vec3     pos;           // 0x138
    Vec3     velocity;      // 0x114
    void*    boneMatrix;    // 0x26A8
};

结构体一定要加 #pRAGma pack(push, 1) 或者用显式偏移读取,别指望编译器布局跟游戏一致——这是新手最容易翻车的地方。

三个必须知道的事

地址是堆对象,重启就变。ReClass 里填的 0x1A2B3C40 只在当前进程有效。真正要固化的是「基址 + 偏移链」,ReClass 只是帮你把结构看清楚,链还得用 CE 的指针扫描找。

别追求 100% 还原。一个玩家对象可能几百字节,中间大段是未知区(技能冷却、状态机、碰撞体)。只还原你要用的字段就够了,剩下的留空数组占位,别硬猜。

多态对象要看 vtable。同一个数组里可能混着不同子类(玩家、NPC、投影物),字段布局不一样。看 vtable 指针的值来区分类型,比按字段猜靠谱得多。

三篇小结

逆向这条线就到这里:CE 负责找,ReClass 负责看结构,反作弊那篇讲清楚了为什么这些操作在在线游戏上不可行。三篇合起来,配合前面的 C++ 系列(读取、投影、骨骼),一个完整的「找 → 读 → 画」链路就通了。

下一步想深入,两个方向:一是学汇编和调用约定,能读懂 CE 里的「谁访问了这个地址」;二是学调试器(x64dbg),动态跟踪比静态猜结构高效得多。

老规矩,所有练习留在单机靶场。

目录导航
  • ReClass 的核心概念:一切都是结构体
  • 实战:还原一个玩家对象
  • 三个必须知道的事
  • 三篇小结
  • 相关文章:

  • Cheat Engine 入门实战:从扫描到指针链,自己动手定位游戏数据2026-10-20 23:27:36
  • 发表评论

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