zoukankan      html  css  js  c++  java
  • SSDT表详解

    SSDT(system service dispatch table) 系统服务分派表

    SSPT(system service parameter table) 系统服务参数表

    #pragma pack(1)     //SSDT表的结构

    typedef struct ServiceDescriptorEntry {
         unsigned int *ServiceTableBase;
         unsigned int *ServiceCounterTableBase; //Used only in checked build
         unsigned int NumberOfServices;
         unsigned char *ParamTableBase;
    } ServiceDescriptorTableEntry_t, *PServiceDescriptorTableEntry_t;

    #pragma pack()

    函数调用过程分析:

    (1)用户调用kenel32.dll中的ReadFile,kenel32.dll中都是包装函数,kenel32.dll会用这些包装函数完成参数的有效性检查,将所有东西转换为unicode,接着锁定NTDLL.dll中的NtReadFile函数。

    (2)NTDLL.dll中的都是服务的包装函数,当调用其中的NtReadFile时,这些服务包装函数将所需的Servcie ID送入EAX寄存器,将参数堆栈帧的指针送入EDX寄存器,然后发出INT 2e中断。这条指令会将处理器切换到内核模式。INT 2e对应的处理程序是由windows NT 的 executive(估计是内核)建立的,它将参数从用户模式的堆栈拷贝到内核模式的堆栈。堆栈帧的基址为EDX寄存器的值。而这个中断程序被称为KiSystemService()

    (3)接着进入内核态,NTOSKRNL.exe开始工作,由它进行系统服务的最终调用,它的系统服务的用户接口是以包装函数(wrapper functions)的形式提供的。这些函数都在一个叫做NTDLL.DLL的dll里。NTOSKNL.EXE先初始化,初始化的过程中,先为NTOSKRNL提供的不同服务创建一个函数表即SSDT,表中的每一项都指定了Service ID所需函数的地址,每个函数代码都位于内核之中。类似的,SSPT也开始创建。

    图解如下:

    下面是两个表的结构:

    SSDT HOOK讲解:SSDT HOOK就是通过修改SSDT表的函数地址来实现的,以下是三个相关操作的宏,直接使用

    //取函数在SSDT中的位置,下面的为固定计算方法
    #define SYSTEMSERVICE(_function)  KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)_function+1)]


    //取函数的索引,固定模式
    #define SYSCALL_INDEX(_Function) *(PULONG)((PUCHAR)_Function+1)


    //修改函数的地址
    #define HOOK_SYSCALL(_Function, _Hook, _Orig ) _Orig = (PVOID) InterlockedExchange( (PLONG) &m_Mapped[SYSCALL_INDEX(_Function)], (LONG) _Hook)

    其他操作就是驱动编写了,原理就是通过修改SSDT表,用自己的函数代替原有函数以实现进程保护或其他目的

    参考:《Undocumented Windows NT》,《黑客防线杂志2010.9》,黑客防线驱动教程。

    大家如果要详细了解,就看上面的东东吧,基本都可以在网上搜到

  • 相关阅读:
    找到IOS中的闪退日志
    day10-单元测试用例
    1、MySQL索引优化分析
    大话处理器-第2章-初识处理器
    sunset: dusk
    CK: 00
    My File Server: 1
    [luogu 5049] 旅行(数据加强版)
    [luogu p1081] 开车旅行
    [luogu p1613] 跑路
  • 原文地址:https://www.cnblogs.com/magicdmer/p/4465904.html
Copyright © 2011-2022 走看看