第一次接触hook,还不知道hook是什么东西。现在开始走往高手的历程:
黑客防线中有这样一句话:“Hook ZwSetInformationFile技术实现文件的保护技术,这个实际上就是Ring3级下修改SSDT表中的NativeAPI 技术”。
战斗任务一: 什么是SSDT?
查阅百度百科:“SSDT(System Services Descriptor Table),系统服务描述表。这个表就是把ring3的Win32 API和ring 0的系统API联系起来。 SSDT并不仅仅只包含一个庞大的地址索引表,它还包括了其它有用的信息,诸如地址索引的基地址、服务函数个数等。”
通过修改此表的函数地址可以对常用windows函数及API进行hook,从而实现对一些关心的系统动作进行过滤、监控的目的。一些HIPS、防毒软件、 系统监控、注册表监控软件往往采用此接口来实现自己监控模块。目前极个别病毒会采用这种方法,保护自己或者破坏杀毒软件,但这种病毒进入系统前如果杀毒软件能够认识并清除它将没有机会发作。
SSDT 相当于系统内部API的指向标,需要调用的API在什么地方。
SSDT的结构?
typedef struct _SYSTEM_SERVICE_TABLE {
PVOID ServiceTableBase; // 指向系统服务函数表
PULONG ServiceCounterTableBase;
ULONG NumberOfService; // 服务函数的个数
ULONG ParamTableBase;
}SYSTEM_SERVICE_TABLE, *PSYSTEM_SERVICE_TABLE;
typedef struct _SERVICE_DESCRIPTOR_TABLE{
SYSTEM_SERVICE_TABLE ntokrnel; // ntoskrnel.exe的服务函数
SYSTEM_SERVICE_TABLE win32K; // win32k.sys的服务函数,(gdi.dll /user.dll的内核支持)
SYSTEM_SERVICE_TABLE NotUsed1;
SYSTEM_SERVICE_TABLE NotUsed2;
} SYSTEM_DESCRIPTOR_TABLE,*PSYSTEM_DESCRIPTOR_TABLE;
实际上内核中存在两个系统服务描述表,一个是KeServiceDescriptorTable(由ntoskrnl.exe导出),一个是KeServiceDescriptorTableShadow(没有导出)。 KeServiceDescriptorTableShadow不但包含了ntoskrnel项,而且还包含了win32k项,而KeServiceDescriptorTable仅仅包含一个ntoskrnel项。
用winDbg看看,到底这个KeServiceDescriptorTable是什么东西。
引用:kd> dd KeServiceDescriptorTable
我们可以看出,函数表基地址为80502044,存在0000011c个服务项,我们继续看80502044地址的内存块内,到
底放了些什么。
这里面的数据到底表示什么呢?实际上,这表示的是一个入口地址。我们对其中一个地址进行反汇编看看。
第二个战斗任务:HIPS 基于主机的入侵防御系统。是一种能监控你电脑中文件的运行和文件运用了其它的文件以及文件对注册表的修改,并向你报告请求允许的软件。 关于防火墙的学习,再后期起步。
第三个意外收获: 沙盘HIPS ,沙盘英文名sandbox,也叫沙箱,顾名思义可以看作是一种容器,里面所做的一切都可以推到重来,军事上常用沙盘来进行一些战争区域地形模拟,不用了可以把沙子推平重来。 我们的沙盘是一种安全软件,可以将一个程序放入沙盘运行, 这样它所创建修改删除的所有文件和注册表都会被虚拟化重定向,也就是说所有操作都是虚拟的,真实的文件和注册表不会被改动,这样可以确保病毒无法对系统关键部位进行改动破坏系统。另外沙盘一般都有部分或者完整的类似HIPS的程序控制功能,程序的一些高危活动会被禁止,如安装驱动、底层磁盘操作等。目前沙盘主要有两大类, 一是采用虚拟技术的传统沙盘,另一个就是采用策略限制的沙盘。 BufferZone,
Defensewall,Geswall,SafeSpace,Sandboxie. Software Virtualization Solution.
就像我玩仙剑一样,景天刚一出来,就碰见飘摇江湖的、来去无踪的高手,哇羡慕啊,将来有朝一日也可以练成这样的高手,至于高手见面,当到一定的境界的时候,肯定会遇到他们的。