博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过SSDT HOOK实现进程保护和进程隐藏
阅读量:5361 次
发布时间:2019-06-15

本文共 3999 字,大约阅读时间需要 13 分钟。

---恢复内容开始---

      首先,我要说一件很重要的事,本人文采不好,如果哪里说的尴尬了,那你就尴尬着听吧。。。。。。

  SSDT HOOK最初貌似源于Rookit,但是Rookit之前有没有其他病毒使用,这就不清楚了,总之这个功能很不错,那么什么是SSDT呢,SSDT全称是(System Services Descriptor Table),它将ring3的Win32 API和ring0的内核函数联系起来,SSDT 并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基地址、服务函数个数等。

通过修改此表的函数地址可以对常用 Windows 函数及 API 进行 Hook,从而实现对一些关心的系统动作进行过滤、监控的目的。一些 HIPS、防毒软件、系统监控、注册表监控软件往往会采用此接口来实现自己的监控模块。

   SSDT基址存储在KSYSTEM_SERVICE_TABLE->ServiceTableBase中,下面是这个结构的定义

kd> dt _KSYSTEM_SERVICE_TABLEssdtHook!_KSYSTEM_SERVICE_TABLE   +0x000 ServiceTableBase :            Ptr32 Uint4B //SSDT (System Service Dispatch Table)的基地址
  +0x004 ServiceCounterTableBase :   Ptr32 Uint4B //用于 checked builds, 包含 SSDT 中每个服务被调用的次数  +0x008 NumberOfService : Uint4B   +0x00c ParamTableBase : Uint4B

  其实ServiceTableBase也是一个数据结构,我们这里从WRK中看看它的定义

typedef struct _KSERVICE_TABLE_DESCRIPTOR {    PULONG_PTR Base;      PULONG Count;    ULONG  Limit;    PUCHAR Number;} KSERVICE_TABLE_DESCRIPTOR, *PKSERVICE_TABLE_DESCRIPTOR;

  这里的Base成员就是存储各函数地址的基址,再补充一点,内核中有两个系统服务描述符表,一个是KeServiceDescriptorTable(由ntoskrnl.exe导出),一个是KeServieDescriptorTableShadow(没有导出)。我们HOOK的是KeServiceDescriptorTable中的函数地址,KeServiceDescriptorTable是一个内核变量,可通过extern来使用它,而且它存储的就是_KSYSTEM_SERVICE_TABLE的首地址 

kd> dd KeServiceDescriptorTable8055d700  80505450 00000000 0000011c 805058c48055d710  00000000 00000000 00000000 000000008055d720  00000000 00000000 00000000 00000000
kd> dt _KSYSTEM_SERVICE_TABLE 80505450 ssdtHook!_KSYSTEM_SERVICE_TABLE   +0x000 ServiceTableBase : 0x805a5614  -> 0x9c68   +0x004 ServiceCounterTableBase : 0x805f1adc  -> 0x8b55ff8b   +0x008 NumberOfService  : 0x805f5312   +0x00c ParamTableBase   : 0x805f1b0e

  

 

 

 

  这里我保护进程是HOOK的函数NtOpenProcess,隐藏进程是通过NtQuerySystemInformation实现的,为什么HOOK NtOpenProcess呢,因为任务管理器结束任务的时候,会通过OpenProcess获得被结束的进程句柄,然后再结束。 HOOK NtQuerySystemInformation的原因是因为可以通过它的参数,得到进程链(不同于EPROCESS),然后摘除掉,这样任务管理器就不会显示了,NtOpenProcess的索引号可以通过OD得知    我要做的步骤如下:

  第一: 首先用驱动创建个Device,然后绑定个符号链接,供其与R3程序进行通信

  第二: HOOK NtOpenProcess和

---恢复内容结束---

      首先,我要说一件很重要的事,本人文采不好,如果哪里说的尴尬了,那你就尴尬着听吧。。。。。。

  SSDT HOOK最初貌似源于Rookit,但是Rookit之前有没有其他病毒使用,这就不清楚了,总之这个功能很不错,那么什么是SSDT呢,SSDT全称是(System Services Descriptor Table),它将ring3的Win32 API和ring0的内核函数联系起来,SSDT 并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基地址、服务函数个数等。

通过修改此表的函数地址可以对常用 Windows 函数及 API 进行 Hook,从而实现对一些关心的系统动作进行过滤、监控的目的。一些 HIPS、防毒软件、系统监控、注册表监控软件往往会采用此接口来实现自己的监控模块。

   SSDT基址存储在KSYSTEM_SERVICE_TABLE->ServiceTableBase中,下面是这个结构的定义

kd> dt _KSYSTEM_SERVICE_TABLEssdtHook!_KSYSTEM_SERVICE_TABLE   +0x000 ServiceTableBase :            Ptr32 Uint4B //SSDT (System Service Dispatch Table)的基地址
  +0x004 ServiceCounterTableBase :   Ptr32 Uint4B //用于 checked builds, 包含 SSDT 中每个服务被调用的次数  +0x008 NumberOfService : Uint4B   +0x00c ParamTableBase : Uint4B

  其实ServiceTableBase也是一个数据结构,我们这里从WRK中看看它的定义

typedef struct _KSERVICE_TABLE_DESCRIPTOR {    PULONG_PTR Base;      PULONG Count;    ULONG  Limit;    PUCHAR Number;} KSERVICE_TABLE_DESCRIPTOR, *PKSERVICE_TABLE_DESCRIPTOR;

  这里的Base成员就是存储各函数地址的基址,再补充一点,内核中有两个系统服务描述符表,一个是KeServiceDescriptorTable(由ntoskrnl.exe导出),一个是KeServieDescriptorTableShadow(没有导出)。我们HOOK的是KeServiceDescriptorTable中的函数地址,KeServiceDescriptorTable是一个内核变量,可通过extern来使用它,而且它存储的就是_KSYSTEM_SERVICE_TABLE的首地址 

kd> dd KeServiceDescriptorTable8055d700  80505450 00000000 0000011c 805058c48055d710  00000000 00000000 00000000 000000008055d720  00000000 00000000 00000000 00000000
kd> dt _KSYSTEM_SERVICE_TABLE 80505450 ssdtHook!_KSYSTEM_SERVICE_TABLE   +0x000 ServiceTableBase : 0x805a5614  -> 0x9c68   +0x004 ServiceCounterTableBase : 0x805f1adc  -> 0x8b55ff8b   +0x008 NumberOfService  : 0x805f5312   +0x00c ParamTableBase   : 0x805f1b0e

  

 

 

 

  这里我保护进程是HOOK的函数NtOpenProcess,隐藏进程是通过NtQuerySystemInformation实现的,为什么HOOK NtOpenProcess呢,因为任务管理器结束任务的时候,会通过OpenProcess获得被结束的进程句柄,然后再结束。 HOOK NtQuerySystemInformation的原因是因为可以通过它的参数,得到进程链(不同于EPROCESS),然后摘除掉,这样任务管理器就不会显示了,NtOpenProcess的索引号可以通过OD得知    我要做的步骤如下:

  第一: 首先用驱动创建个Device,然后绑定个符号链接,供其与R3程序进行通信

  第二: HOOK NtOpenProcess和

转载于:https://www.cnblogs.com/testvt/p/5825157.html

你可能感兴趣的文章
HDUOJ 1879继续畅通工程(并查集)
查看>>
OC12_自动释放池
查看>>
Saiku资源帖
查看>>
解决手机页面中点击文本框,网页放大问题
查看>>
2-5
查看>>
牛客多校3 A-PACM Team(状压降维+路径背包)
查看>>
HDU - 4284 Travel(floyd+状压dp)
查看>>
1027 制作表格
查看>>
Android之Socket通信、List加载更多、Spinner下拉列表
查看>>
面向对象的介绍与特性
查看>>
typing-python用于类型注解的库
查看>>
20189215 2018-2019-2 《密码与安全新技术专题》第13周作业
查看>>
第四周作业
查看>>
一、HTML基础
查看>>
蓝牙进阶之路 (002) - HC-05与HC-06的AT指令的区别(转)
查看>>
mysql的limit经典用法及优化
查看>>
C#后台程序与HTML页面中JS方法互调
查看>>
mysql 同一个表中 字段a 的值赋值到字段b
查看>>
linux系统可执行文件添加环境变量使其跨终端和目录执行
查看>>
antiSMASH数据库:微生物次生代谢物合成基因组簇查询和预测
查看>>