一、驱动环境
关于Windows驱动环境如何安装,微软官网已有介绍,地址:
https://docs.microsoft.com/zh-tw/windows-hardware/drivers/download-the-wdk
1、安装VisualStudio2019
注意:选择正确的Windows 10 SDK版本和安装CPU漏洞缓解库
2、安装Windows Driver Kit
二、驱动例子
1、新建驱动项目
选择Kernel Mode Driver,Empty(KMDF)模板,如图:
2、驱动代码
代码如下图:
#include <ntddk.h>
VOID DisplayItsProcess()
{
// 获取执行体层进程对象的数据结构EPRCESS,非内核层进程数据结构KPROCESS,也非用户层PEB
PEPROCESS pEProcess = PsGetCurrentProcess();
// EPRCESS结构体不能直接用指针访问成员变量ImageFileName
PTSTR ProcessName = (PTSTR)((ULONG)pEProcess + 0x17C);
DbgPrint("ProcessName:%s\n",ProcessName);
// PsGetCurrentProcessId()返回进程id是一个句柄
DbgPrint("ProcessId:%p\n",PsGetCurrentProcessId());
}
NTSTATUS DriverUnload(PDRIVER_OBJECT DriverObject)
{
DisplayItsProcess();
DbgPrint("This driver is unloading…\n");
return STATUS_SUCCESS;
}
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)
{
DbgPrint("This driver is loading…\n");
DisplayItsProcess();
DriverObject->DriverUnload = DriverUnload;
DbgPrint("%ws\n",RegistryPath->Buffer);
return STATUS_SUCCESS;
}
代码含义:在驱动加载和卸载的时候输出该驱动所属的进程名和进程id
3、驱动运行
使用DriverMonitor把驱动加载起来,DebugView捕获到的输出如下:
三、WinDbg调试
1、虚拟机设置
添加串行端口
Windows10开启内核调试
重新启动Windows10系统,选择kkkkkkkkk启动选项
2、WinDbg连接被调试系统
注意:连接不成功的话就Detach,重新连接
3、定位驱动加载地址
手动加载驱动,找到驱动加载的内核基地址0xbc840000,如图:
ida中换算出DriverUnload( )函数地址0xbc841070,如图:
WinDbg下断点,如图:
4、调试代码
手动卸载驱动,WinDbg停在DriverUnload( )函数处,开始调试代码,如图:
PsGetCurrentProcess()函数返回结构体EPRCESS,EPRCESS用来表示执行体层的进程对象;
可以使用dt nt!_EPROCESS命令查看结构体成员;
这里使用dt _EPROCESS 89f572c0命令查看结构体成员和对应值,如图:
偏移0x17C处是进程名ImageFileName