10.游戏逆向-pxxx-UObjectBase成员解密
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
本次游戏没法给
内容参考于:微尘网络安全
上一个内容:9.游戏逆向-pxxx-InternalIndex解密
上一个内容中重新梳理了,UObject,然后找到了UObjectBase,然后通过内存分析UObjectBase里的成员全部都进行了加密,找解密的方式,可以从GetFullName函数中找,GetFullName函数中访问了Class、FName、UObject(OuterPrivate),想定位GetFullName就要找定位它的字符串,定位的字符串是CopyPropertiesForUnrelatedObjects,如下图在UE源码中搜索CopyPropertiesForUnrelatedObjects

下图红框的就是我们要找的,双击下图红框即可跳转到代码

如下图红框的代码,可以看到GetFullName函数

如下图红框GetFullName函数里面的内容

然后使用ida搜索字符串,下图红框的就是,双击下图红框可以跳转

如下图红框我们要找的字符串,Old和New都在这里

然后双击下图红框跳转代码

如下图双击之后

然后按F5,生成伪代码

接下来通过对比源码找GetFullName,如下图红框
UE源码中的代码是FString::Printf,它是一个打印传了两个参数第一个是
(TEXT("CopyPropertiesForUnrelatedObjects: Old (%s)")
第二个是
*OldObject->GetFullName(),所以就找CopyPropertiesForUnrelatedObjects: Old (%s)后面的也就是v121,这里的v121是GetFullName的返回值,所以通过找v121的值哪来的就能找到GetFullName函数
![]()
如下图红框v121的值来自于v119,然后v119的值来自于sub_7FF73139655C(v130, v164, 0);,所以sub_7FF73139655C是GetFullName

为了方便观察给sub_7FF73139655C改一个名,鼠标右击选择Rename global item

在下图红框写上函数名,写什么都行,只要自己记得住,这里我为了不用记就写GetFullName了

点击上图中的ok后

双击上图的GetFullName进入GetFullName函数,如下图进入后,就可以看到之前找InternalIndex的类似代码了,解密代码

下图红框的解密是Class的

下图红框的解密是FName中的Number

Number在下图红框AppendName函数中

然后AppendName函数中AppendString中

然后AppendString中有一个GetNumber

如下图GetNumber在FName里,它返回了FName的Number成员

也就是下图红框,要它的作用,就是我们得到的名字是aaa/vvv.cc这样的像是一个路径,但实际上我们需要的是vvv.cc这一个,想要截取vvv.cc就要用到Number,所以现在一共要找5个解密,现在class的解密得到了,Number的解密得到了

还剩下,下图红框的两个

俩都在下图红框的GetPathName函数中

接下来在ida中找GetPathName,如下图红框GetPathName( StopOuter, Result );两个参数,但是它是在UObjectBaseUtility类中调用的,所以它本质上是UObjectBaseUtility.GetPathName( StopOuter, Result );,也就是this.GetPathName( StopOuter, Result );编译完的代码GetPathName( this,StopOuter, Result )这样的,下图红框的sub_7FF730DF2288比较符合a1在if里,UE源码中使用if里是this,所以ai就是this

为了方便观察这里给它改个名字,然后双击下图红框进入GetPathName

通过对比UE源码,可以更进一步确定它是GetPathName函数,特征太明显了

然后通过下图蓝框的对比,可以得出下图红框就是OuterPrivate的解密(GetOuter函数返回的是OuterPrivate)

然后就还剩下Name了,也就是GName,也是FName,也是NamePrivate,它有很多名字,看起来就很乱,但它们都是一个东西,GName它在下图红框的AppendName函数中

然后AppendName里调用了一个GetFName函数

GetFName函数里就返回了UObjectBase中的NamePrivate

然后下图的v18就是我们要的GName

到这就把下图红框的4个加FName里的Number的解密全找到了,接下来就可以Dump游戏的sdk了


