首页
社区
课程
招聘
HOOK SSDT中常用SYSTEMSERVICE宏的原理
发表于: 2010-6-5 12:28 4114

HOOK SSDT中常用SYSTEMSERVICE宏的原理

2010-6-5 12:28
4114
define SYSTEMSERVICE(_func) \
  KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)_func+1)]

按照一般的解释:“SYSTEMSERVICE宏的参数(姑且称为参数吧)是ntoskrnl.exe导出的函数地址,是一个Zw* 型的函数,返回一个在SSDT表中Nt*型的函数地址。”

而以ZwCreateFile为例:
8042fa70 b820000000       mov     eax,0x20
8042fa75 8d542404         lea     edx,[esp+0x4]
8042fa79 cd2e             int     2e
8042fa7b c22c00           ret     0x2c

则((PUCHAR)_func+1)得到的是函数在SSDT表中的索引(这里是0x20),那么*(PULONG)(0x20)是什么东西?

PS:ServiceTableBase表里面的每一项都是某个NT*函数的地址吗?

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

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 28
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
*(PULONG)((PUCHAR)_func+1)=0x20
2010-6-5 12:57
0
雪    币: 183
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
那((PUCHAR)_func+1)是什么?能帮忙解释一下吗?
2010-6-5 13:26
0
雪    币: 28
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
指向b8后一个字节的指针
2010-6-5 13:30
0
雪    币: 183
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
i see, 3q
2010-6-5 13:40
0
雪    币: 199
活跃值: (97)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
(PUCHAR)_func+1  = 8042fa70+1 = 8042fa71
*(PULONG)((PUCHAR)_func+1) 才是 0x00000020
2010-9-11 19:16
0
游客
登录 | 注册 方可回帖
返回
//