为什么需要摄像机矩阵?
我们可以用屏幕尺寸 + 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