-
-
[原创]2022腾讯游戏安全决赛wp
-
发表于:
2022-4-29 15:59
22702
-
运行效果

原程序运行后显示ACE,并且许秒后绘制消失。原题则要求如下:

程序分为SYS与EXE,EXE中只有一个与驱动通讯,即运行后让驱动执行绘制。

因此着重分析SYS。
详细分析
很明显将初赛的部分代码通过驱动来写。首先是获取DWM的EPROCESS。


然后获取D3DCompile函数地址用作后面修复,获取dxgi.dll后面用作HOOK。

紧接着开始在dxgi.dll中搜索特征码48 8B C4 55 56 57 41 54 41 55 41 56 41 57 48 81 ?? ?? 00,该特征码经过pdb关联可知为PresentMultiplaneOverlay头部。

调用ZwAllocateVirtualMemory对dwm申请可执行内存。

并将shellcode拷贝至新内存中,并解密。

然后会生成inline hook跳转代码,push xxxx ret

MDL映射Hook点内存并对其修改,即跳转到shellcode入口。

然后延迟5秒后,还原hook,并且1.5秒后将shellcode清空。

所有过程与初赛基本一致,包括绘制函数、初始化Shader、虚拟机代码,只不过虚拟机代码略有变动,因此不做详细分析。


实现方法
实现之前,为了防止驱动清空shellcode和还原HOOK(让绘制一直显示),需要对sys进行patch。

将红框代码进行nop填充后,得到如下代码。

然后再将sys签名后加载。
一、修复表
原指令集存在加密,故直接dump解密好的。
[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!