zoukankan      html  css  js  c++  java
  • xp下ShadowSSDT的hook的浅析

         之前我已经讲了SSDT的hook,所以关于hook的原理,我们就不在多说,不懂Hook原理的请先看这一篇,www.cnblogs.com/qq32175822/p/3517887.html

         下面我讲讲ShadowSSDThook,什么是ShadowSSDT,从英文名字来看,叫影子SSDT表.我们之前已经说了,SSDT表里存放着一些NT函数地址,这些NT函数是真正的内核执行体,我们从r3调用api,一直转到r0,然后通过SSDT表找到真实的NT函数地址执行.而ShadowSSDT呢?也是一张表,这张表里也存放是一些NT函数,这些函数也是真正的内核执行体,而里面是哪些NT函数呢?就是关于一些界面的NT函数!关于微软为什么要弄2张内核表,我不太清楚,根据记不清是哪本书上说过的一句话,微软为了使得Windows系统的窗口创建,响应的更加快一些,界面更加绚丽一些,在某个版本的时候(肯定是在XP之前)把关于界面的函数全部转移到内核去了,而上层R3全部是一些包装函数,或许就是这个时候,微软为了让界面函数执行的快一些,安全些,所以把NT的界面函数存放位置专门弄了一张表.(这个是个人理解而已)

         关于内核的,线程,进程,内存读写的一些函数地址,存放在SSDT表中.静态文件是ntoskrnl.exe

         关于一些界面的一些函数,存放在ShadowSSDT表中,静态文件是win32.sys

         怎么找到ShadowSSDT表呢?在XP下,注意,是在XP下,KeServiceDescriptorTable这个结构-30H处就是另一个结构,这个结构跟KeServiceDescriptorTable结构类似,第一项就是ShadowSSDT表的指针,(而便移+8H)也就是第三项也是这个ShadowSSDT表的服务函数个数.我们来Windbg来查看下

        

         大家看,bf999b80就是表的指针地址,而服务个数,比SSDT表多些,有29B个函数,我们来dd bf999b80看看.

    发现啥都没有,嘿嘿,很奇怪是吧,我们查看所有进程!process 0 0

    然后随便切换一个进程.!process 8244e020

    切换后,我们再dd bf999b80下看看.

    有了,所以这个是ShadowSSDT表一个特殊的地方,只存在于有GUI的程序中,查看的时候要切换到GUI程序的上下文中才能查看到ShadowSSDT表内容,所以这里有个经验点.我在开始写ShadowSSDThook的时候,在驱动初始时候读ShadowSSDT表然后替换,在驱动卸载的时候恢复ShadowSSDT表,结果华丽丽的蓝屏了,后来调试的时候发现这个问题,弄清楚原因后,我改变了方法,写GUI程序的r3程序,不在加载和卸载的时候替换或者恢复ShadowSSD表,而是在驱动载入后,用DeviceloControl给这个设备对象发送自定义的IO控制码进行替换,卸载前用DeviceloControl给这个设备对象发送自定义的IO控制码来恢复.这样就没有蓝屏了,因为发送控制码给驱动相当于切换到了我写的R3程序的上下文中,而如果驱动加载和卸载的时候上下文不在我的R3GUI程序中.这个是经验,各位同学一定要记得.

       现在2个难点都讲完了,一个是ShadowSSDT表的找到表头,因为这个表是未导出的,这里我给了一个方法,就是用KeServiceDescriptorTable结构来算便移.KeServiceDescriptorTable结构-30H处就是ShadowSSDT表的指针

                                     另一个就是我们一定不能在驱动启动和卸载的时候读写ShadowSSDT表的内容,否则绝对蓝,肯定蓝,而是要写GUI程序发送控制码来读写ShadowSSDT表的内容.

       下面给出关键部分代码

     

  • 相关阅读:
    记录一次nginx的upstream的配置信息
    nginx-1.12.1编译参数详情
    nginx安装ngx_lua_waf防护
    MYSQL增加tmp_table_size 的操作
    windows安装zabbix监控
    mysql 授权
    python基础知识-集合,列表,元组间的相互装换
    python基础知识笔记-集合
    Python基础笔记-元祖
    python基础知识-列表的排序问题
  • 原文地址:https://www.cnblogs.com/qq32175822/p/3524298.html
Copyright © 2011-2022 走看看