首页
社区
课程
招聘
[原创]Win11下利用PsSyscallProviderDispatch进行进程级SSDT HOOK
发表于: 2025-8-14 20:51 5970

[原创]Win11下利用PsSyscallProviderDispatch进行进程级SSDT HOOK

2025-8-14 20:51
5970

系统服务分发表(SSDT)Hooking一直是一种强大而经典的技术,它允许开发者拦截和修改系统调用的行为。x64系统上内核补丁保护的引入,直接修改SSDT表变得异常危险,几乎必然会导致系统蓝屏(BSoD)。从Windows 10开始,微软引入了一套名为“替代系统调用(Alternative Syscalls)”或“系统调用提供者(Syscall Providers)”的机制,最初是为Windows Subsystem for Linux (WSL) 设计的。这套机制允许在进程级别指定一个自定义的系统调用处理程序。本文将深入分析其核心调度函数PsSyscallProviderDispatch的IDA伪代码,并详细讲解如何利用这个未公开的机制,在Windows 11上用C语言实现一个SSDT Hook。

核心机制: PsSyscallProviderDispatch 解析
当一个线程的特定标志位被设置后,其系统调用请求将不再直接由传统的SSDT处理,而是被重定向到PsSyscallProviderDispatch函数。
图片描述
关键检查:Pico Process: CurrentThread->Header.Reserved1 & 4是一个关键检查。这个标志位(在_KTHREAD的MiscFlags中,值为0x4)用于标识一个线程是否是“Pico Process”的一部分,例如Linux子系统(WSL)中的进程。如果是,它会走一个专门为WSL设计的特殊路径。对于我们想要Hook的普通Win32进程,这个位是0,所以我们会跳过这个if语句。
图片描述
获取进程与SSN: IoThreadToProcess获取当前进程的_EPROCESS结构。*(_DWORD *)(rsp_frame + 0x30)从陷阱帧中取出RAX寄存器的值,即系统调用号(SSN)。
核心开关:Slot: ProviderIndexSlot = pCurrentProcess->SyscallProviderDispatchContext.Slot; 这是整个机制的核心开关。_EPROCESS结构中有一个未文档化的成员SyscallProviderDispatchContext,它包含一个Slot字段。这个Slot就是一个索引,它告诉内核应该去哪个“提供者”那里查找处理程序。我们实现进程级Hook的关键,就是修改目标进程_EPROCESS结构中这个Slot的值,使其指向我们自己。
全局注册表: PspServiceDescriptorGroupTable是一个全局的、未导出的数组,它像一个注册表,最多可以存放0x20(32个)系统调用提供者。
定位提供者: (char *)&PspServiceDescriptorGroupTable + 0x18 * ProviderIndexSlot这行代码通过Slot索引在全局表中定位到我们注册的PspServiceDescriptorRow结构。0x18(24字节)正好是PspServiceDescriptorRow结构的大小(在x64下,3个指针 * 8字节/指针)。
图片描述
图片描述
解码回调函数地址: pfnServiceRoutine = *pProviderDescriptor + ((ServiceEntryValue >> 4) & ...) 这行代码从我们的描述符ServiceEntryValue中解码出回调函数的绝对地址。
ServiceEntryValue >> 4: 右移4位。这说明描述符的低4位被用作标志位。因此,我们在构建描述符时,必须将回调函数的RVA(相对于驱动基址的偏移)左移4位。
*pProviderDescriptor: 这是我们驱动的基地址。RVA加上基地址就得到了回调函数的绝对地址。
选择分发路径: if ( (ServiceEntryValue & 0x10) != 0 ) 这行代码检查描述符的第4位(值为0x10)。


[培训]传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2025-8-28 16:10 被S极客编辑 ,原因:
收藏
免费 153
支持
分享
最新回复 (126)
雪    币: 5180
活跃值: (5888)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
2
mark
2025-8-14 21:02
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
666
2025-8-14 22:36
0
雪    币: 78
活跃值: (1374)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
6666666
2025-8-14 23:19
0
雪    币: 208
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
3333333333
2025-8-15 02:36
0
雪    币: 88
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
非常支持你的观点!
2025-8-15 06:56
0
雪    币: 0
活跃值: (3215)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
666
2025-8-15 08:12
0
雪    币: 204
活跃值: (405)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
66666666
2025-8-15 08:16
0
雪    币: 0
活跃值: (195)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
66666
2025-8-15 08:49
0
雪    币: 26
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
666
2025-8-15 09:15
0
雪    币: 1145
活跃值: (5357)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
11
6
2025-8-15 09:43
0
雪    币: 1001
活跃值: (85)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
1
2025-8-15 10:12
0
雪    币: 756
活跃值: (1171)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
据说也是提供给Windows Defender使用的Hook?
2025-8-15 10:36
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
1
2025-8-15 16:20
0
雪    币: 127
活跃值: (1225)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
看看学习下
2025-8-16 07:14
0
雪    币: 127
活跃值: (1225)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
win10 不能吗?
2025-8-16 07:16
0
雪    币: 2486
活跃值: (5976)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
17
mark
2025-8-18 09:40
0
雪    币: 186
活跃值: (3336)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
18
11
2025-8-18 09:47
0
雪    币: 24
活跃值: (380)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
mark
2025-8-18 10:03
0
雪    币: 183
活跃值: (8776)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
20
学习一下
2025-8-18 10:14
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
学习一下
2025-8-18 10:20
0
雪    币: 54
活跃值: (1653)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
学习一下
2025-8-18 10:20
0
雪    币: 1363
活跃值: (4183)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
牛的。
2025-8-18 10:26
0
雪    币: 2015
活跃值: (734)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
学习一下
2025-8-18 10:27
0
雪    币: 0
活跃值: (126)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
111
2025-8-18 10:33
0
游客
登录 | 注册 方可回帖
返回