寒江独钓:Windows内核安全编程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 安装与运行

1.2.1 下载一个安装工具

有很多工具可以安装内核模块,但是笔者不大敢随便下载推荐给读者,因为现在网站上病毒实在太多了。请读者搜索srvinstw.exe。这个小软件还有汉化版,笔者在华军软件园找到的地址如下:

http://www.onlinedown.net/soft/36059.htm

如果这个地址已经失效了,请读者自己在网上搜索这个小工具。

1 执行这个工具,把我们编写的first.sys安装到自己的计算机上。刚开始打开的界面如图1-4所示。

图1-4 执行srvinstw.exe的开始界面

2 选择“安装服务”并单击“下一步”按钮。然后选择“本地计算机”,单击“下一步”按钮,这时要输入服务名称,这里输入文件的名字“first”。但这个名称不一定要和文件名相同,可以随意输入,只是不能和已经存在的服务冲突。

3 输入sys文件的路径:这里只能手工输入,请不要去单击下面的“浏览”按钮。因为只能浏览到.exe文件,却无法找到.sys文件。

4 选择“设备驱动”。

5 输入“NT驱动器目标名”:不需要输入任何内容,直接单击“下一步”按钮即可。

6 选择启动类型:请一定选择“手动”(见图1-5)。选择手动可以方便调试,可以在所需要的时间进行启动和停止。

图1-5 srvinstw.exe安装到最后一步选择“手动”

至此,就安装成功了。

1.2.2 运行与查看输出信息

现在这个内核模块已经可以运行了,但是我们不会看到任何现象。虽然在前面的代码中,调用了DbgPrint来打印一些信息,但是因为这是内核模块,不能指望它弹出一个窗口,或者显示一个控制台来输出那些信息。

可以在WinDbg中看到内核模块的输出(也就是调用DbgPrint)。但是我们目前还没有讲到如何调试内核代码,现在用DbgView.exe来查看输出是个不错的选择。可以从微软的网站上下载DebugView.exe,笔者下载时使用的地址如下:

http://technet.microsoft.com/zh-cn/sysinternals/bb896647(en-us).aspx

如果这个地址已经失效了,请读者自己搜索。

打开DebugView.exe之后,界面如图1-6所示。注意:DebugView可以捕获各种输出,所以要把Capture Kernel勾上,才能看到内核输出。

图1-6 DebugView的界面

由于前面已经安装了服务,所以,现在打开控制台(所有程序→附件→命令提示符),输入net start first就可以启动first.sys了。反之,可以输入net stop first来停止它的运行。请注意:net start之后跟的是服务名(在前面的安装时的第2步指定。),而不是文件名。这个驱动安装时用的服务名和驱动文件的名字刚好一致,容易引起误解。读者要记住,如果前面输入了不同于文件名的服务名,这里就必须用安装时输入的服务的名字。对于这个例子,控制台输入/输出的结果如图1-7所示。

图1-7 first的运行和停止

与此同时,笔者在DebugView中看到的输出结果如图1-8所示。

图1-8 first运行的输出结果

1.2.3 在虚拟机中运行

虽然按照前面的设置,读者已经可以编译一个内核程序并在自己的计算机上运行了,但是在本机上直接加载刚刚编写的内核模块是非常不明智的。如果模块中有错误,很容易导致操作系统立刻蓝屏,这时工作文件可能还没有保存,导致代码丢失。

笔者的做法是,一般都安装一个虚拟机,把编译好的sys文件放到虚拟机中运行。这样,即使操作系统崩溃,也不会导致自己手忙脚乱。

请去VMWare的官方主页上下载VMWare的30天免费试用版本。官方网站网址如下:

http://www.vmware.com/download/ws/

官方网站不一定始终提供使用试用版本下载。如果已经无法找到的话,读者可以自己搜索,一定有其他软件下载网站提供。

没有使用过虚拟机的读者可能觉得很有意思,因为在自己的Windows XP系统上又运行了另一个Windows XP系统(也可以运行其他系统,比如Linux),就好像有了两台计算机一样。

打开VMWare之后,选择“文件”→“新建虚拟机”,然后按照向导操作即可。用于调试的虚拟机和一般的虚拟机没什么区别,读者需要Windows XP的安装光盘,像安装普通计算机一样在虚拟机上安装Windows XP。

安装完毕之后,碰到的另一个问题可能是如何从外面(本机)将文件拷贝到虚拟机中。这有很多方法,其中一种方法是让虚拟机也正常上网,这样两台计算机之间可以用网络邻居访问。

另一种方法是可以从外面用鼠标直接将文件拖到虚拟机中;或者从里面拖到外面。这个操作类似于段誉的六脉神剑,强大但是时灵时不灵。

还有一种方法是选择“编辑该虚拟机设置”,然后选择“Options”。在左边选中“Shared Folders”,在右边增加一个共享目录,这个目录在本机上。选中之后,在虚拟机中也可以访问这个目录,但是访问的方法比较离奇:必须在虚拟机中的“我的电脑”中输入“\\.host”,按回车键后才能看见外面共享的目录。