首页
社区
课程
招聘
测试vs2015+wdk10编译WDM驱动
发表于: 2017-2-20 11:52 21797

测试vs2015+wdk10编译WDM驱动

2017-2-20 11:52
21797

0x00.前言

将学习的内容做以下总结,学艺不深,有错误的地方还望各位指出。

一些图是借用的网络上的,部分内容截图比较麻烦。内容分为三个方面:

·搭建编译环境

·设置编译选项

·测试项目

0x01.搭建编译环境

搭建环境网上的文章有一些,但我按照网上的流程搭建了一遍之后发现一个问题——找不到相关头文件比如<ntddk.h>

这事因为sdk的版本和wdk版本不匹配,所以,最好的安装步骤是先安装vs2015再安装WDK10

我的两个版本如上,或者安装vs时不选择sdk,安装vs之后再去官网上选择合适的sdk和wdk


其次是搭建双机调试环境,忘掉古老的设备接口吧,这里用VirtualKD

39fK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3j5$3!0U0i4K6g2X3K9#2)9J5c8X3q4J5N6r3W2U0L8r3g2Q4x3V1k6V1k6i4c8S2K9h3I4K6i4K6u0r3y4e0t1H3x3K6b7&6x3U0M7`.

这篇文章写得很详细


0x02.设置编译选项

现在我们修改编译选项实现一个打印遍历驱动的程序

新建wdm项目

添加新建项,并改后缀为.c

删除自动生成的.inf文件

修改编译选项如下,不一一截图:

// C/C++

//  |-常规

//  |  |-视警告为错误:否

//  |-优化

//  |  |-优化:已禁用

//  |  |-启用内部函数:否

//  *-代码生成

//     |-启用字符串池:否

//     |-安全检查:禁用安全检查(/GS-)

//     *-启用函数级连接:否(/Gy-)

//

// 链接器

//  |-常规

//  |  *-将链接器警告视为错误:否

//  |-调试

//  |  |-生成完整的数据库文件:是

//  *-高级

//     |-入口点:DriverEntry

//

// Driver Setting

//  |-General

//  |  *-Target OS Version:windows 7

//  |  *-Target Platform:Desktop   //这些自定义


这样修改编译选项生成的文件更为纯净容易分析,下图是拖到IDA里面的效果

如果没有这方面的需要只需修改下面的选项即可

//  |  |-视警告为错误:否

//  |  *-将链接器警告视为错误:否

//  |  *-Target OS Version:windows 7

//  |  *-Target Platform:Desktop   //这些自定义




0x03.测试

注意:一些古老的教材提到wdk自带一个build environment的文件夹,通过这里面的exe命令行进行编译

而wdk10不再支持这种方式,已经将这个整合到vs里了,请按照上文的编译环境配置

源码见附件,从DriverEntry入口开始分析即可


另外windbg需要获得打印的调试信息,需要拷贝下面文字到记事本,改后缀名为.reg,双击导入被调试虚拟机注册表

并且需要重启目标虚拟机


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter]

"DEFAULT"=dword:0000000f 


另外对于学习驱动的朋友题两点建议:

1.多看一些新的教材,老的教材就直接放弃吧,推荐以下教程:

a68K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4k6T1j5i4y4E0i4K6u0W2j5$3!0E0i4K6u0r3N6r3S2J5k6h3q4V1i4K6u0V1y4K6V1%4x3g2)9J5k6o6q4Q4x3X3b7I4i4K6u0W2K9s2c8E0L8l9`.`.

《Windows内核安全与驱动开发》

2.明确重点,从事逆向的工作直接跳过硬件接口方面的章节

额外推荐阅读:

aabK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3#2&6j5$3!0V1k6g2)9J5k6h3&6W2N6q4)9J5k6h3y4F1i4K6u0r3L8r3q4F1k6%4g2S2k6$3g2Q4x3V1k6U0M7s2m8Q4x3V1j5I4y4K6M7I4i4K6u0W2K9s2c8E0L8l9`.`.

55dK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3@1#2K9r3!0E0k6g2)9J5k6h3y4G2L8g2)9J5c8X3u0T1M7#2)9J5c8Y4c8Z5M7X3g2S2k6q4)9J5k6o6R3&6x3o6g2Q4x3X3b7I4i4K6u0V1x3g2)9J5k6h3S2@1L8h3H3`.


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

上传的附件:
收藏
免费 1
支持
分享
最新回复 (15)
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2

为什么我有时能生成成功,过一会再生成会报错


1>------ 已启动生成: 项目: 1sysPrintTest, 配置: Debug x64 ------

1>  Building '1sysPrintTest' with toolset 'WindowsKernelModeDriver10.0' and the 'Desktop' target platform.

1>  sysPrintTest.c

