• windows 驱动与内核调试 学习


    概述

    本文讲述笔者在学习内核和驱动开发的笔记。

    驱动概述

    一般驱动需要运行内核权限下运行(因为涉及硬件读取),比如Intel下的ring 0 权限下。在windwos大量病毒和杀软为了特殊目的往往都是通过将自身升级为内核驱动方式进行运作。如果病毒程序首先进入ring 0理论上可以杀软将毫无作用。微软为了扼杀此类程序在windwo7 64位系统上会强制校验驱动程序签名,如果签名非微软认可将不会被加载。

    在这里插入图片描述

    微软官方驱动学习指南

    驱动开发环境配置

    首先我们根据当前操作系统下载对应的WDKvisual studio。相关下载地址:微软相关下载地址

    微软对于IDE配置写的及其详细不想写轮子,开始第一个驱动程序,当你配置完成我们可以通过visual studio模板创建一个工程

    在这里插入图片描述

    在这里插入图片描述
    我们第一个示例程序如下:

    #include 
    
    //这个函数被注册用于驱动卸载调用
    VOID myUnload(
        struct _DRIVER_OBJECT* DriverObject
    ) {
        UNREFERENCED_PARAMETER(DriverObject);
    
        DbgPrint("hello  drive unloaded");
    }
    
    
    //驱动被加载的时候会调用此函数
    NTSTATUS
    DriverEntry(
        _In_ struct _DRIVER_OBJECT* DriverObject,
        _In_ PUNICODE_STRING    RegistryPath
    )
    {
        //如果你没有用到参数需要告诉系统。
        UNREFERENCED_PARAMETER(RegistryPath);
        //打印信息
        DbgPrint("hello  drive loaded");
        //驱动卸载回调注册
        DriverObject->DriverUnload = myUnload;
        return STATUS_SUCCESS;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    点击生成驱动文件
    在这里插入图片描述

    如果抛出如下错误,可以下载相关库再次编译
    在这里插入图片描述
    在这里插入图片描述
    这里由于是学习目的就不需要启用了,关闭如下图所示:在这里插入图片描述

    tip:spectre attack是一个物理级别的漏洞

    拷贝编译产物到目标操作系统(系统需要关闭数字签名
    在这里插入图片描述
    可以利用一些三分工具加载相关驱动如下图所示

    在这里插入图片描述

    安全启动点击停止得到相关输出:
    在这里插入图片描述

    接下来写入一个有趣的蓝屏代码

    在这里插入图片描述

    我们可以看到如下图错误

    在这里插入图片描述

    驱动和内核调试

    我们假设被调试的内核系统是win10 且运行在vmware中。

    被调试的机器按照如下条件配置:
    (1) 调试机器和被调试机器能相互ping(如果不能请关闭防火墙等)

    (2) 管理员身份运行cmd 键入bcdedit /debug on 开启内核调试

    可参阅 BCDEdit 调试开关

    (3) 根据情况配置 配置网络或者串口调试设置
    距离一个串口的配置命令如下:

    bcdedit /dbgsettings serial baudrate:115200 debugport:2
    
    • 1

    可参阅 BCDEdit 调试配置

    (4) 如果开启了串口调试那么配置vmware 相关串口

    \\.\\pipe\com_2
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    上述配置完成后你可用windbg进行调内核代码。
    在这里插入图片描述

    在这里插入图片描述
    确定后 ,重启被调试的电脑。

    其他快捷链接方式:
    在这里插入图片描述

    目标后面拼接 -b -k com:pipe,port=\.\pipe\com_2,resets=0 也是可以的。

    在这里插入图片描述

    挂到断点继续输入g运行即可

    当我们驱动断点触发时
    在这里插入图片描述
    你会差异的发现自动关联的了源码。大致原因时sys驱动文件的debug版本会在PE结构中保留符号表位置
    在这里插入图片描述

    如果需要windbg查看dbgprint的输出请执行

     ed nt!Kd_Default_Mask 8
    
    
    • 1
    • 2

    参考

    编写 Hello World Windows 驱动程序 (KMDF)

    win10关闭驱动数字签名

    Disabling-Driver-Signature-Verification-on-Windows-8-or-10

    微软签名概述

    spectre 漏洞文档

    BCDEdit 调试开关

    BCDEdit 调试配置

  • 相关阅读:
    基于 Amazon API Gatewy 的跨账号跨网络的私有 API 集成
    Python统治编程界?Java第一个不服
    Android Studio的初次认识
    go开发之个微机器人的二次开发
    第3阶段-运维线上实战-3.2企业级nginx使用
    Linux笔记
    一种基于闭包函数实现自动化框架断言组件的设计实践
    带返回值宏函数[C语言]
    数据库的索引
    玩转Vue3之Composables
  • 原文地址:https://blog.csdn.net/qfanmingyiq/article/details/127338203