• 系统调用(四):SSDT


    查看SSDT和SSDTShadow

    kd> dd KeServiceDescriptorTable
    80553fa0  80502b8c 00000000 0000011c 80503000  Ntoskrl.exe
    80553fb0  00000000 00000000 00000000 00000000
    80553fc0  00000000 00000000 00000000 00000000
    80553fd0  00000000 00000000 00000000 00000000
    
    kd> dd KeServiceDescriptorTableShadow
    80553f60  80502b8c 00000000 0000011c 80503000  Ntoskrl.exe
    80553f70  bf999b80 00000000 0000029b bf99a890  Win32k.sys
    80553f80  00000000 00000000 00000000 00000000
    80553f90  00000000 00000000 00000000 00000000

    第一个DWORD指向函数地址表

    kd> dds 80502b8c
    ReadVirtual: 80502b8c not properly sign extended
    80502b8c  8059a948 nt!NtAcceptConnectPort
    80502b90  805e7db6 nt!NtAccessCheck
    80502b94  805eb5fc nt!NtAccessCheckAndAuditAlarm
    80502b98  805e7de8 nt!NtAccessCheckByType
    80502b9c  805eb636 nt!NtAccessCheckByTypeAndAuditAlarm
    80502ba0  805e7e1e nt!NtAccessCheckByTypeResultList

    第三个DWORD为函数数量

    第四个DWORD指向函数参数表

    kd> db 80503000
    ReadVirtual: 80503000 not properly sign extended
    80503000  18 20 2c 2c 40 2c 40 44-0c 08 18 18 08 04 04 0c  . ,,@,@D........
    80503010  10 18 08 08 0c 04 08 08-04 04 0c 08 0c 04 04 20  ............... 
    80503020  08 10 0c 14 0c 2c 10 0c-0c 1c 20 10 38 10 14 20  .....,.... .8.. 
    80503030  24 24 1c 14 10 20 10 34-14 08 0c 08 04 04 04 04  $$... .4........
    80503040  0c 08 28 04 1c 18 08 18-0c 18 08 18 0c 08 0c 04  ..(.............
    80503050  10 00 0c 10 28 08 08 10-1c 04 08 0c 04 10 08 00  ....(...........
    80503060  08 04 08 0c 28 08 04 10-04 04 0c 0c 28 04 24 28  ....(.......(.$(
    80503070  30 0c 0c 0c 18 0c 0c 0c-0c 30 10 0c 10 0c 0c 0c  0........0......

    实验:在函数表尾部加一函数调用

    测试代码

    #include "stdafx.h"
    #include <windows.h>
    
    void __declspec(naked) MyIntWriteProcessMemory(HANDLE  hProcess,
      LPVOID  lpBaseAddress,
      LPCVOID lpBuffer,
      SIZE_T  nSize,
      SIZE_T  *lpNumberOfBytesWritten){
        __asm{
            mov eax,0x11c
            lea edx,[esp+4]
            int 0x2e
            ret
        }
    }
    int main(int argc, char* argv[])
    {
    
        DWORD X=0xabcd;
        DWORD addr=0;
        DWORD dwProcessId = 0;
        DWORD check=0;
        printf("input Pid:");
        scanf("%x",&dwProcessId);
        printf("input addr:");
        scanf("%x",&addr);
        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessId);
        MyIntWriteProcessMemory(hProcess,(char*)addr,(char*)&X,(SIZE_T)4,(SIZE_T*)NULL);
        return 0;
    }
    #include "stdafx.h"
    #include <windows.h>
    
    int main(int argc, char* argv[])
    {
        DWORD X=0x1234;
        DWORD PID=GetCurrentProcessId();
        printf("PID = %x
    ",PID);
        printf("X = %x
    ",X);
        printf("Xaddr = %x
    ",&X);
    
        getchar();
        printf("X = %x
    ",X);
        getchar();
        return 0;
    }
    kd> ed 80502ffc 805aa81c
    WriteVirtual: 80502ffc not properly sign extended
    kd> dds 80502b8c+115*4
    ReadVirtual: 80502fe0 not properly sign extended
    80502fe0  805aa81c nt!NtWriteVirtualMemory
    80502fe4  8050322c nt!NtYieldExecution
    80502fe8  8060f632 nt!NtCreateKeyedEvent
    80502fec  8060f71c nt!NtOpenKeyedEvent
    80502ff0  8060f7ce nt!NtReleaseKeyedEvent
    80502ff4  8060fa5a nt!NtWaitForKeyedEvent
    80502ff8  805c2798 nt!NtQueryPortInformationProcess
    80502ffc  805aa81c nt!NtWriteVirtualMemory
    kd> eb 8050311c 14
    kd> ed 80553fa8 11d

  • 相关阅读:
    刘翔那点事
    网站建站模板
    搞笑!from 饮水思源
    我de虚拟经济学系列第一章 经济危机拼命建桥
    IT民工系列——c#操作Microsoft IE,实现自动登录吧!
    商业智能的发展及其应用
    我de虚拟经济学系列第三章 常见的致富之路
    IT民工系列——c#操作EditGrid,自己做一个在线Excel数据库吧!
    Asp.net下的Singleton模式
    asp.net 控件功能小结
  • 原文地址:https://www.cnblogs.com/harmonica11/p/14199513.html
Copyright © 2020-2023  润新知