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

测试vs2015+wdk10编译WDM驱动

2017-2-20 11:52
21424

0x00.前言

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

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

·搭建编译环境

·设置编译选项

·测试项目

0x01.搭建编译环境

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

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

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


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

http://blog.csdn.net/coc_k/article/details/52034927

这篇文章写得很详细


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.多看一些新的教材,老的教材就直接放弃吧,推荐以下教程:

http://www.vbasm.com/thread-7971-1-1.html

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

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

额外推荐阅读:

http://www.mycode.net.cn/language/cpp/1771.html

http://www.m5home.com/bbs/thread-8905-1-1.html


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 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
活跃值: (341)
能力值: ( 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
雪    币: 1235
活跃值: (1330)
能力值: ( 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
雪    币: 739
活跃值: (2304)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
warning.h这个我也遇到,去C盘搜warning.h拷进WDK的SDK文件夹就行
2017-9-24 08:53
0
雪    币: 688
活跃值: (3747)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
谢谢分享,正用到
2017-12-13 11:47
0
雪    币: 284
活跃值: (3554)
能力值: ( 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
活跃值: (247)
能力值: ( 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
游客
登录 | 注册 方可回帖
返回
//