[UE4 逆向] GetName逆向-内部和外部分别DumpName(4.23以下)

本次示范游戏为BattleRoyaleTrainer这个单机游戏

1.GetName函数引擎源码详细分析

直接搜找到引擎源码中的GetName()

在Engine\Source\Runtime\CoreUObject\Public\UObject\UObjectBaseUtility.h里

 进入GetFName()看一看,发现它返回了个NamePrivate,NamePrivate为FName类型

 再进入ToString(),调用了GetDisplayNameEntry()下的GetPlainNameString(),

 进入GetPlainNameString(),发现它只是对字符串的一些处理,说明GetDisplayNameEntry()就已经返回字符串了,GetPlainNameString()不用管

 进入GetDisplayNameEntry() ,这里Names也就是GName,Index为名字索引(FName中的成员), 箭头所指地方为关键地方(后面会说),

这边再去TNameEntryArray看看,发现是个类模板的声明定义

 再进入TStaticIndirectArrayThreadSafeRead,结合上边返回的Names[Index],这里肯定是重载了操作符[ ],

 

在该类中找到重载操作符[ ]的函数,发现里面调用了GetItemPtr(index)

 

 再进入GetItemPtr(), 这里就是最里层,最关键的GetName算法部分了

 2.内部DumpName

直接照源码里要用的结构抄一下再改一点就可以了

 这里先打印20个看看,要dump所有的话,改20为Names->NumElements即可,注入dll后效果如图

3.外部DumpName

外部dump的话就不能用指针方式了,只能一层一层读,也很简单

 

 这里ReadMemory是我自己为方便 封装的一个连续读取的函数

 运行效果如图:

猜你喜欢

转载自blog.csdn.net/deadpoolwilson12/article/details/127559331