这是第二篇,还有一篇很烂的文章

内核自古乃兵家必争之地,某些流氓,某些小人,总喜欢在内核做一堆的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:

上传的附件 KernelLoader_sys.7z