• 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

  • 相关阅读:
    输出函数
    curl
    页眉的章名和章名不统一
    水平柱状图
    目录和正文的页码生成
    protobuf的使用
    yarn vue安装
    nvm node的安装
    win安装postman
    机器码
  • 原文地址:https://www.cnblogs.com/vcerror/p/4289118.html
Copyright © 2020-2023  润新知