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)项目:

image-20230808142343449

源代码那里创建.c文件,然后写一个helloworld,之后ctrl+b或者ctrl+shift+b就可以在对应目录中找到.sys文件了。

PS:如果出现什么什么spectre漏洞缓解,就去vs installer里下载对应架构的补丁

image-20230808142641548

image-20230808142650667

完事就可以写驱动代码了

#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不能双击运行,启动方式很多,这个比较简单)。

image-20230808143008285

测试还是成功的:

image-20230808143156508

测试模式过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

没有版权,随便复制,免费的知识应该共享 all right reserved,powered by Gitbook该文章修订时间: 2023-08-25 14:23:20

results matching ""

    No results matching ""