SSDT HOOK原理图 通过Kernel Detective工具,我们可以发现,SSDT Hook前后,NtTerminateProcess的当前地址会发生变化,其中,变化后的当前地址:0xF885A110为我们自定义的Hook函数(即:HookNtTerminateProcess)的地址。这样,以后每次执行NtTerminateProcess的时候,就会根据执行“当前地址”所指向的函数了,这也就是SSDT Hook的原理。 另...
SSDTHOOK是指将上述SSDT表中对应函数服务号的服务函数进行InlineHook,换成对应的过滤(Fake)函数。 SSDT HOOK怎么实现??? SSDT HOOK的实现可分为4步: 1.获取要Hook的服务函数的服务号; 2.获取SSDT表的基地址 3.将SSDT表中对应函数服务号的函数的地址 4.对相应的服务函数进行InlineHook,跳转到Fake函数 以下为详...
而对于发送给被 Hook 的窗口(也有可能是所有的窗口,即全局 Hook)的消息都会被我们的钩子处理函数所捕获到, 也就是我们可以优先于窗体先捕获到这些消息,Windows 消息 Hook 可以实现为进程内消息 Hook 和全局消息 Hook, 对于进程内消息 Hook,则可以简单的将 Hook 处理函数直接写在这个进程内,即是自己 Hook 自己, ...
而对于发送给被 Hook 的窗口(也有可能是所有的窗口,即全局 Hook)的消息都会被我们的钩子处理函数所捕获到, 也就是我们可以优先于窗体先捕获到这些消息,Windows 消息 Hook 可以实现为进程内消息 Hook 和全局消息 Hook, 对于进程内消息 Hook,则可以简单的将 Hook 处理函数直接写在这个进程内,即是自己 Hook 自己, ...
对于进程内消息 Hook,则可以简单的将 Hook 处理函数直接写在这个进程内,即是自己 Hook 自己, 而对于用途更为广泛的全局消息 Hook,则需要将 Hook 处理函数写在一个 DLL 中, 这样才可以让你的处理函数被所有的进程所加载(进程自动加载包含 Hook 消息处理函数的 DLL)。
2.Hook前的准备-改变SSDT内存的保护 系统对SSDT都是只读的,不能写。如果试图去写,等你的就是蓝脸。一般可以修改内存属性的方法有:通过cr0寄存器及Memory Descriptor List(MDL)。 (1)改变CR0寄存器的第1位 Windows对内存的分配,是采用的分页管理。其中有个CR0寄存器,如下图: CR0.jpg cr0.jpg 其中第1位叫做...
0x00 Hook过程概述: 1. 获取服务函数地址: (1). 通过全局变量KeServiceDescriptorTable获得SSDT表的起始地址; (2). 映射ntdll.dll到ring0空间,获得要Hook的函数的服务索引号; (3). 根据获得的函数的服务索引号,从SSDT表中获得函数地址。 2. 进行Hook(这里采用的Inline Hook是修改函数前五个字节的方法): ...
SSDT 中文名称为系统服务描述符表,该表的作用是将Ring3应用层与Ring0内核层,两者的API函数连接起来,起到承上启下的作用,SSDT并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基址、服务函数个数等,SSDT 通过修改此表的函数地址可以对常用Windows函数进行内核级的Hook,从而实现对一...
SSDT-HOOK保护进程 实验环境:win7虚拟机 示例是对内核层进行SSDT-HOOK实现保护进程的功能。 一会儿会用到的API是OpenProcess,在3环也就是用户层调用此API它保存一些信息传入到0环内核层后实际调用的是ZwOpenProcess函数,所以先使用OD随意打开一个.exe可执行程序,然后在kernel32模块里面查找OpenProce...
ssdt把用户层的win32 api与内核层的native api做了一个关联,而整个native api都保存在ssdt中的一个函数指针数组中,只要修改函数指针数组中的某一项,就相当于hook了某个native api函数.比如,修改ssdt中函数指针数组中的最后一个函数指针,就相当于hook了ntqueryportinf...