白帽黑客系列教程之Windows驱动开发(64位环境)入门教程(一)

发布于:2025-03-01 ⋅ 阅读:(15) ⋅ 点赞:(0)

为什么要写这篇文章呢?

作为一名白帽黑客,如果想要学习ROOTKIT攻防技术,就必须要有能力进行驱动开发!

本文章仅提供学习,切勿将其用于不法手段!

在Windows操作系统的64位环境中,进行ROOTKIT攻防,就必须要学会Windows驱动开发!

Windows驱动开发,是掌握Rootkit技术的硬性基础之一!

不会Windows环境下的驱动开发,你就难以透彻理解ROOTKIT攻防技术的真相!

Windows环境下的驱动开发工具包,总体上,共有两种,分别是 DDK 和 WDK !

DDK 主要是用于兼容较早的Windows操作系统版本,例如 Windows XP、Windows 2000 等。

WDK 主要是用于当前主流的Windows操作系统版本,例如 Windows 10、Windows 11 等。

本系列教程中,我们主要使用 WDK 工具包进行驱动开发工作!

有关于驱动开发的一些基础内容,笔者在之前的一些文章中,有所介绍,对于想了解 DDK 和 WDK 工具包的基础介绍的童鞋儿,可以去看看笔者之前的文章!

在本系列教程中,我们主要讲解,如何使用KMDF (内核模式驱动框架)进行驱动程序开发!

在进行驱动开发之前,我们需要准备一些开发环境,驱动程序开发 和 应用程序开发 在 开发环境的部署上,是存在一定区别的!

对于应用程序的开发和调试,一般在本机环境中进行即可(应用程序的开发危险性,相对较低)!

对于驱动程序的开发和调试,则需要分机进行!

什么是分机进行呢?

对于代码的开发(代码编写),一般在本机环境中进行!

对于代码的调试(代码调试),则需要在虚拟机中进行(驱动程序的开发危险性,相对较高)!

为什么说驱动程序开发的危险性,比较高呢?!

驱动程序和操作系统内核一样,都是运行在R0层(也就是System这个权限级别的)!

驱动程序 和 操作系统内核,运行于同等的权限级别 !

也就是说,驱动程序 是可以修改 操作系统内核 的 !

如果驱动程序存在问题,极有可能会导致操作系统崩溃蓝屏!

如果在本机的真实环境中出现此类情况,问题还是比较严重的,你甚至可能需要重装系统!

为了避免发生一些不必要的麻烦(毕竟,重装系统,也是比较麻烦的一件事情。并且,重装完系统,还要重装系统上的应用软件,还是比较费神的),进行驱动程序开发,一般会在采用分机开发的模式!也就是,代码编写环境 和 程序调试环境 彼此独立!

进行 Windows 环境下的驱动开发,我们一般会选择使用 Visual Stdio 系列软件,毕竟 VS 软件 和 Windows 操作系统 都是 微软公司旗下的产品,正所谓,同根同源,兼容性方面,应该还算是比较不错的!笔者使用的是 VS2022 的 社区版本,毕竟免费嘛,嘿嘿  ! ^_^ !

在开发环境中,我们需要使用到 Visual Stdio 软件进行驱动程序的代码编写 !

那么,我们如何使代码在虚拟机中部署并运行调试呢?

我们可以借助于 共享目录 的 特性!

在虚拟机中,开放一个共享目录,给使用指定账户的远程主机可以读写访问,是比较简单的做法!

我们可以将项目目录的路径,设置为共享目录这样的路径,例如 \\DESKTOP-2FKHD64\Debug\KMDF Driver1 这样的路径,其中 \\DESKTOP-2FKHD64\Debug 为虚拟机的共享目录 !

这样,我们就可以将驱动代码远程部署到虚拟机中了!

这样做,也存在危险性,如果虚拟机挂掉了,虚拟机中的代码也就无法被访问了!

所以哈,写代码,还是要小心一些的呢,哈哈,不过呢,还是没有那么容易把虚拟机中的系统彻底搞坏的,毕竟代码是自己写的,代码实现什么功能,执行什么操作,自己是可以控制的!

解决了驱动程序的开发和部署问题,我们还需要在虚拟机中安装相应的软件,比如 kmdmanager 和 dbgview64 软件,Windbg 软件,对于初学者,暂时这里先不讲,毕竟,先要让大家有些成就感,所以,难度是一点一点的增加的哦 ^_^ 

kmdmanager 软件,主要是用来解决驱动的安装、启动、停止、卸载问题的!

dbgview64 软件,主要是用来打印调试信息的,例如 我们可以通过在驱动程序的代码中写入 DbgPrint 这样的函数进行信息打印输出的!TraceEvents 函数主要是用于进行日志记录的!

对于初学者,使用 kmdmanager 软件进行驱动程序启动时,会提示 not number 这样类似的字样!

这是什么情况呢?这通常是因为 驱动程序的签名,没有通过验证!

我们可以通过下面的脚本去关闭签名验证(记住,只能在不重要的虚拟机里执行这样的操作哦)!

bcdedit /set nointegritychecks on   #禁用驱动程序的完整性检查
bcdedit /set testsigning ON            #启用测试签名模式
bcdedit /set loadoptions DDISABLE_INTEGRITY_CHECKS #禁用内核模式代码的完整性检查

经过上面的一系列操作后,重启电脑,再次使用 kmdmanager 软件进行驱动程序启动,应该就可以正常运行了(注意,执行上面的代码,可能带来安全风险,请不要在 真实物理机器 或 有重要数据的虚拟机环境中执行)!不过呢, kmdmanager 软件还是会存在一些小的BUG,到时,就具体问题,具体解决哈,毕竟 “有事问度娘” 嘛,哈哈,我们要充分发挥不耻下问的精神哦 ^_^

在下一篇文章中,我们将正式讲解如何进行Windows驱动程序开发的代码编写工作!

(未完待续)


网站公告

今日签到

点亮在社区的每一天
去签到