关于SSDT HOOK 取得索引号(function2hook + 1 )

当我们HOOK SSDT 时,要做的很重要的事情就是要获得NtXXX函数在SSDT中的索引号,以方便替换和调用。

取得索引号会使用宏:

#define HOOK_INDEX(function2hook) *(PULONG)((PUCHAR)function2hook + 1)

但为什么要function2hook +1 呢 ?
一定要注意本质问题,这里的function2hook不是我们想要HOOK的NtXXX,而是对应的ZwXXX。

我们反汇编下ZwXXX,以ZwWriteFile为例:

0: kd> u nt!ZwWriteFile
nt!ZwWriteFile:
805022a4 b812010000      mov     eax,112h
805022a9 8d542404          lea       edx,[esp+4]
805022ad 9c                      pushfd
805022ae 6a08                  push    8
805022b0 e8ac010400      call       nt!KiSystemService (80542461)
805022b5 c22400              ret       24h

 

其中805022a4为ZwWriteFile的入口地址,我们再查看下这个入口地址之后的内存值:

0: kd> dd 805022a4
805022a4    000112b8 24548d00 086a9c04 0401ace8
805022b4    0024c200 000113b8 24548d00 086a9c04
805022c4    040198e8 0024c200 000114b8 24548d00
805022d4    086a9c04 040184e8 0018c200 000115b8

 

0: kd> dd 805022a4+1
805022a5  00000112 0424548d e8086a9c 000401ac
805022b5  b80024c2 00000113 0424548d e8086a9c
805022c5  00040198 b80024c2 00000114 0424548d
805022d5  e8086a9c 00040184 b80018c2 00000115

 

注意:mov eax,112h ,即ZwWriteFile函数入口处向后偏移1的地址保存了NtWriteFile的索引值,即112h 。所以我们使用ZwWriteFile 函数名,即函数入口指针 + 1,即为保存索引号的地址。之后用*取值就得到了索引号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值