实现内核级HOOK 对于拦截、分析、跟踪系统内核起着致关重要的作用。实现的方法不同意味着应用侧重点的不同。如想要拦截NATIVE API 那么可能常用的就是HOOKSERVICE TABLE 的方法。如果要分析一些系统调用,那么可能想到用HOOK INT 2E 中断来实现。如果想要拦截或跟踪其他内核DRIVER 的调用, 那么就要用到HOOK PE 的方法来实现。这里我们更注重的是实现, 原理方面已有不少高手在网上发表过文章。大家可以结合起来读。下面以我写的几个实例程序来讲解一下各种方法的实现。错误之处还望各位指正。
1、HOOK SERVICE TABLE 方法:
这种方法对于拦截NATIVE API 来说用的比较多。原理就是通过替换系统导
出的一个SERVICE TABLE 中相应的NATIVE API 的地址来达到拦截的目的。
因为此方法较为简单, 网上也有不少资料来介绍。所以这里就不给出实例程序了。SERVICE
TABLE 的结构如下:
typedef struct ServiceDescriptorEntry {
unsigned int *ServiceTableBase;
unsigned int *ServiceCounterTableBase;
unsigned int NumberOfServices;
unsigned char *ParamTableBase;
} ServiceDescriptorTableEntry_t, *PServiceDescriptorTableEntry_t;
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !