重载内核的相关文章实在是太多了,鉴于还是有很多初学者研究这一块,本文仅作为一个引导作用,文笔不好,见谅。 我的博客:http://blog.csdn.net/sidyhe 开发环境:VS2010 + WinDDK 测试环境:VirtualDDK + VMware + Win7 sp1 x86 第一部分链接:http://bbs.pediy.com/showthread.php?t=187863 第二部分链接:http://bbs.pediy.com/showthread.php?t=187919 第三部分链接:http://bbs.pediy.com/showthread.php?t=187982 第四部分链接:http://bbs.pediy.com/showthread.php?t=188012 第五部分链接:http://bbs.pediy.com/showthread.php?t=188050第六部分:IDT HOOK 对我来说IDT一直是一个很难理解的东西,尤其是段选择子什么的,这里我不敢教大家如何HOOK IDT表,我只会INLINE HOOK,囧。再说每一个CPU都有各自独立的IDT表,做HOOK的话每一个CPU都要处理,也很麻烦。 为什么要HOOK IDT?除了正常的服务请求会经过KiFastCallEntry,那么不正常的就只能走中断门了,比如DEBUG,BREAKPOINT等等,我想这是大家有兴趣的地方。 和之前一样,对于大部分函数表来说,在NT内核中都会有一个对应的地方来存储原始地址,初始化函数是在KiSystemStartup中,但是WRK里并没有源代码,被可恶的编译成了lib文件,所以来看IDA吧: 显然这里的77E164也可以理解为是一个函数表,里面存储了中断门的线性地址,起个名字吧,我自己叫做KiTrapTable,不知道对不对。有一个特点就是这个地址表并不是元素连续的,每隔一个才是地址,也就是中断函数地址=函数表[索引*2],至于另外一个元素是什么我就不敢断言了,老办法,利用重定位来搜索:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!