首页
社区
课程
招聘
无需在DWM中进行HOOK的绘制方式
2021-12-9 08:11 35944

无需在DWM中进行HOOK的绘制方式

2021-12-9 08:11
35944

本文会介绍一种无需在DWM中挂钩也可以实现DWM桌面绘制的方式 经过测试和验证 该方案可行

这个东西其实弄出来有一段时间了 最近很忙也一直没啥时间

之前问了下神话 大概了解了一下DWM绘制以及原理 顺便抄了一波代码

实际上目前大部分DWM绘制基本都依赖于寻找SwapChain并且HOOK某函数进行绘制

在一次偶然的调试中我发现 即便是在原绘制函数执行完毕之后再调用绘制也依然可以进行输出

于是就有了这份思路

不废话直接进入主题

DWM绘制路径如下 再往下的就没必要继续看了

其中VM3DUMP64为VMWARE的虚拟显卡3环驱动

在往上就是SSSDT函数了 NTGDIxxx

我觉得我说到这里已经有人明白要干什么了

首先直接讲DLL注入到DWM进程中 获取SwapChain并进行一些初始化操作 初始化完成之后可以释放钩子 对于是否可以不挂钩完成初始化我不太了解 不太懂3环的绘制原理

只要拿到了SwapChain 接下来问题就好说了

众所周知SSSDT并不受PG保护(实际上是里面的动态函数指针可以随意替换) 这也就给了一些可乘之机

只需要替换里面的动态指针即可完成函数HOOK(提示1:下面一层是dxgkrnl 这一层有相当多东西可以深挖)

(提示2:指针替换这种HOOK方式相比起一般HOOK来说难以发现许多 甚至可以用多层跳转来尽可能的伪装)


OK 在成功拦截来自DWM的绘制请求以后 就可以开始正式的绘制了

其实思路很简单

栈回潮 然后修改函数返回地址即可

也就是stack hook

FunctionEntry = RtlLookupFunctionEntry(ContextRecord.Rip,    
&ImageBase,    
NULL);    
if ((FunctionEntry != NULL))    
{    
RtlVirtualUnwind(0,    
(ULONG64)ImageBase2.ModuleBase,    
ContextRecord.Rip,    
FunctionEntry,    
&ContextRecord,    
&HandlerData,    
&EstablisherFrame,    
NULL);    
ULONG64 *p = (ULONG64*)((ULONG64)ContextRecord.Rsp - 8);    
ULONG64 test12345 = *p;    
if (test12345 == 0x00000)    
{    
*p = 0x123456789;    
break;    
}    
DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "%llx\n", test12345);    
//std::cout << std::hex<< test12345 << std::endl;    
}

先前已经成功将DLL注入进程中并且完成了初始化 那么现在要做的就是回潮 修改地址 然后放过3环请求

绘制正常进行 当运行到3环目标函数返回时 这个时候函数被截获 DLL的绘制函数也就拿到了执行权

正常绘制之后 循环再次运行 重新前往内核 这一层在提交的dma中 就已经带上了先前DLL的绘制内容

至此 整个绘制已经成功

由于stack hook的特性 在DWM中无法扫到任何HOOK 即便是文件内存对比也是无效的

至于DLL本身 隐藏内存简直不要太简单

虽然DWM进程中没有了HOOK 但R0依然有一个动态指针替换 不过既然主战场已经移到了内核 某种意义上来说就轻松太多了 

至少对我来说 我宁愿把大家都拉倒内核去互掐 也不愿意在R3大乱斗


OK 最后的最后 放上几张图

我就愿意读栈回潮



伪代码地址:https://github.com/DragonQuestHero/DwmDraw

文学社github组织:https://github.com/ClassicalMusicClub

古典文学社Q群:780705352(较严格审核制入群)


我写代码经常闹的一堆人跟着我后面一起帮忙想 要感谢的人太多 就不一一列出来了...


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2021-12-9 08:23 被章鱼C编辑 ,原因:
收藏
点赞12
打赏
分享
最新回复 (33)
雪    币: 149
活跃值: (2003)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
saloyun 2021-12-9 08:50
2
0
mark,说的不是很清楚,看起来是要做透视?
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
DreamSoule 2021-12-11 03:31
4
0
全篇就记住了栈要回什么
雪    币: 5851
活跃值: (4417)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
淡然他徒弟 1 2021-12-11 04:43
5
0

栈回溯 回溯到非正常模块 寄!(BE 跟 EAC 如是说)

其它带堆栈回溯的AC就不点名了!

最后于 2021-12-11 04:45 被淡然他徒弟编辑 ,原因:
雪    币: 3262
活跃值: (2669)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
xhyeax 2021-12-11 19:35
6
0
 一开始还没发现不是栈回溯
雪    币: 223
活跃值: (2539)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
章鱼C 2021-12-11 22:54
7
0
xhyeax 一开始还没发现不是栈回溯[em_78]
跟我一起读 栈-回-潮
雪    币: 3
活跃值: (466)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
拉闸太子 2021-12-12 00:35
8
0
我吊哥 牛逼
雪    币: 3262
活跃值: (2669)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
xhyeax 2021-12-14 10:29
9
0
章鱼C 跟我一起读 栈-回-潮
跟我一起读,stack unwind
雪    币: 23
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
大魔法狮子 2022-1-19 17:26
10
0
阿巴阿巴,群搜不到了
雪    币: 43
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
紫梦寒 2022-1-20 01:45
11
0
我记得很久前就搜不到了
雪    币: 223
活跃值: (2539)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
章鱼C 2022-1-25 21:48
12
0
大魔法狮子 阿巴阿巴,群搜不到了
现在应该可以了
雪    币: 223
活跃值: (2539)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
章鱼C 2022-1-25 21:48
13
0
紫梦寒 我记得很久前就搜不到了
现在应该可以了
雪    币: 6115
活跃值: (4036)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
黑洛 1 2022-2-24 22:05
14
0
dwm已被重点盯防,不如来快乐的gdi
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_vzkyyrjy 2022-3-18 21:00
15
0
B站的古典文学社是你吗
雪    币: 1290
活跃值: (2332)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
灵幻空间 2022-3-19 22:16
16
0
gdi绘制美滋滋
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_eycfzkxx 2022-3-22 17:09
17
0
群搜索不到了
雪    币: 6296
活跃值: (4947)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
devseed 4 2022-4-8 23:59
18
0
请问,群搜不到了? 
雪    币: 83
活跃值: (1037)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
killpy 2 2022-4-9 13:36
19
0
初始化啥啊
雪    币: 2612
活跃值: (4652)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
smallzhong_ 2022-4-25 10:21
20
0
群搜不到了(
雪    币: 223
活跃值: (2539)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
章鱼C 2022-4-25 15:19
21
0
smallzhong_ 群搜不到了(
私信你了
雪    币: 223
活跃值: (2539)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
章鱼C 2022-4-25 15:19
22
0
devseed 请问,群搜不到了?
私信你了
雪    币: 2433
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ss_ss 2022-4-30 06:14
23
0
。。。想进群学栈回潮dog狗头
雪    币: 2433
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ss_ss 2022-4-30 06:15
24
0
ss_ss 。。。想进群学栈回潮[em_90]dog狗头
回潮是不是两广口音?
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_理想主义的傻子 2022-9-14 20:45
25
0
膜拜
游客
登录 | 注册 方可回帖
返回