ue5游戏逆向之寻找GWorld,GName和GUObjectArray
对于ue4而言,符号如果暴露出来的可以直接通过导出表寻找GWorld,GUObjectArray。ue4.23版本以前的通过GNames函数,ue4.23版本及其以后的通过FNamePool::FNamePool构造函数寻找GName。对于未暴露符号的寻找方法和ue5未暴露符号的三件套找法一样。
寻找GWorld#
查看UE5.1源码,GWorld
定义在\UE_5.1\Engine\Source\Runtime\Engine\Private\World.cpp
文件中。
寻找哪里引用的GWorld
,随便找一个函数UWorld* FSeamlessTravelHandler::Tick()
,可以看到在字符串SeamlessTravel FlushLevelStreaming
的上面GWorld会被赋值
继续往上看,GWorld
在被赋值之前会先被初始化为NULL
ida中在搜索字符串SeamlessTravel FlushLevelStreaming
,然后跳转到交叉引用处往上找即可看到GWorld
继续往上找可以看到GWorld
被初始化为NULL
,因此GWOrld就是0x7488768
寻找GName#
ue5的GName也是用内存池保存,内存池FNamePool
的构造函数会初始化一些Name,例如None
,ByteProperty
,IntProperty
等
ida中搜索字符串ByteProperty
,转到交叉引用处就是FNamePool
构造函数。
跳转到FNamePool
的引用处,传入的参数(this指针)就是GName
寻找GUObjectArray#
GUObjectArray
在\UE_5.1\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectHash.cpp
中定义
同样找到GUObjectArray
引用的地方,这里找的是int32 FEngineLoop::PreInitPostStartupScreen(const TCHAR* CmdLine)
函数,字符串CloseDisregardForGC
的下面就是GUObjectArray
.
ida找到CloseDisregardForGC
字符串引用处,即可确定GUObjectArray
是0x730B3F0
DUMP SDK#
对github上的ue4dump进行修改,兼容ue4.25版本以上以及ue5版本。项目地址 https://github.com/revercc/UE4Dumper.git
运行./ue4dumper64 --newue+ --strings --gname 0x72C9F40 --package 包名 --output /sdcard/Download
dump Strings
运行./ue4dumper64 --newue+ --sdkw --gworld 0x7488768 --gname 0x72C9F40 --package 包名 --output /sdcard/Download
dump SDK
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探