这是第二篇,还有一篇很烂的文章
内核自古乃兵家必争之地,某些流氓,某些小人,总喜欢在内核做一堆的patch,你patch就算了,你还去patch那些未导出的危险函数,让机器BSOD, 这也算了,你还加个检测,我勒个去,是可忍孰不可忍!
兔子逼急了还要咬人,哥逼急了直接灭了你
算了,其实很简单的两步。。。。好吧,我承认我是来骗kx的
1:将内核文件映射到我内核空间去;
2:path KiFastCallEntry重定向
一:加载内核
1:关于加载
我代码里用了两种方法,一种被我注释了的:
a:使用ZwCreateSection + ZwMapVieOfSection 结合 SEC_IMAGE 标志来加载,此时加载的地址必定是位于user-mode空间,可以简单的用MDL锁定,然后映射这些页面到kernel-mode空间,也可以直接ExAllocatePool 然后 copy加载的镜像
b : 直接ReadFile啦,对PE格式了解点点,很简单的,不多说,看代码吧
2:关于修正镜像
1:重定位
这个是必须的,但是要注意,必须以原先系统的内核为基址重定位,因为你想自己初始化一些东西如对象头,调度链之类的已经不可能了,你必须让新内核的数据指向老内核
2:修正SDT
这个不需要多说,算算RVA,四则运算一做就好啦
参考资料: 网易博客一篇好像叫《kernel in kernel》的文章……具体我也不清楚了,调试这个驱动时发现的一篇的文章,写的很好
PS:
none
*******************邪恶的分割线**************************
代码+bin:
- 标 题:2nd: 重加载内核绕过内核钩子之类神马的~
- 作 者:长风傲天
- 时 间:2011-09-15 16:31:43
- 链 接:http://bbs.pediy.com/showthread.php?t=140159