为什么需要摄像机矩阵?

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

常规方式

  1. 先扫未知的初始值,类型单浮点
  2. 移动镜头并搜索变动的数值,再移动再搜索,反复操作
  3. 不移动镜头,搜索不变的数值,反复操作
  4. 最后搜索结果数量不再减少时:
    • 将结果列表里当前值带 E 的和绿色的静态地址删掉
    • 依次选择地址浏览相关内存区域,数据类型切为单浮点
    • 转动镜头,根据摄像机居中特征分析是否是矩阵数据

最终找到矩阵如下:
摄像机矩阵

摄像机矩阵的特征

  • UE4 摄像机矩阵的第三列是 0.00 0.00 0.00 x.00,最后一个数值不固定,前面3个 0.00 固定
  • 除了第四行中会出现较大的数值,前面三行都不会出现较大数值
  • 一般不移动镜头时,摄像机矩阵数值不会变化
  • UE4 的摄像机矩阵的动态地址一般重启游戏才会变化,切换场景和房间一般不会变化

特征码方式

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

1
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,然后就能找到基址。

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

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