PlaneJun'Blog

我是从未来来的!现在学已经来不及了,放开玩吧!

一、UWorld

  • 字符串SeamlessTravel FlushLevelStreaming源代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
GWorld = LoadedWorld;    //特征
if (!LoadedWorld->bIsWorldInitialized)
{
LoadedWorld->InitWorld();
}
bWorldChanged = true;
// Track session change on seamless travel.
NETWORK_PROFILER(GNetworkProfiler.TrackSessionChange(true, LoadedWorld->URL));
checkSlow((LoadedWorld->GetNetMode() == NM_Client) == bIsClient);
if (bCreateNewGameMode)
{
LoadedWorld->SetGameMode(PendingTravelURL);
}
// if we've already switched to entry before and this is the transition to the new map, re-create the gameinfo
if (bSwitchedToDefaultMap && !bIsClient)
{
if (FAudioDevice* AudioDevice = LoadedWorld->GetAudioDeviceRaw())
{
AudioDevice->SetDefaultBaseSoundMix(LoadedWorld->GetWorldSettings()->DefaultBaseSoundMix);
}
// Copy cheat flags if the game info is present
// @todo UE4 FIXMELH - see if this exists, it should not since it's created in GameMode or it's garbage info
if (LoadedWorld->NetworkManager != nullptr)
{
LoadedWorld->NetworkManager->bHasStandbyCheatTriggered = bHasStandbyCheatTriggered;
}
}
// Make sure "always loaded" sub-levels are fully loaded
{
SCOPE_LOG_TIME_IN_SECONDS(TEXT(" SeamlessTravel FlushLevelStreaming "), nullptr) //特征
LoadedWorld->FlushLevelStreaming(EFlushLevelStreamingType::Visibility);
}

document_image_rId4

document_image_rId5

阅读全文 »

三、初识反射与数据挖掘

一、初识反射

  • 何为反射反射是指在运行状态下,任意一个实体类都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性。这种动态获取信息以及动态调用对象方法的功能称为语言的反射。可以简单看看如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Object
{
public:
virtual string ToString() = 0;
};
class ClassA :public Object
{
public:
virtual string ToString(){ return "MyClass"; }
};
class ClassB :public Object
{
public:
virtual string ToString(){ return "MyClass"; }
};
Object* FactoryCreat(const string& className)
{
if (className == "ClassA")
return new ClassA;
else if (className == "ClassB")
return new ClassB;
...
}
int main()
{
Object* obj = FactoryCreat("ClassA");
cout << obj->ToString();
delete obj;
return 0;
}
  • 原生的C++是并不支持反射的的,因此UE引擎构建了一个自己的反射系统。那么为什么要做那么一个反射?最直接的例子就是UE蓝图。蓝图是一类特殊的asset,可以使用直观、基于节点的方式创建逻辑,或者设置一些变量数据。策划可以创建自定义的Actor、Event、函数等等,快速的做Gameplay迭代,不需要写任何代码。蓝图也可以选择继承C++类,获取C++中定义的变量,调用C++中定义的函数,或者实现C++中定义的event
阅读全文 »

在dump一些驱动样本的时候会遇到这样的情况。

QQ图片20230526152243

这种是要修复导入表的,大多数解决办法就是给dump文件修复导入表,但是这种方式有点弊端。比如说面对的是一段shellcode代码的话就比较繁琐,所以并不适用。最佳解决办法就是把ntoskrnl.exe模块原封不动加载到ida。


首先,我们把驱动dump下来后,因为缺少ntoskenl.exe的内存,所以函数调用会变红。所以我们首先是要加载这个内存。

阅读全文 »

CM分析-腾讯面试

一、反调试

1、分析

程序启动时会对Zw函数进行拷贝到自身内存中,并将内存加密。实现过掉常规API检测。

document_image_rId4

阅读全文 »
0%