挂钩SSDT隐藏进程

本文介绍了SSDT(系统服务描述符表)的工作原理及其在Windows系统中的作用,包括如何通过钩子SSDT来隐藏进程。文章详细阐述了如何修改SSDT以实现隐藏进程的技巧,涉及内存保护机制的修改,如利用MDL(内存描述符表)来突破内存保护并实现SSDT钩子。同时,文章还探讨了如何查找和过滤特定进程,以及如何卸载钩子。
摘要由CSDN通过智能技术生成

(本文发表于黑访11期上,请勿转载)

新学期又开始了,一来到学校我口袋的资金剧烈减少,我估计因该和现在轻微的通货膨胀有关(其实是我开学乱花钱花的),没有办法只好也来黑防算是“骗”点钱花了。嘿嘿。

最近大家对于ring0级的研究正如当年的注入一样越来越火,认识的朋友似乎张口闭口都是内核,看来这有可能是以后的趋势了,在下不才在此献上一篇文章,算是抛砖引玉。希望以后有更好的文章发表出来。^_^

我想大家都用过冰刃吧,因该对SSDT记忆犹新,但什么是SSDT,他是做什么的呢?

SSDT的全称是System Services Descriptor Table,系统服务描述符表。这个表的作用就是把ring3Win32 APIring0的内核API联系起来。

他通过对系统调用进行索引,然后定位函数的内存地址。当应用程序采用子系统调用系统服务时,他会调用到Ntdll.dll中,后者向EAX中加载所请求的系统服务标识符编号或系统函数编号,然后向EDX中加载用户模式中函数的参数地址,系统服务调度程序对参数数目进行验证,将他们从用户堆栈复制入内核堆栈,然后调用在SSDT中储存于EAX中的服务标识符编号的索引地址处的函数。

举个例子当我们要调用OpenProcess 函数时。函数进入内核的过程如下:

当程序的处理流程进入ring0之后,系统会根据服务标识符编号eax)在SSDT这个系统服务描述符表中查找对应的表项,这个找到的表项就是系统服务函数NtOpenProcess的真正地址。之后,系统会根据这个地址调用相应的系统服务函数,并把结果返回给ntdll.dll中的NtOpenProcess。图中的“SSDT”所示即为系统服务描述符表的各个表项;右侧的“ntoskrnl.exe”则为Windows系统内核服务进程(ntoskrnl即为NT OS KerneL的缩写),它提供了相对应的各个系统服务函数。ntoskrnl.exe这个文件位于Windowssystem32目录下

这里说明一点,SSDT中的各个表项不会全部指向ntoskrnl.exe中的服务函数,因为你机器上的杀毒监控或其它驱动程序可能会改写SSDT中的某些表项。已到达他们的目的。

我们还要明确一个概念,就是KeServiceDescriptorTable它是内核导出的表,该表拥有一个指针,指向SSDT中包含由ntoskrnl.exe实现核心系统服务的相应部分,我们可以把它理解成SSDT在内核中的数据实体。

SSDT的数据结构定义如下:


typedef struct _tagSSDT {
    PVOID pvSSDTBase;
    PVOID pvServiceCounterTable;
    ULONG ulNumberOfServices;
    PVOID pvParamTableBase;
} SSDT, *PSSDT; 

 

有了以上知识后我们就可以钩住SSDT来完成我们希望实现的功能,这里介绍一种隐藏进程的方法。但有一个问题出现了,我们要修改SSDT表,首先这个表必须是可写的,但在xp以后的系统中他都是只读的,我总结了三个办法来修改内存保护机制。这对以后的编程是很有用处的

   

1,更改注册表(要从起)

HKLM/SYSTEM/CurrentControlset/Control/Session Manger/

Memory Management/EnforceWriteProtection=0

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值