Ring0和Ring3 HOOK 大检查

一、HOOK SERVICE TABLE:HOOK SSDT
   这种方法对于拦截 NATIVE API 来讲用的比较多。windows

   SSDT hook,一句话——Windows把须要调用的内核API地址全都存在了数据结构

一个表中(System Service Dispatch Table),要想hook一个内核API,比较简单的办法就是把函数

该内核API在表(SSDT)中保存的地址修改成本身撰写的函数地址。 

二、HOOK INT 2E 方法:IDT HOOK工具

   IDT是中断描述表,能够替换其中的中断处理程序。性能

   这种方法对于跟踪、分析系统调用来讲用的比较多。原理是经过替换 IDT
表中的 INT 2E 中断,使之指向咱们本身的中断服务处理例程来实现的。掌握
此方法须要你对保护模式有必定的基础。

三、 HOOK PE 方法:EAT HOOK
     这种方法对于拦截、分析其余内核驱动的函数调用来讲用的比较多。原理
是根据替换 PE 格式导出表中的相应函数来实现的。spa

     EAT是可执行文件的导出表,记录DLL中可供其余程序使用的函数,可执行文件装载时会使用相应DLL的EAT表来初始化IAT表,经过替换EAT表中的函数地址,就可使依赖于本DLL的程序获得一个假的地址。对象

 

4.IAT HOOK (ring3 用)内存

IAT是可执行文件的导入表,记录可执行文件使用的其它DLL中的函数,经过替换IAT表中的函数地址,能够hook相应DLL中的函数调用。工作流

 

五、Inline Hook方法 (ring 0和ring3 均可以用) 基础

Inline hook的工做流程:
1)验证内核API的版本(特征码匹配)。
2)撰写本身的函数,要完成以上三项任务。
2)获取本身函数的地址,覆盖内核API内存,供跳转。

Inline Hook的缺点:
1) 不够通用。各个windows版本中,内核API的开始一段不尽相同,要想通吃,就要多写几个版

本或者作一个特征码搜索(由于有的内核API在各个版本中很是类似,只是在“特征码”以前或之

后加一点东西)。
2) 已被一些检测工具列入检测范围,若是直接从内核API第一个字节开始覆盖,那么很容易被检

测,若是把覆盖范围日后推,并加以变形,也许能抵挡一气。具体状况,我才疏学浅,还没有试验

 

6.SYSENTRY hook
  为了性能的考虑,xp后的系统都改用sysentry命令来进入ring0,去调用SSDT中的服务,再也不是经过IDT中的 int 2E。这也使得咱们hook也变得相对容易了。
  首先得到sysentry的地址,而后改之,不用再考虑IDT了

 

7)IRP hook IRP是 I/O request packets,驱动程序中有一系列分发例程来处理请求,这些例程保存在驱动设备对象的数据结构中的一个表中,也很容易替换。

相关文章
相关标签/搜索