为什么要在ActorArray中找坐标?
我们知道 ActorArray
中存放的是所有附近的 Actor
,如果我们找到 ActorArray
下的坐标,则可通过遍历获取所有 Actor
的坐标。
开始找坐标
选中我们找到的 Count
地址,浏览相关内存区域(Ctrl+B),然后地址减8字节,使用快捷键空格跳转到(前进)这个地址所在的内存位置。
Count
地址为 0x1FCCD0BB738
,减8字节得到 ActorArray
的地址(其实是 TArray
的地址),也就是 0x1FCCD0BB738 - 0x8 = 0x1FCCD0BB730
。
地址 0x1FCCD0BB730
的数据 0x1FCCD742B80
就是 ActorArray
的地址(其实是 TArray
中指针指向的地址)。
而 ActorArray
里也是地址,这些地址是 Actor
的地址,所以我们拷贝几个 Actor
的地址去结构分析。
随便选3个 Actor
地址去结构分析,结构分析弹窗里使用快捷键(Ctrl+A)添加额外的地址框。
分析出结果后,从 0x100
以后的偏移开始找,因为 UE4 引擎在 0x100
偏移之前找坐标基本都没有。如果没有找到坐标,就重新换几个 Actor
的地址重新分析。
找到红色的指针(Pointer)再点前面小箭头展开,找里面有没有类似坐标的数值,有时候需要把类型 4 Bytes
改为 Float
类型才能直观看到坐标的数值。
找到类似坐标的数值后,选中地址按快捷键空格会跳到对应的内存数据区域,把显示类型改为单浮点并观察附近数据。
也可以通过展开指针后,选中第一个直接跳转到数据区域浏览后面的数值,找到数值后,再在结构分析窗口里找对应的偏移。因为结构分析的类型可能不是我们想要的,直接浏览内存数据会更直观。
就像这里 190
偏移被 CE 识别为 4 Bytes
类型,我手动改为 Float
类型才能直观看出 -9840.522461
类似坐标的数值,然后跳转内存区域发现确实是我们想要的:
最终找到的坐标:
上面3个数值是坐标 x y z
,下面3个数值是缩放,下面这3个数值不一定是固定的1.00。
X坐标最终的偏移为 30 -> (B8 - 8) -> 10 -> 158 -> 190
。
Y坐标最终的偏移为 30 -> (B8 - 8) -> 10 -> 158 -> 194
。
Z坐标最终的偏移为 30 -> (B8 - 8) -> 10 -> 158 -> 198
。
这里 B8 - 8
是因为 Count
地址减少8字节才是 Actor
数组的地址,而 10
则是数组的第二个元素,这个偏移用于递增8字节遍历 Actor
。
世界数组地址里找到的坐标:
验证坐标
找到坐标后锁住数值,看能不能正常移动和跳跃,不能则说明我们找到的数据是正确的。
其他方式
还可以直接通过搜索 Z 坐标,然后指针扫描5级,找到偏移是 "BattleRoyaleTrainer-Win64-Shipping.exe"+02AEFFB8 -> 0x30 -> 0xB0
下面的,则是我们想要的 ActorArray
下的坐标偏移。