对于SSDT HOOK的疑惑和探索

先感谢“梦想的天空”提供这么优秀的学习资料

废话不多说,直接上疑问,仔细阅读原文第二篇

原文中间部分有这么一段话

从下面的代码中,我们看到在安装 Hook 和解除 Hook 时参数传递进去的是 ZwQuerySystemInformation,

这样很有可能会让很多朋友认为我们在 Ring0 下的 Hook 的是 ZwQuerySystemInformation,

如果你这样认为的话,那就大错特错了,确实在 Google 上搜索出的一大堆关于 SSDT Hook 中,

很多文章都说是 Hook 的 ZwQuerySystemInformation,而事实上这是大错特错的,

我们这里传入 ZwQuerySystemInformation ,是因为我们需要调用 SYS_INDEX(ZwQuerySystemInformation)

来获得 NtQuerySystemInformation 在 SSDT 中的地址所在的索引号,

然后我们根据这个索引号来 Hook NtQuerySystemInformation,

认识到这一点是非常重要的,因为我一开始也认为是 Hook 的 ZwQuerySystemInformation,

从而导致蓝屏了 n 次,在这里非常鄙视那些把文章从别处拷贝过来也不加验证就乱发表的 ~ 害死人 ~ 当然也要怪自己懒 ~

image

       

image

从上面两端代码来看,installsysservicehook()以及uninstallsysservicehook()这两个函数的参数确实是传的ZwQuerySystemInformation,作者原文(我们这里传入 ZwQuerySystemInformation ,是因为我们需要调用 SYS_INDEX(ZwQuerySystemInformation)),不理解!跟进查看到底是怎么获取Nt系列函数在SSDT内的索引号



代码 77 是一个宏,继续跟进




代码 52 行的注释我感觉应该是 根据 zw 函数获取 nt 函数在SSDT中所对应的服务索引号,疑问来了,

从DriverEntry开始一路跟进查看,我们知道,ServiceFunction其实就是ZwQuerySystemInformation函数的地址

*(地址)怎么就能取出 nt 系列函数的索引号呢?

解决问题的方法就是实践,我们先来查看ZwQuerySystemInformation函数的地址



查看内存 804feff8,看见下面的 ad 是不是感觉很亲切~~~

*(PULONG)((unsigned char *)804feff8 + 1) 就是 00 00 00 ad !



同理,验证一下 ZwTerminateProcess



*(PULONG)((unsigned char *)804feff8 + 1) 就是 00 00 01 01 是不是也感觉很亲切啊~~~







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值