Windows kernel学习之前需要进行的基础环境配置以及调试环境配置。
环境配置
visual studio 2022,安装sdk和wdk,这里sdk和wdk的版本要合适,比如wdk10就没法开发win7适配的驱动,写出来的驱动直接放win7上跑一跑就蓝屏。
下载
按照这个网页从头往下装就行,win10还是win11其实差不多,内核版本一样就行。
下载 Windows 驱动程序工具包 (WDK) - Windows drivers | Microsoft Learn下载之后双击安装,就可以了。
配置环境
下载过程简单,也没有给什么选择的余地,注意C盘空间富裕。
使用vs2022+wdk10进行开发,只支持win10及以上版本,不支持win7
首先需要安装wdk,安装wdk需要sdk,所以需要安装:
- vs2022
- sdk
- wdk
新建KDME(kernel driver mode empty)项目:
源代码那里创建.c文件,然后写一个helloworld,之后ctrl+b或者ctrl+shift+b就可以在对应目录中找到.sys文件了。
PS:如果出现什么什么spectre漏洞缓解,就去vs installer里下载对应架构的补丁
完事就可以写驱动代码了
#include <ntddk.h>
NTSTATUS unload(PDRIVER_OBJECT driver)
{
DbgPrint("Driver unload success..");
return STATUS_SUCCESS;
}
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
driver->DriverUnload = unload;
DbgPrint("Hello World\n");
return STATUS_SUCCESS;
}
运行
开启测试模式
不开启测试模式,没有合法签名的驱动不能运行,通过管理员权限的命令界面都可以开启,开启后需要重启系统。
bcdedit /set testsigning on ;开启测试模式
bcdedit /set debug on ;开启调试模式
bcdedit /set loadoptions ddisable_integrity_checks ;关闭签名验证
关闭就是off
因为驱动没有输出缓冲区,所以不能直接打印,只能按照日志格式打印。需要用到debugview这个工具去监视还有drivermanager去启动驱动(sys不能双击运行,启动方式很多,这个比较简单)。
测试还是成功的:
测试模式过DSE签名
win64位都有的DSE保护,驱动强制签名保护,调试模式也得要求签名,但是可以通过修改驱动入口 _KLDR_DATA_TABLE_ENTRY
里面的 Flags
标志位来取消签名验证,但是只能在调试模式下使用。
PKLDR_DATA_TABLE_ENTRY pLdrData =(PKLDR_DATA_TABLE_ENTRY)pDriverObject->DriverSection;
pLdrData->Flags = pLdrData->Flags | 0x20;
上面是书上说的,但是在我实际的操作过程中发现其实不需要,直接用那两个工具(debugview、drivermanager)就可以直接运行了。
调试
常见思路就是通过VMware建立串口进行远程调试。然后使用windbg进行远程调试。不能用x64dbg进行调试,因为xdbg就在用户层,和驱动隔着r1和r2两层呢。
逆向方式
Windows内核驱动程序静态逆向工程的方法论-安全客 - 安全资讯平台 (anquanke.com)
原文:Methodology for Static Reverse Engineering of Windows Kernel Drivers | by Matt Hand | Medium
实际分析
[原创]某被外挂用烂了的读写驱动样本全逆向+功能分析-软件逆向-看雪-安全社区|安全招聘|kanxue.com
ida动调
IDA6.8 双机调试驱动搭建 - 『软件调试区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn