UE4 - IDA定位查找GWorld
源码及结构
在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
本次测试用例使用的是DF行动S3 UE版本为4.24.2
只提供学习与交流用途,禁止用于违法用途!
因为DF行动将几个常规点位进行了删除,并把常规点位变成了一个迷惑选项(可以搜索出来但是没什么鸟用)...
根据源代码,我们搜索该字符串可以得到,并做对照
这个v337疑似源代码里面的NewWrold,接下来他会被赋值给GWorld!这里贴一下EWorldType的源代码
namespace EWorldType
{
enum Type
{
/** An untyped world, in most cases this will be the vestigial worlds of streamed in sub-levels */
None,
/** The game world */
Game,
/** A world being edited in the editor */
Editor,
/** A Play In Editor world */
PIE,
/** A preview world for an editor tool */
EditorPreview,
/** A preview world for a game */
GamePreview,
/** A minimal RPC world for a game */
GameRPC,
/** An editor world that was loaded but not currently being edited in the level editor */
Inactive
};
UE_DEPRECATED(4.14, "EWorldType::Preview is deprecated. Please use either EWorldType::EditorPreview or EWorldType::GamePreview")
const EWorldType::Type Preview = EWorldType::EditorPreview;
}
恰好与源代码里面的对应,这里就是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::FinishDestroy
sub_13761140
其实就是FSeamlessTravelHandler::Tick()
的东西。
哗哗,完结撒花!☆*: .。. o(≧▽≦)o .。.:*☆