UE4找摄像机矩阵

/ 7

为什么需要摄像机矩阵?

我们可以用屏幕尺寸 + Actor 三维坐标 + 摄像机矩阵,通过固定算法计算出 Actor 的屏幕坐标,从而实现绘制 Actor 的数据,实现透视效果。

常规方式

先扫未知的初始值,类型单浮点。

移动镜头并搜索变动的数值,再移动再搜索,反复操作。不移动镜头,搜索不变的数值,反复操作。

最后搜索结果数量不再减少了,先将结果列表里当前值带 E 的和绿色的静态地址都删掉(UE4里矩阵地址都会有偏移),再依次选择地址浏览相关内存区域,数据类型切为单浮点。转动镜头,根据摄像机居中特征分析是否是矩阵数据。

最终找到矩阵如下:

摄像机矩阵的特征

UE4 摄像机矩阵的第三列是 0.00 0.00 0.00 x.00,最后一个数值不固定,前面3个 0.00 固定。并且除了第四行中会出现较大的数值,前面三行都不会出现较大数值。

一般不移动镜头,摄像机矩阵数值是不会发生变化的。但骨骼矩阵和骨骼数组的数值可能会发生细微变化,那是因为骨骼在做闲置动画,有细微运动。

UE4 的摄像机矩阵的动态地址一般重启游戏才会发生变化,切换场景和房间一般不会发生变化,因为 FPS 射击游戏一般摄像机只有一个。

特征码方式

UE4 还可以使用摄像机矩阵的特征码快速定位,通用矩阵特征码:

00 00 00 00 00 00 00 00 00 00 80 3F 00 00 80 3F 00 00 80 3F 00 00 80 3F 00 00 00 00 00 00 00 00 00 00 80 3F 00 00 00 00 00 00 00 00 00 00 80 3F 00 00 80 3F 00 00 00 00

使用特征码搜索字节数组,内存去掉可写并改成方块状态(可读或可写)。一般 UE4 引擎会搜索到3个结果,依次浏览相关内存区域,找出正确的矩阵即可。

找基址

找到矩阵地址后,对地址进行指针扫描,扫描级别2,然后就能找到基址。

最终矩阵的基址和偏移为:

"BattleRoyaleTrainer-Win64-Shipping.exe"+02886630 -> 20 -> 280