fuqiuluo’s blog

记录美好生活

技术分享

UE4 - IDA定位查找GameInstance/Actors/ULevel

#Unreal#作弊
type
Post
status
Published
date
Jun 5, 2025
slug
summary
tags
Unreal
作弊
category
技术分享
icon
password

定位GameInstance(纯ida)

理论上来说你应该使用sdk去定位的,因为游戏99%会去除UE引擎的调试字符串,导致你毛也看不见!
他在UWorld类里面定义如上代码,但是我们要怎么找到他的偏移,神经病一样自问自答...
虚幻引擎内这个OwningGameInstance是私有的外部不能直接获取,是通过一个方法获取的,虽然编译后和直接获取没什么区别(
你看,这里有调用获取的方法,还带上了我们最喜欢的日志!虚幻引擎真的是太好玩了!
notion image

ULevel的定位

这里这个定位,我会介绍两种方法,一种是市面上比较泛滥的,一种是对照源码比较直观的!

第一种

这种方法比较不明所以,是我从网上学来的,虽然我不知道对应的源代码在什么地方,但是这个定位方法好像是依赖一块打印输出当初帧率CPU占用的代码的,
对GWorld进行xrefs,然后找下面有相同的两次CALL(arm64是BL)的汇编
notion image
然后我们IDA跳过去,兜兜转转又回到了这里,
notion image

第二种

我们看看下面的一个代码,这个是完整的代码,没有任何阉割!
我们发现GWorld = NewWorld;是一处赋值语句,我们定位出GWorld之后可以全局(就是去xrefs)去找这种赋值的操作,缩小一下查找范围,接下来我们找if (WorldContext.WorldType == EWorldType::PIE)其实这在ida里面对应的就是
notion image
这在GWorld = NewWorld之后必然有一个xxx == 3的操作,我们的目的是要找一下GetWorldSettings的方法,下面是UWorld::GetWorldSettings的源代码,我们发现里面对PersistentLevel进行了调用。
回到ida,对应的第一个Level::GetWorldSettings的入参就是ULevel啦!
notion image

Actor的定位

这个的定位其实最好是通过伟大的内存搜索器,比如CE、GG修改器什么的去做,因为在ULevel里面保存Actors的是一个TArray一个模板类,
我们定位到ULevel之后,可以去翻内存,找一个指针,并且下面偏移8字节有一个数组大小的东西,那个大概率是Actors(也可能是ActorsForGC)... 回到正题!
先贴一段源代码,我们搜索字符串UWorld::DestroyActor: World has no context! 。搜索这个干什么呢?为了找RemoveActor !这对我们的大聪明来说轻而易举好吧,
notion image
这里贴一下UWorld::RemoveActor源代码
notion image
Loading...