为什么要在ActorArray中找坐标?
我们知道 ActorArray 中存放的是所有附近的 Actor,如果我们找到 ActorArray 下的坐标,则可通过遍历获取所有 Actor 的坐标。
开始找坐标
选中我们找到的 Count 地址,浏览相关内存区域(Ctrl+B),然后地址减8字节,使用快捷键空格跳转到(前进)这个地址所在的内存位置。
Count 地址为 0x1FCCD0BB738,减8字节得到 ActorArray 的地址(其实是 TArray 的地址),也就是 0x1FCCD0BB738 - 0x8 = 0x1FCCD0BB730。
指针扫描选项.png
地址 0x1FCCD0BB730 的数据 0x1FCCD742B80 就是 ActorArray 的地址(其实是 TArray 中指针指向的地址)。

而 ActorArray 里也是地址,这些地址是 Actor 的地址,所以我们拷贝几个 Actor 的地址去结构分析。

Actor内存布局.png
随便选3个 Actor 地址去结构分析,结构分析弹窗里使用快捷键(Ctrl+A)添加额外的地址框。

分析出结果后,从 0x100 以后的偏移开始找,因为 UE4 引擎在 0x100 偏移之前找坐标基本都没有。如果没有找到坐标,就重新换几个 Actor 的地址重新分析。
Actor内存布局.png
找到红色的指针(Pointer)再点前面小箭头展开,找里面有没有类似坐标的数值,有时候需要把类型 4 Bytes 改为 Float 类型才能直观看到坐标的数值。

找到类似坐标的数值后,选中地址按快捷键空格会跳到对应的内存数据区域,把显示类型改为单浮点并观察附近数据。

也可以通过展开指针后,选中第一个直接跳转到数据区域浏览后面的数值,找到数值后,再在结构分析窗口里找对应的偏移。因为结构分析的类型可能不是我们想要的,直接浏览内存数据会更直观。

就像这里 190 偏移被 CE 识别为 4 Bytes 类型,我手动改为 Float 类型才能直观看出 -9840.522461 类似坐标的数值,然后跳转内存区域发现确实是我们想要的:
Actor内存布局.png
最终找到的坐标:
Actor内存布局.png
上面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。

世界数组地址里找到的坐标:
Actor内存布局.png
验证坐标
找到坐标后锁住数值,看能不能正常移动和跳跃,不能则说明我们找到的数据是正确的。
其他方式
还可以直接通过搜索 Z 坐标,然后指针扫描5级,找到偏移是 "BattleRoyaleTrainer-Win64-Shipping.exe"+02AEFFB8 -> 0x30 -> 0xB0 下面的,则是我们想要的 ActorArray 下的坐标偏移。
转载自六阿哥博客

最后修改:2021 年 06 月 21 日
如果觉得我的文章对你有用,请随意赞赏