1>sysPrintTest.c(21): warning C4201: 使用了非标准扩展: 无名称的结构/联合

1>sysPrintTest.c(22): warning C4201: 使用了非标准扩展: 无名称的结构/联合

1>sysPrintTest.c(26): warning C4201: 使用了非标准扩展: 无名称的结构/联合

1>sysPrintTest.c(29): warning C4201: 使用了非标准扩展: 无名称的结构/联合

1>sysPrintTest.c(30): warning C4201: 使用了非标准扩展: 无名称的结构/联合

1>sysPrintTest.c(52): warning C4100: “driver”: 未引用的形参

1>sysPrintTest.c(64): error C4235: 使用了非标准扩展: 不支持在此结构上使用“__asm”关键字

1>sysPrintTest.c(64): error C2143: 语法错误: 缺少“;”(在“常量”的前面)

1>sysPrintTest.c(64): warning C4091: “ ”: 没有声明变量时忽略“int”的左侧

========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========


2017-2-22 21:12
0
雪    币: 22
活跃值: (111)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
3
微醺的上集 为什么我有时能生成成功,过一会再生成会报错1&gt;------ 已启动生成: 项目: 1sysPrintTest, 配置: Debug x64 ------1&gt; &nb ...
1>sysPrintTest.c(64):  error  C4235:  使用了非标准扩展:  不支持在此结构上使用“__asm”关键字
你的错误主要是这个,剩下的哪个是衍生的,百度一下有解决办法
2017-2-23 21:51
1
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
RedOrange 1>sysPrintTest.c(64): error C4235: 使用了非标准扩展: 不支持在此结构上使用“__asm”关键字 你的错误主要是这个,剩下的哪个是衍生的,百度一下有解决办法
知道了,x64不支持内联汇编
2017-2-23 22:28
0
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
5
Mark
2017-2-26 22:10
0
雪    币: 1402
活跃值: (351)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
收藏。不知道怎么修改VS的编译模版  每次修改还是有点麻烦
2017-4-21 15:10
0
雪    币: 30
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
感谢,我也编译安装成功了
2017-4-27 19:17
0
雪    币: 51
活跃值: (11)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
  fatal  error  C1083:  无法打开包括文件:  “C:\Program  Files  (x86)\Windows  Kits\10\Include\10.0.15063.0\shared\warning.h”:  No  such  file  or  directory
这个错误是什么原因啊?
2017-5-21 13:35
0
雪    币: 224
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
同问楼上
2017-6-28 11:08
0
雪    币: 1234
活跃值: (1666)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
ONDragon fatal error C1083: 无法打开包括文件: “C:\Program Files (x86)\Windows Kits\10\Include\10.0.15063.0\shared\wa ...
warning.h”:    No    such    file    or    directory这个错误是什么原因啊?
这个是你安装的windows  SDK10    安装的时候肯定没有全选安装,把后面那些手机的开发勾选去掉了。导致include里面安装不全。你安装SDK10的时候全部勾选完全安装就解决了。
2017-9-24 01:34
0
雪    币: 912
活跃值: (2599)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
warning.h这个我也遇到,去C盘搜warning.h拷进WDK的SDK文件夹就行
2017-9-24 08:53
0
雪    币: 1617
活跃值: (5208)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
谢谢分享,正用到
2017-12-13 11:47
0
雪    币: 284
活跃值: (3824)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
13
下载vs2015,安装vs2015,下载wdk10,安装wdk10,需要多长时间多大空间和对运行速度的忍耐力?
下载安装  wdk7.1,命令行里  bld  回车(此处不需要任何配置,没有搭建环境这种鬼玩意),用多长时间多大空间?
是时间不值钱、硬盘大了什么垃圾都往里扔,还是coder变XX了?以前有个段子是微软把程序员变成白痴。
wdk命令行编译是“古老的”技术,那么米饭和小麦是远古的食物了吧,不如创新一下去吃10?
2017-12-13 13:48
0
雪    币: 33
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
下载个ewdk的wdk  1703即可,里面有所有文件,我的是EnterpriseWDK_rs2_release_15063_20170317-1834\Program  Files\Windows  Kits\10目录下的文件覆盖C:\Program  Files  (x86)\Windows  Kits\10,即可正常编译。
2018-4-12 17:16
0
雪    币: 545
活跃值: (257)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
15
mark
2018-4-13 19:48
0
雪    币:
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
麻烦问一下,用的您的示例代码和示例配置,使用的vs2015,wdk10.14393编译的。在windows7  x64操作系统上面使用sc  create-->>  net  start  就直接蓝屏了。实在是一头雾水,不知道从哪里入手去解决这个问题,恳请给予提示。
2018-4-24 21:29
0
游客
登录 | 注册 方可回帖
返回