0x00 前言
参考资料
随着 windows 系统的更新迭代,windows 驱动开发技术也是不断的升级:从最早期的 VXD(Virtual X Driver)(已废弃)到 windows 2000 上推出的 WDM(Windows Driver Model)驱动模型,随后从 windows vista 推出的 WDF(Windows Driver Foudation)驱动模型,沿用至今;WDF 是 WDM 的升级版,并且在一定程度上兼容,WDF 是微软目前推荐的驱动开发模型。
WDF 还可以细分为内核模式 KMDF(Kernel-Mode Driver Framework) 和用户模式 UMDF(User-Mode Driver Framework),顾名思义 UMDF 将受到更多的限制从而换来更高的操作系统稳定性,其二进制扩展名为 ;UMDF 和 KMDF 开发基本相同,本文这里仅介绍使用更广泛的 KMDF 开发。
本文实验环境
0x01 搭建驱动开发环境
参考资料
首先配置 的 C/C 开发环境(https://visualstudio.microsoft.com/),按 Visual Studio 官方教程,自动下载安装「使用C的桌面开发」,其中 SDK 默认为 :
开发软件需要 SDK(Software Development Kit),而开发 windows 驱动则需要 WDK(Windows Driver Kit);现在我们来配置 WDK 环境,从官网(https://learn.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk)下载 WDK 在线安装包(版本必须和 SDK 一致),按如下进行安装:
对于 WDF 驱动模型其开发环境叫 WDK(Windows Driver Kit) 对于 WDM 驱动模型其开发环境叫 DDK(Driver Development Kit)
安装完毕后,其窗口会默认勾选为 安装 WDK 扩展插件,按照指导进行安装即可,随后我们可以在 的创建项目页面,就看到 KMDF/UMDF 等选项,表示 windows 驱动开发环境配置成功。
windows 驱动开发环境可能会受操作系统、Visual Studio、SDK、WDK 的版本影响,配置过程需要多留心这些环节,如遇见问题可以参考如下版本信息 https://learn.microsoft.com/en-us/windows-hardware/drivers/other-wdk-downloads。
0x02 HelloWorld开发
参考资料
根据官方教程,我们在 中创建空的 项目,并在其中创建 文件,编写代码如下:
在「配置管理器」中设置为 ,编译生成项目发现如下错误:
默认开启了缓解 Spectre 攻击的机制,可在 VS 安装器中选择安装指定的支持库,我们实验环境下可以直接关闭该功能,在 设置为 :
随后便可以成功编译,在 下,可以看到生成的二进制文件 。
0x03 部署和测试
参考资料
驱动程序一般以服务(service)或设备(device)的方式运行工作,这点和普通应用程序不同,所以不能像应用程序那样进行调试和测试。官方指导中提供一种基于双机调试环境的驱动调试方法,这种方式较为繁琐,我们这里进行简要介绍;想了解更方便的本机调试驱动程序的小伙伴,可跳转至「0x04 本机调试驱动程序」。
按照官方指导,我们将驱动程序作为设备进行运行调试,在此之前需要再提供一台主机作为被调试机(),驱动程序将在被调试机上()进行部署和测试,而本台主机即作为开发主机同时作为调试机(),如下:
首先在被调试机()上也安装上 WDK 环境,随后在 WDK 的安装目录下运行该工具 ,默认路径:;在之后调试机()中的 将连接被调试机()的 的工具,自动完成双机调试环境的配置。
在开发主机上()初始化被调试机的相关信息,在 中添加新设备,我们这里使用网络双机调试的方式,默认参数即可:
随后将自动完成配置,如下:
在 中将被调试机()添加完毕后,在如下窗口选择该主机并设置驱动的硬件 ID 为 ,如下:
配置完成后,我们在 菜单中 ,驱动程序将自动部署在被调试机上()并进行测试运行:
在被调试机()上我们在设备管理器中可以看到 已经成功部署了:
如果想调试驱动程序,则可以使用 WinDBG 依据以上的双机调试环境对驱动程序进行调试。
0x04 本机调试驱动程序
参考资料
官方提供的驱动程序部署和测试方法,虽然有效的隔离开发环境和调试环境,但实在是过于繁琐了,更不用说其中双机调试环境下的各种问题。而驱动程序还可以以服务的方式进行运行,我们通过这种方式可以更加方便的在本机调试驱动程序。
在日常安全工作中,我更喜欢使用这种方式,因为大多数情况我只需要工作在内核层的驱动代码,而不关心其是否是完整的 windows 驱动设备,这种方式能帮助我快速进行安全验证工作。
创建 KMDF 项目并编写代码如下:
在「配置管理器」中设置为 ,编译生成项目。
在运行测试前,我们需要在本机(即开发主机)上打开测试模式(重启生效),使得操作系统可以加载我们编译的驱动程序,使用管理员权限打开 powershell:
重启主机后,使用管理员权限打开 powershell,通过 命令为驱动程序创建服务(命令详解请参考:https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/sc-create):
创建服务如下:
随后便可以使用 命令启动驱动程序运行,并使用 查看调试输出(需要勾选 和 才能看到输出):
运行如下:
当我们更新了驱动代码、编译项目后,可以再次 这个服务,便可以快捷的进行驱动程序代码的测试和调试。
0x05 References
参考资料
https://learn.microsoft.com/zh-cn/windows-hardware/drivers/gettingstarted/ https://github.com/microsoft/Windows-driver-samples https://visualstudio.microsoft.com/ https://learn.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/sc-create
到此这篇windows驱动开发视频教程(windows驱动开发入门)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/goyykf/20464.html