15.UE-游戏逆向-DumpUE struct
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
本次游戏没法给
内容参考于:微尘网络安全
上一个内容:14.UE-游戏逆向-DumpUE Function
struct需要知道下方的三个东西
UStruct、FField、FProperty
UStruct是一个用来描述结构体的东西,它就相当于下方的代码,就是一个类,然后这里面只有数据,数据是使用FField结构来描述的,FProperty是基于FField实现的,FField里面只有基本信息,比如成员变量的名称,然后成员变量的值是通过FProperty结构存储的,这里的FProperty是一个抽象,它有好多实现
class c{}
如下图红框FProperty的多个实现,下图红框只是一部分
![]()
接下来就来找UStruct、FField、FProperty这三个东西,然后通过CoreUObject.Vector来找,它是坐标的结构(x、y、z),它们的类型是float是4字节,然后3个4字节是12字节
还是使用ce的结构分析来找
下图红框指向的是FProperty,这里CE它分析错了,下图红框应该是个指针是个地址
然后在0x50位置右击选择指针,如下图可以看到0x50位置的值是1AE23656F00这与其它的地址开头是一样的,所以就可以认定是CE分析的有问题,把地址分析成了普通数据
然后选中0x51到0x54,右击选择删除
然后就可以了,下图的0x58是结构的大小3个4字节正好是12,然后0x50是指向的第一个成员变量,也就是一个FProperty(看到FProperty要知道包含了FField,因为FProperty基于FField实现的)
然后struct中还有一个SuperStruct,它使用来指向父struct的,这个CoreUObject.Vector没有,需要看CoreUObject.Struct这个结构它的SuperStruct指向CoreUObject.Field的地址,然后如下图就找CoreUObject.Struct的地址
下图是CoreUObject.Struct结构的内存,SuperStruct在0x40位置,如下图红框,为什么在0x40
如下图红框0x40位置的地址是可以和CoreUObject.Field的地址对上
然后struct就没别的需要知道的了,然后是FProperty,再次回到CoreUObject.Vector的内存,如下图点开0x50
然后成员变量的名字,如下图0x28位置是成员变量的名字,它是一个GName的id
如下图67950对应的字符串是x
下一个FProperty在0x20位置,如下图CE也把它分析错了
然后下图红框就是下一个成员变量,也就是y
可以通过0x28位置的GName的id来确认
如下图红框是Y
然后数据大小和偏移,0x3C位置的值是数据类型的大小,0x4C是偏移
然后是FProperty中的类(Class),是0x8位置,它与游戏基址开头一样都是7F,然后0x0位置是虚函数
然后是FProperty的大小,FProperty指的就是 CoreUObject.Property,想知道FProperty的大小需要进入CoreUObject.Property的内存,如下图红框它的内存地址
它的大小在0x58位置是0x78,下方的内存分析的有问题,FProperty的大小是0x78
以上的结构位置记住就行,UE4和UE5通杀,就算位置变了也不会有太大的变化