avatar

Catalog
第一个驱动程序

在完成了进程和线程的学习后,我们发现,很多实验都受限于权限的限制,很难直接操纵0环的结构,然而,依靠中断门等提权方式进入0环,需要手动在Windbg中设置段描述符,就会变得很麻烦。而驱动恰恰可以解决这个问题,驱动可以直接和操作系统打交道,话不多说,开始驱动的学习吧。

环境配置搭建

环境及工具

先安装Visual Studio 2017在本机,再安装WDK到本机。DbgView和KmdManager则安装至虚拟机上。因为驱动若发生错误,则会导致系统崩溃,因而选择在虚拟机上进行实验。

项目创建

  1. 安装完VS2017后,要安装SDK,且版本要与WDK的版本一致,如图我的SDK版本是17763 那么安装的WDK版本,也得是17763
  2. 校验好版本后,来创建驱动程序,新建项目 -> Visual C++ -> 测试 -> Legacy -> Empty WDM Driver 有人可能会问了,为什么要创建WDM的驱动程序,而不创建WDF的驱动程序呢?因为如果创建了WDF的驱动程序,在xp上执行会发生系统找不到指定文件的错误 具体原因也不是很清楚,至于这俩的区别可以参考WDM和WDF之间的差异
  3. 接着点击确定,即可创建驱动程序项目了,但是需要注意一点,就是第一步中,SDK和WDK的版本必须要一致,否则会出现一个奇怪的错误 如果版本相同,就不会出现这样的错误啦

项目属性配置

  1. 右键项目,进入属性页,来配置一下项目的属性
  2. 接下来按照图中框中地方进行矫正即可
  3. 配置完即可创建文件了

编写第一个驱动程序

创建过程

  1. 依然是按部就班的来,右键SourceFiles创建源文件

  2. 这里后缀名要用的c的,因为如果编写c++程序的驱动的话,编译器会做过多的优化,因而无法做到指令级别的掌控

  3. 修改文件编译属性,由于刚刚没有创建源文件,所以在项目属性配置时,并不能配置完全部属性,这里需要再配置一下

  4. 编写驱动代码,具体如下

    c
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include "ntddk.h"

    //卸载函数
    VOID DriverUnload(PDRIVER_OBJECT driver)
    {
    DbgPrint("驱动程序已停止.\r\n");
    }

    //驱动程序入口函数,相当于控制台的main函数
    NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
    {
    DbgPrint("驱动程序已运行.\r\n");
    //设置一个卸载函数 便于退出
    DriverObject->DriverUnload = DriverUnload;
    return STATUS_SUCCESS;
    }
  5. 选择生成HelloDriver

结果验证

  1. 将HelloDriver/Debug目录下的HelloDriver.sys复制进虚拟机Windows Xp中
  2. 打开DbgView,勾选Capture Kernel选项,用于捕获内核调试信息
  3. 打开KmdManager,导入HelloDriver.sys,注册并运行,验证结果。

总结

总体不难,但是第一次搞驱动,踩了不少坑,最终还是花了一个上午的时间才弄好。真的非常感谢Joney老大解答问题,这让我少花了很多时间,不然我可能搞到晚上都弄不出来。。。

参考文章:

  1. https://blog.csdn.net/qq_41988448/article/details/103456086
  2. https://blog.csdn.net/liny000/article/details/81260385
  3. https://docs.microsoft.com/zh-cn/windows-hardware/drivers/wdf/differences-between-wdm-and-kmdf
Author: cataLoc
Link: http://cata1oc.github.io/2020/04/07/%E7%AC%AC%E4%B8%80%E4%B8%AA%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