本文主要是介绍[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是我自己为方便 封装的一个连续读取的函数
运行效果如图:
这篇关于[UE4 逆向] GetName逆向-内部和外部分别DumpName(4.23以下)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!