吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3866|回复: 6
收起左侧

[游戏安全] UE4逆向笔记之手动解析类名及类

  [复制链接]
XiaoTouM1ng 发表于 2022-12-30 16:06

Uobject结构体:

在UE4中所有类都需要继承该类才能被引擎所承认是一个UE对象。

class UObject
{
void* vtf;
EObjectFlags ObjectFlags;
int32 InternalIndex; 
UClass* ClassPrivate;  //表明对象所属的基类
FName NamePrivate;
UObject* OuterPrivate;
}

每个对象都会存在ClassPrivate该字段。

FName结构体:

struct FName
{
    int32_t ComparisonIndex;
    int32_t Number;
};

以Uworld为例子手动解析:

通过下图前20个字节就能判断是否为一个对象,在CE中看到如下图中的结构体就可以判断他是一个UE4对象:



02.png

所以我们只需要判断地址+0x10是否存在值就可以知道目标是否是一个Uobject结构体,代码如下:

DWORD64 GetClassName(DWORD64 Address) {

    DWORD64 UobjectClass = ReadProcessDword((PVOID)(Address + 0x10));
    if (UobjectClass != NULL)
    {
        return UobjectClass;
    }

    return NULL;

}

如果Class存在那么我们就获取该Class的Fname:

FName GetFName(DWORD64 Address) {

    FName Name = ReadProcessFname((PVOID)(Address + 0x18));
    if (Name.ComparisonIndex)
        return Name;
    return FName{};

}

int FnameComparisonIndex = GetFName(Address).ComparisonIndex; //这里获取的是基类的Gname编号

获取到FName后就可以通过算法拿到GName中的名称了:

std::string GetNameOld(int i) //旧版本算法
{
    DWORD64 G_Names = ReadProcessDword((PVOID)GNames);
    int Id = (int)(i / (int)0x4000);
    int Idtemp = (int)(i % (int)0x4000);
    auto NamePtr = ReadProcessDword((PVOID)(G_Names + Id * 8));
    auto Name = ReadProcessDword((PVOID)(NamePtr + 8 * Idtemp));
    char name[0x100] = { 0 };
    if (ReadMemory(PVOID(Name + 0xC), name, 0x100)) //0xC需要手动推算,默认是0x10
    {
        return name;
    }
    return std::string();
}

std::string GetName(DWORD64 Address) {

    int FnameComparisonIndex = GetFName(Address).ComparisonIndex; //这里获取的是基类的Gname编号
    std::string GetName = GetName_Old(FnameComparisonIndex); //旧算法获取Name

    return GetName;
}

使用CE查看可以得到该地址为UWorld:



03.png

通过我们的程序跑UWorld,就能快速拿到Level一级GameInstance了:



04.png

遍历自身:

遍历自身的代码和遍历基类是一样的,只不过是从ClassPrivate属性改成了OuterPrivate而已

免费评分

参与人数 5吾爱币 +17 热心值 +3 收起 理由
willJ + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
hucger + 1 + 1 我很赞同!
Tonyha7 + 1 用心讨论,共获提升!
苏沐橙 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

qiufeng2021 发表于 2022-12-31 08:23
什么是结构体?
 楼主| XiaoTouM1ng 发表于 2022-12-31 14:59
linrunqing521 发表于 2023-1-1 00:39
Feling 发表于 2023-1-1 12:56
好用,先收藏了
foxesp 发表于 2023-1-1 22:48
支持作者大大
duyf1999 发表于 2023-1-20 10:19
大佬厉害,支持一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 19:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表