SSDT HOOK 的原理其实非常简单,我们先实际看看KeServiceDescriptorTable是什么样的。    

    lkd> dd KeServiceDescriptorTable

    8055ab80  804e3d20 00000000 0000011c 804d9f48

    8055ab90  00000000 00000000 00000000 00000000

    8055aba0  00000000 00000000 00000000 00000000

    8055abb0  00000000 00000000 00000000 00000000   

    在windbg.exe中我们就看得比较清楚,KeServiceDescriptorTable中就只有第一项有数据,其他都是0。其中804e3d20就是

KeServiceDescriptorTable.ntoskrnel.ServiceTableBase,服务函数个数为0x11c个。我们再看看804e3d20地址里是什么东西:

    lkd> dd 804e3d20

    804e3d20  80587691 805716ef 8057ab71 80581b5c

    804e3d30  80599ff7 80637b80 80639d05 80639d4e

    804e3d40  8057741c 8064855b 80637347 80599539

    804e3d50  8062f4ec 8057a98c 8059155e 8062661f

    如上,80587691 805716ef 8057ab71 80581b5c 这些就是系统服务函数的地址了。比如当我们在ring3调用OpenProcess时,进入sysenter的ID是0x7A(XP SP2),然后系统查KeServiceDescriptorTable,大概是这样KeServiceDescriptorTable.ntoskrnel.ServiceTableBase(804e3d20) + 0x7A * 4 = 804E3F08,然后804E3F08 ->8057559e 这个就是OpenProcess系统服务函数所在,我们再跟踪看看:

    lkd> u 8057559e

    nt!NtOpenProcess:

    8057559e 68c4000000      push    0C4h

    805755a3 6860b54e80      push    offset nt!ObReferenceObjectByPointer+0x127 (804eb560)

    805755a8 e8e5e4f6ff      call    nt!InterlockedPushEntrySList+0x79 (804e3a92)

    805755ad 33f6            xor     esi,esi

    原来8057559e就是NtOpenProcess函数所在的起始地址。  



     lkd> u nt!NtOpenProcess

最新文章

  1. Deconvolution Using Theano
  2. BZOJ 3639: Query on a tree VII
  3. gcc编译时头文件和库文件搜索路径
  4. 【转】设计模式 ( 十五 ) 中介者模式Mediator(对象行为型)
  5. pip报ssl错误解决
  6. 2016年11月19日 星期六 --出埃及记 Exodus 20:10
  7. C#调用Geocoding API进行地理编码与逆编码
  8. WPF与输入法冲突研究之二:汉字输入法会导致WPF程序的崩溃!
  9. iOS开发系列--打造自己的“美图秀秀”
  10. java major version(转)
  11. c#中如何跨线程调用windows窗体控件?
  12. easyui获取当前点击对象tabs的title
  13. Oracle 11g的安装
  14. LINUX 笔记-文本过滤
  15. 基于Fragment的插件化
  16. Spark FPGrowth (Frequent Pattern Mining)
  17. Python基础进程和线程
  18. python pyqt面板切换
  19. ELK + kafka 日志方案
  20. objective C, parse json时注意事项

热门文章

  1. 解决 Onenote 默认全角输入的一种解决办法(输入法已经设置为默认半角)
  2. C/C++ 无法解析的外部符号解决方案
  3. Delphi 数学函数:常用的几个数学函数(Power、Abs、Int、Trunc、Round、Frac、sqr、sqrt)
  4. hive中的lateral view 与 explode函数的使用
  5. NX二次开发-输入X向量Y向量输出一个3*3矩阵UF_MTX3_initialize
  6. Java-Class-C:org.springframework.web.client.RestTemplate
  7. HSE_VALUE 修改问题
  8. msSql Server 修复数据库
  9. Python匹马天下行之python基本语法
  10. <Django>一些小知识