吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2761|回复: 1
收起左侧

[其他转载] 【笔记】Windows Kernel Programming(一)开发环境搭建

[复制链接]
小俊 发表于 2021-1-30 16:23
本帖最后由 小俊 于 2021-1-30 22:44 编辑

1. 驱动开发环境搭建

Install Visual Studio 2019

Visual Studio 2019

Install Spectre

Install Windows Driver Kit

Windows Driver Kit 1

Windows Driver Kit 2

Windows Driver Kit 3

Windows Driver Kit 4

创建项目

Empty WDM Driver

创建

添加 driver.c

添加代码

// driver.c
#include <ntddk.h>

// DriverEntry Routine
DRIVER_INITIALIZE DriverEntry;
// Unload Routine
DRIVER_UNLOAD DriverUnload;

// DriverEntry:  驱动程序的入口点
// DriverObject: 驱动程序对象
// RegistryPath: 注册表中的路径(驱动程序路径)
NTSTATUS
DriverEntry(
    _In_ PDRIVER_OBJECT DriverObject,
    _In_ PUNICODE_STRING RegistryPath
)
{
    // 编译器默认的警告等级为 /W4,
    // 并且开启 /WX 将警告视为错误,
    // 对未引用的参数或变量会报错(C4100).
    //   方法1: 删除参数名,或者注释掉参数名
    //   方法2: 将警告等级设置为 /W3 或者关闭 /WX
    //   方法3: 微软推荐使用 UNREFERENCED_PARAMETER
    // UNREFERENCED_PARAMETER 啥也没干,只是一个空引用的宏.
    UNREFERENCED_PARAMETER(RegistryPath);

    // 非WDM驱动(NT) Unload Routine 是可选的.
    // 如果不设置 Unload Routine,正常情况下驱动模块将无法被卸载
    DriverObject->DriverUnload = DriverUnload;

    // 如果 DriverEntry 返回值不为 STATUS_SUCCESS,
    // 驱动将不会被加载,Unload Routine 也不会被调用
    return STATUS_SUCCESS;
}

// Unload Routine
VOID DriverUnload(_In_ PDRIVER_OBJECT DriverObject)
{
    UNREFERENCED_PARAMETER(DriverObject);
}

编译

编译

驱动的兼容性问题

  • 系统位数的兼容性
    • x86的系统只能加载x86的驱动,x64的系统只能加载x64的驱动
    • 内核里没有WOW机制,不像应用程序,x64系统可以运行x86程序
  • 系统版本的兼容性
    • 建议将项目的Target OS Version设置为Windows 7,这样就可以兼容几乎所有Windows版本.
    • Target OS Version

x64 Driver Signature Enforcement (DSE)

Vista开始,x64操作系统需要签名才能加载驱动,这里简单介绍几个解决方法.

方法 说明
使用x86系统部署驱动 只是为了方便测试
进入测试模式bcdedit /set testsigning on 如果开启了Secure Boot进入测试模式将会失败
在系统引导的时候按F8选择禁用驱动程序签名强制 Win10按住Shift键然后点击重启进入高级启动
进入调试模式,挂上调试器. 如果系统启动后挂上调试器,需要系统断下来一次
使用泄露的过期签名,并修改系统时间给自己的驱动签名 会被杀毒软件查杀
使用有任意读写漏洞的驱动,强制禁用DSE https://github.com/hfiref0x/DSEFix
使用有任意读写漏洞的驱动,手动内存加载驱动 https://github.com/hfiref0x/TDL
使用系统漏洞或Bootkit 兼容性差,稳定性差,不推荐

部署驱动程序

  • 使用系统自带的sc.exe就可以完成驱动部署
  • 写一个load.bat批处理来方便我们做驱动的部署
@REM load.bat
@echo off

set serviceName=MyDriver1
set binPath="C:\Users\Win10_1909_64\Desktop\MyDriver1.sys"

@REM LoadDriver
@REM HKLM\System\CurrentControlSet\Services\%serviceName%
sc create %serviceName% binPath= %binPath% type= kernel
sc start %serviceName%
pause
@REM UnloadDriver
sc stop %serviceName%
sc delete %serviceName%
pause

Win10部署


Win7部署


WinXP部署

免费评分

参与人数 4吾爱币 +10 热心值 +4 收起 理由
lsz7575 + 1 + 1 非常详细.谢谢.
ntyangxd + 1 + 1 谢谢@Thanks!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
E式丶男孩 + 1 + 1 希望长久更新

查看全部评分

本帖被以下淘专辑推荐:

  • · Aarow|主题: 988, 订阅: 304

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Joms 发表于 2022-3-9 19:54
老哥,后续的笔记更新到别的平台了吗
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 10:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表