本次示范游戏为BattleRoyaleTrainer这个单机游戏
直接搜找到引擎源码中的GetName()
在EngineSourceRuntimeCoreUObjectPublicUObjectUObjectBaseUtility.h里
进入GetFName()看一看,发现它返回了个NamePrivate,NamePrivate为FName类型
再进入ToString(),调用了GetDisplayNameEntry()下的GetPlainNameString(),
进入GetPlainNameString(),发现它只是对字符串的一些处理,说明GetDisplayNameEntry()就已经返回字符串了,GetPlainNameString()不用管
进入GetDisplayNameEntry() ,这里Names也就是GName,Index为名字索引(FName中的成员), 箭头所指地方为关键地方(后面会说),
这边再去TNameEntryArray看看,发现是个类模板的声明定义
再进入TStaticIndirectArrayThreadSafeRead,结合上边返回的Names[Index],这里肯定是重载了操作符[ ],
在该类中找到重载操作符[ ]的函数,发现里面调用了GetItemPtr(index)
再进入GetItemPtr(), 这里就是最里层,最关键的GetName算法部分了
直接照源码里要用的结构抄一下再改一点就可以了
这里先打印20个看看,要dump所有的话,改20为Names->NumElements即可,注入dll后效果如图
外部dump的话就不能用指针方式了,只能一层一层读,也很简单
这里ReadMemory是我自己为方便 封装的一个连续读取的函数
运行效果如图:
本文发布于:2024-01-30 03:48:53,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170655773319014.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |