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

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

  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_TABLE
ssdtHook!_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 KeServiceDescriptorTable
8055d700 80505450 00000000 0000011c 805058c4
8055d710 00000000 00000000 00000000 00000000
8055d720 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_TABLE
ssdtHook!_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 KeServiceDescriptorTable
8055d700 80505450 00000000 0000011c 805058c4
8055d710 00000000 00000000 00000000 00000000
8055d720 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实现进程保护和进程隐藏的更多相关文章

  1. SSDT Hook实现内核级的进程保护

    目录 SSDT Hook效果图 SSDT简介 SSDT结构 SSDT HOOK原理 Hook前准备 如何获得SSDT中函数的地址呢 SSDT Hook流程 SSDT Hook实现进程保护 Ring3与 ...

  2. 进程隐藏与进程保护(SSDT Hook 实现)(二)

    文章目录:                   1. 引子 – Demo 实现效果: 2. 进程隐藏与进程保护概念: 3. SSDT Hook 框架搭建: 4. Ring0 实现进程隐藏: 5. Ri ...

  3. SSDT Hook结构

    目录 SSDT Hook效果图 SSDT简介 SSDT结构 SSDT HOOK原理 Hook前准备 如何获得SSDT中函数的地址呢 SSDT Hook流程 SSDT Hook实现进程保护 Ring3与 ...

  4. SSDT Hook实现简单的进程隐藏和保护【转载】

    原文链接:http://www.blogfshare.com/ssdthook-hide-protect.html 原文作者:AloneMonkey SSDT Hook实现简单的进程隐藏和保护 Alo ...

  5. 进程隐藏与进程保护(SSDT Hook 实现)(三)

    文章目录: 1. 引子: 2. 获取当前系统下所有进程: 3. 服务管理(安装,启动,停止,卸载): 4. 应用程序和内核程序通信: 5. 小结: 1. 引子: 关于这个 SSDT Hook 实现进程 ...

  6. 进程隐藏与进程保护(SSDT Hook 实现)(一)

    读了这篇文章终于明白大致怎么回事了 文章目录:                   1. 引子 – Hook 技术: 2. SSDT 简介: 3. 应用层调用 Win32 API 的完整执行流程: 4 ...

  7. 【Hook技术】实现从"任务管理器"中保护进程不被关闭 + 附带源码 + 进程保护知识扩展

    [Hook技术]实现从"任务管理器"中保护进程不被关闭 + 附带源码 + 进程保护知识扩展 公司有个监控程序涉及到进程的保护问题,需要避免用户通过任务管理器结束掉监控进程,这里使用 ...

  8. x64下进程保护HOOK

    目录 x64(32)下的进程保护回调. 一丶进程保护线程保护 1.简介以及原理 1.2 代码 1.3注意的问题 二丶丶回调函数写法 2.1 遇到的问题. 2.2 回调代码 x64(32)下的进程保护回 ...

  9. 64位下Hook NtOpenProcess的实现进程保护 + 源码 (升级篇 )

    64位下Hook NtOpenProcess的实现进程保护 + 源码 (升级篇 ) [PS: 如果在64位系统下,出现调用测试demo,返回false的情况下,请修改Hook Dll的代码] glhH ...

随机推荐

  1. css中vertical-align和line-height的用法

    css中vertical-align和line-height的用法 1.先来看一种现象: (1).将一个图片放入一个div块中,div块背景颜色设置为aquamarine.将会发现图片与div块下边沿 ...

  2. SQL Server 多库操作 库名.dbo.表名 出错的问题!

    SQL Server 多库操作 库名.dbo.表名 出错的问题! 数据库名不要用数字开头. 例如:343934.dbo.user 这就会出错.md a343934.dbo.user 就没问题!! 记住 ...

  3. docker registry的CI规划

    目前代码全部署在docker中, 考虑用jenkins打包成docker包再推送到docker registry 打包推送过程中自动按照日期打标签,并且刷新latest

  4. HDU3001 Travelling —— 状压DP(三进制)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3001 Travelling Time Limit: 6000/3000 MS (Java/ ...

  5. YTU 2579: 填空题----删除指定字符

    2579: 填空题----删除指定字符 时间限制: 1 Sec  内存限制: 128 MB 提交: 164  解决: 61 题目描述 小明想要做个小程序,能够删除字符串中特定的字符. 例如:想要在下面 ...

  6. codeforces 689A A. Mike and Cellphone(水题)

    题目链接: A. Mike and Cellphone time limit per test 1 second memory limit per test 256 megabytes input s ...

  7. 我的第一篇博文,Python+scrapy框架安装。

    自己用Python脚本写爬虫有一段时日了,也抓了不少网页,有的网页信息两多,一个脚本用exe跑了两个多月,数据还在进行中.但是总觉得这样抓效率有点低,问题也是多多的,很早就知道了这个框架好用,今天终于 ...

  8. WEB开发框架系列教程 (二)页面功能开发(1)

    上一节一起创建TEST项目的完整的解决方案 接下来面临的是一个个具体功能页面开发了 在进行开发之前需要对接下来的页面进行分析 可以这么说任何一个项目中都有很多非常基础类的数据维护功能 我们把这类数据归 ...

  9. linux更改用户名,域名(转载)

    转自:http://huangro.iteye.com/blog/365975 1. 我们在root权限下,使用命令: usermod -l new_user_name old_user_name 即 ...

  10. 网易云MongoDB分片集群(Sharding)服务已上线

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. MongoDB sharding cluster(分片集群)是MongoDB提供的数据在线水平扩展方案,包括 ...