前言
废话少说,我们是填鸭式教学.不废话,再做任何事情之前,我们需要配置好环境
VS版本与vmware选择
VS无脑选vs2019,VS2022目前不支持win7.vs2019选社区版什么的,这边就不重复了,因为网上教程满天飞了,这是基本能力了,自己搜索主要安装是 WDK 这块也不说了,网上教程真的满天飞了,关键字搜索 vs2019安装wdk
这边为了防止下错别的版本导致wdk安装不了(win11的wdk只能给2022装,只能装win10的)就给个链接:https://learn.microsoft.com/en-us/windows-hardware/drivers/other-wdk-downloads
具体怎么装,自己搜关键字吧: vs2019安装wdk
装完之后,装vmware,这一块相信大家都知道了,我推荐装windows 1803系统,无它,这玩意是目前我用的比较顺手的系统
双机调试
双机调试就不要看网上那种古董教程了,那种让你乱七八糟的设置pipe什么的都没啥用,无脑选择VirtualKD-Reduxhttps://github.com/4d61726b/VirtualKD-Redux非常无脑: 把target64的东西塞到虚拟机里面,双击安装,虚拟机外面打开vmmon64.exe,然后开机选启动项按F8选择无签名验证模式.即可这里有完整的填鸭教程,看介绍https://github.com/4d61726b/VirtualKD-Redux/blob/master/VirtualKD-Redux/Docs/Tutorial.md
建议先给你的双机调试虚拟机拍个快照当你完成一切准备后
windbg选择
我选择preview 自行从网上下载windbg previewvmmon64选windbg preview,我比较喜欢这个,但是也有人喜欢传统windbg,自己看着选吧
第一个hello world
新建vs项目选进来后第一件事是 把模式调为debug x64,并且选择win7
把inf2cat关了,这玩意没测试签名一直报错
把这个缓解关了
C++设置成最新草案,纯个人爱好
关掉把警告视为错误(其实正式开发必须打开它,但是这玩意很容易让新手头疼,所以我们还是先别打开它)
把这个驱动测试签名关了,要不然没签名会报错
删掉你目录下的xxxxx.inf里面的这个
否则会报 1>F:projectduck_guard_winduck_guard_winduck_guard_win.inf : error 1297: Device driver does not install on any devices, use primitive driver if this is intended.
然后新建一个main.cpp
#include <intrin.h>#include <ntifs.h>#include <ntddk.h>#include <stdlib.h>#include <ntimage.h>#include <ntstrsafe.h>#include <ifdef.h>#define DebugPrint(...) DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, __VA_ARGS__)extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path) { DebugPrint("hello worldn"); return STATUS_SUCCESS;}
编译把这个sys文件丢到虚拟机里面然后用驱动加载工具加载他
恭喜你,你的第一个驱动就成功了
但是这个驱动你是停不了的,因为没有设置uninstall,所以直接还原快照吧。如果要让他停,我们需要加一个驱动卸载的函数
void DriverUnload(PDRIVER_OBJECT driver) { DebugPrint("Good Bye n");}extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path) { driver->DriverUnload = DriverUnload; DebugPrint("hello worldn"); return STATUS_SUCCESS;}
内核编码规范
原文始发于微信公众号(冲鸭安全):安全开发: 驱动环境配置与第一个hello world
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论