zoukankan      html  css  js  c++  java
  • Windbg 查看SSDT表

      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

  • 相关阅读:
    在TreeView控件节点中显示图片
    PAT 甲级 1146 Topological Order (25 分)
    PAT 甲级 1146 Topological Order (25 分)
    PAT 甲级 1145 Hashing
    PAT 甲级 1145 Hashing
    PAT 甲级 1144 The Missing Number (20 分)
    PAT 甲级 1144 The Missing Number (20 分)
    PAT 甲级 1151 LCA in a Binary Tree (30 分)
    PAT 甲级 1151 LCA in a Binary Tree (30 分)
    PAT 甲级 1149 Dangerous Goods Packaging
  • 原文地址:https://www.cnblogs.com/vcerror/p/4289118.html
Copyright © 2011-2022 走看看