type
Post
status
Published
date
May 3, 2026
slug
summary
tags
Unreal
作弊
category
技术分享
icon
password
源码及结构
在ue4的源代码中GWorld是一个全局指针

这个UWorldProxy类里面保存了一个UWrold的指针,

其中GWorld全局指针在World.cpp文件被赋值

定位思路
- 根据注释和代码可以发现GWorld在这里初始化,联系上下文,得到字符串“SeamlessTravel FlushLevelStreaming”,使用ida搜索这个字符串即可定位

字符串搜索法
以下内容转载自https://bbs.kanxue.com/thread-280042.htm
当然这个字符串不是唯一的,你可以根据你的搜索选择你认为更加合适定位的字符串。
原文的图片可能不太好理解,因为没有对应的源代码可以看,这里我贴上了对应的源代码


随便把一个UE4游戏拖进IDA中,用我们刚刚找到的字符串进行定位。源码和伪代码对比分析,我们可以得出结论

此处就是GWorld,只需减去ImageBase就能得到偏移。(ImageBase是什么都不知道,建议重学!)
GWorld是虚幻中一个非常重要的结构,加上SDK拿到的偏移,我们就能定位到其他结构。
ida搜不到字符串的原因
引用文章:https://bbs.kanxue.com/thread-281339-1.htm
在某些情况下,如果使用CE内存搜索或者hex编辑器去查看二进制文件发现存在这些字符串但是无法搜索出来,可能就是因为
- 字符串在编译的时候被抹去了
- ida无法识别这个字符串
第二个情况很少见,几乎没有吧,ue4引擎所使用的字符串编码是UTF-16,而这种编码格式ida string表是默认不搜索的,所以自然就搜不到了。
解决方法就是:只需在string表窗口右键点击设置,勾选上Unicode c-style(16 bits)这个选项即可。
非常规点位寻找GWorld
本次测试用例使用的是DFM S3 UE版本为4.24.2只提供学习与交流用途,禁止用于违法用途!
因为DFM将几个常规点位进行了删除,并把常规点位变成了一个迷惑选项(可以搜索出来但是没什么鸟用)...

根据源代码,我们搜索该字符串可以得到,并做对照

这个v337疑似源代码里面的NewWrold,接下来他会被赋值给GWorld!这里贴一下EWorldType的源代码
恰好与源代码里面的对应,这里就是
EWorldType::Game (对应i32的值为1) 后面发现v339被赋值给了v162而v162给了一个静态的东西,初步怀疑off_17CB3018是所谓的GWorld (v337就是v339,我重新反编译了一下,无伤大雅)
接下来我们进行验证众所周知
GWorld在某处会被多次引用,这个就是一个校验点,
IDA找到有
sub_13751468 / sub_13761140 / sub_137706B0
研究一下sub_13751468看看,额,有点陌生,让我想想,(似曾相识???


没错,
sub_13751468就是UWorld::FinishDestroysub_13761140 其实就是FSeamlessTravelHandler::Tick() 的东西。哗哗,完结撒花!☆*: .。. o(≧▽≦)o .。.:*☆
