有志于成为安全工程师的我开始学习一本名为《Windows内核安全与驱动开发》的优秀书籍。随书资源我以上传。接下来我将记录我的部分历程,为同在学习此书的人们提供小小的帮助。因为软件的时效性,所以多少会有一点事情不能按书里的来。
我也不知道为什么在win10已出的时候,这本书的内容是从XP的驱动开发教起,也许,越是古老简单的系统,越容易让人理解其构造吧,而越新越复杂的系统反而难以学习,尤其是对windows这样的闭源系统来说.
内核编程使用的开发包为Windows Driver Kit,适用于本书的开发包我已经上传到我的百度云中: https://pan.baidu.com/s/1qYRrsTI ,这个是WDK7.xxxx,里面的东西包适用于从XP到vista到win 7的驱动开发。详情自己安装了就知道,win10上安装时请不要选择完全安装,不要安装debug frame和help document相关的东西,否则很可能安装失败,至少我就是失败了。
学习本书时,我使用的代码编辑器是VS2015,我不知道为什么我的VS2015没有内置的驱动开发模板。。。所以我自己建了个简陋的仅用于编辑代码,为了能有代码提示,没有编译调试能力的模板,建立方式是选择新建一个MAKEFILE项目,然后,不用配置,直接点击 完成/finish
然后嘛,在右侧的解决方案视图,右击项目名称,选择菜单里的项目属性单击,弹出来的面板里找到VC++ Directories单击,去右侧找到include Directories,并编辑这个栏目,把你安装的WDK7里的inc文件夹里的东西通通加进去,详情见下图
最后就是按OK,按确定就可以了,此后,你在这个项目里写代码就有相关的代码提示了。
然后,往项目里添加文件MAKEFILE和SOURCES,由于直接添加是没有这种文件的,所以我是添加了txt文件后修改名称。
SOURCES的内容视你的代码文件而定,举个具体的SOURCES文件内容作为例子:
文件里就下面三行
TARGETNAME=first //此处表明编译完成后模块的名称为first.sys
TARGETTYPE=DRIVER //表明你要编译出一个驱动。。。
SOURCES=first.c //表明你要编译的源文件是first.c
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
MAKEFILE内容统一如下:
!IF 0
Copyright (C) Microsoft Corporation, 1999 - 2002
Module Name:
makefile.
Notes:
DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source
file to this component. This file merely indirects to the real make file
that is shared by all the components of Windows NT (DDK)
!ENDIF
!INCLUDE $(NTMAKEENV)\makefile.def
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
最后,保存整个项目,并选择VS2015 左上角的File->Export Template..,然后一路默认你就成功做出了一个模板还导入了VS里面,以后你创建项目时就会发现多了一个你建立的模板。
好了,接下来说说编译。。
在安装了WDK7以后,去win10的菜单找到windows driver kit,在里面自己翻几下。。总之你会找到 x86 Checked Build Environment,也许不止一个,但随便选一个都能用,点击,会进命令行界面,然后嘛,在命令行里用cd切换目录,去到你写好的代码和MAKEFILE,SOURCES所在的位置,接着输入build按回车,代码没问题就肯定能编译成功。你会发现多出来一堆诡异的东西,其中有个名字超长的文件夹,进去,再继续深入你会找到一个后缀为sys的文件,那就是你编译好的系统模块文件了。。。
未完待续,下一篇文章的标题可能是1-2,除非我打算继续写WinDBG相关的玩意儿....
总之我使用WinDBG调试虚拟机时参考的是 http://blog.csdn.net/ayang1986/article/details/38285343,我觉得非常有用