1、网络空间安全技术实践教程,吕秋云,王小军,胡耿然,汪云路,王秋华 西安电子科技大学出版社,第三篇 网络安全理论与技术实验篇,第十一章 操作系统安全编程实验 11.1 WDK的安装调试,网络空间安全技术实践教程,2,11.1 WDK的安装调试,实验目的: 本实验要求在Windows下安装WDK,并且搭建驱动程序的调试环境,编译出第一个运行在Windows内核中的驱动程序。,网络空间安全技术实践教程,3,11.1 WDK的安装调试,实验预备理论: (1)对于操作系统来说,什么是Kernel Mode,什么是User Mode? 为了不让程序任意存取资源,大部分的CPU架构都支持Kernel mode与User mode两种执行模式。当CPU运行于Kernel mode时,任务可以执行特权级指令,对任何I/O设备有全部的访问权,还能够访问任何虚拟地址和控制虚拟内存硬件;这种模式对应x86的ring0层,操作系统的核心部分,包括设备驱动程序都运行在该模式。当CPU运行于User Mode时,硬件防止特权指令的执行,并对内存和I/O空间的访问操作进行检查,如果运行的代码不能通过操作系统的某种门机
2、制,就不能进入内核模式;这种模式对应于x86的ring3层,操作系统的用户接口部分以及所有的用户应用程序都运行在该级别。,网络空间安全技术实践教程,4,11.1 WDK的安装调试,实验预备理论: (2)驱动程序是什么?Windows驱动有几种类型(例如NT/WDM等)?它一般运行在哪个Mode上? 驱动程序是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口,操作系统只能通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。Windows驱动程序分为两类,一类是不支持即插即用功能的NT式的驱动程序;另一类是支持即插即用功能的WDM式的驱动程序。他们都运行于kernel mode。 (3)Win32 API是什么?x86是什么意思?x64又是什么意思? win32 API 是指微软32位平台的应用编程接口。 X86通常是指32位计算机系统。X64通常指64位计算机系统。,网络空间安全技术实践教程,5,11.1 WDK的安装调试,实验预备理论: (1)对于操作系统来说,什么是Kernel Mode,什么是User Mode? 为了不让程序任意存取
3、资源,大部分的CPU架构都支持Kernel mode与User mode两种执行模式。当CPU运行于Kernel mode时,任务可以执行特权级指令,对任何I/O设备有全部的访问权,还能够访问任何虚拟地址和控制虚拟内存硬件;这种模式对应x86的ring0层,操作系统的核心部分,包括设备驱动程序都运行在该模式。当CPU运行于User Mode时,硬件防止特权指令的执行,并对内存和I/O空间的访问操作进行检查,如果运行的代码不能通过操作系统的某种门机制,就不能进入内核模式;这种模式对应于x86的ring3层,操作系统的用户接口部分以及所有的用户应用程序都运行在该级别。,网络空间安全技术实践教程,6,11.1 WDK的安装调试,实验要点说明:(实验难点说明) 安装WDK 编译NT驱动中的HelloWorld! 调试环境的配置,网络空间安全技术实践教程,7,11.1 WDK的安装调试,实验准备: (实验环境,实验先有知识技术说明) Host机:装有WDK Version 7.1.0的Win7 x64位操作系统(或装有WDK Version 10.0.14393.0的Win10 x64位操作系统
4、) WinDbg 6.12.0002.633,网络空间安全技术实践教程,8,11.1 WDK的安装调试,实验准备: (实验环境,实验先有知识技术说明) 虚拟机:装有WDK Version 7600.16385.1的Windows 7 x64操作系统 DriverMonitor Version 3.2.0 DbgView Version 4.76 driver signature enforcement overrider Version 1.3b,网络空间安全技术实践教程,9,11.1 WDK的安装调试,实验步骤: 1)为Host机和虚拟机安装WDK 下面以为host机的Win7系统安装WDK为例说明WDK安装步骤。虚拟机的Win7系统中也需要安装wdk,步骤一致,版本选7.6或8.1,可在Windows官网依据系统版本查找。 首先,利用百度搜索WDK,如图11-1-1所示,进入官网下载wdk工具包,如图11-1-2所示。 下载后打开安装包,开始安装WDK7后,按照安装提示点击“下一步”即可完成安装,如图11-1-3所示。,网络空间安全技术实践教程,10,11.1 WDK的安装调试,实
5、验步骤: 2)第一个驱动程序的编译 (1)新建DriverEntry.c文件 在安装WDK之后,我们就可以开始编译驱动了。我们先在一个目录下新建一个文件DriverEntry.c,内容如下: #include void DriverUnload(PDRIVER_OBJECT driver) /Do nothing. NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path) DbgPrint(“Hello, World!“); driver-DriverUnload = DriverUnload; return STATUS_SUCCESS; ,网络空间安全技术实践教程,11,11.1 WDK的安装调试,实验步骤: 2)第一个驱动程序的编译 DriverEntry是每个内核模块的入口,在加载这个模块时被系统进程System调用一次。DriverEntry好比控制台的main函数,它的两个参数类型为:PDRIVER_OBJECT和PUNICODE_STRING。对于前者,PDRIVER_OBJECT是时DRI
6、VER_OBJECT结构的结构体指针,PDRIVER_OBJECT结构体中有一个重要的成员DriverUnload,它代表卸载该驱动程序的函数指针。我们设置了DriverUnload的函数指针,这样这个模块可以被动态地卸载,如果没有设置,那么我们的驱动程序一旦加载就不能卸载了。 NTSTATUS被定义为32位的无符号长整型。在驱动程序开发中,人们习惯用NTSTATUS返回状态。其中00X7FFFFFFF被认为是正确的状态,而0X800000000XFFFFFFFF被认为是错误的状态。我们通常用NT_SUCCESS这个宏来判定函数返回的状态是否正确。,网络空间安全技术实践教程,12,11.1 WDK的安装调试,实验步骤: 2)第一个驱动程序的编译 PUNICODE_STRING是UNICODE_STRING的结构体指针。UNICODE_STRING在内核中是一个最基础的结构,其结构体如下: typedef struct _UNICODE_STRING USHORT Length; USHORT MaximumLength; PWSTR Buffer; UNICODE_STRING ,*P
7、UNICODE_STRING; Buffer为字符串指针,Length成员表示字符串的当前长度,MaximumLength成员表示该字符串允许的最大长度。这样的设计虽然占用空间,但是保证了字符操作的安全性。请注意,在Buffer成员不一定以0结尾,这一点在文件系统的缓冲路径中尤其明显。PUNICODE_STRING reg_path表示该驱动的注册路径,详情大家可以自行查询。,网络空间安全技术实践教程,13,11.1 WDK的安装调试,实验步骤: 2)第一个驱动程序的编译 (2)新建makefile文件 下面我们在DriverEntry.c的同一目录下新建makefile文件,内容为: !INCLUDE $(NTMAKEENV)makefile.def 保存即可。,网络空间安全技术实践教程,14,11.1 WDK的安装调试,实验步骤: 2)第一个驱动程序的编译 (3)新建sources文件 在同一目录下创建sources文件,内容为: TARGETNAME=HELLOWORLD TARGETTYPE=DRIVER SOURCES=DriverEntry.c TARGETNAME代表你输
8、出的驱动名称,TARGETTYPE代表目标文件输出类型,SOURCES代表要编译的文件。如果有多个文件需要编译,请使用 依次表示,如: TARGETNAME=HELLOWORLD TARGETTYPE=DRIVER SOURCES=DriverEntry.c Foo.c Bar.c,网络空间安全技术实践教程,15,11.1 WDK的安装调试,实验步骤: 2)第一个驱动程序的编译 (4)编译驱动文件 编译程序时,首先要确定以上三个文件在同一路径中,如图11-1-4所示。选择WDK菜单目录中的Win7 x64 Checked Build Environment程序,如图11-1-5所示。需要注意的是,这里不要选择Free Build Environment,因为Free版驱动会抹去DbgPrint之类的调试输出语句。 通过cd命令将当前的目录转为我们自己的工程目录中,输入BLD命令(如图11-1-6所示),即可编译驱动,驱动编译成功,得到最终的驱动文件HELLOWORLD.SYS。,网络空间安全技术实践教程,16,11.1 WDK的安装调试,实验步骤: 3)驱动的安装以及观察调试信息 先从
9、网上下载DriverMonitor工具(或者是同类软件)及DbgView工具。前者负责加载、卸载驱动,后者用来观察调试信息。我们的驱动适用于64位Windows 7系统,并且强烈建议您在虚拟机中安装64位Windows 7下进行测试,因为驱动程序一旦出错,不像应用程序编程一样只会弹一个错误对话框,绝大部分情况下会直接蓝屏。,网络空间安全技术实践教程,17,11.1 WDK的安装调试,实验步骤: 3)驱动的安装以及观察调试信息 (1)系统中导入注册表文件(reg) 为了使得DbgView可以查看调试信息,我们先要导入一个reg文件,文件内容如下: Windows Registry Editor Version 5.00 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerDebug Print Filter “DEFAULT“=dword:0000000f 导入成功后,重新启动电脑。,网络空间安全技术实践教程,18,11.1 WDK的安装调试,实验步骤: 3)驱动的安装以及观察调试信息 (2)安装配置DbgView 安装完成DbgView工具后,打开DbgView,确保DbgView工具打开Capture Kernel(监视核心),如下图11-1-7所示。,网络空间安全技术实践教程,19,11.1 WDK的安装调试,实验步骤: 3)驱动的安装以及观察调试信息 (3)安装配置SignDrv工具并对驱动签名 在64位操作系统下,驱动程序的加载需要签名,所以我们这里使用SignDrv工具对我们的驱动程序进行本地签名(此签名只对本机系统有效,用作本地开发调试所用),使之我们的驱动能被系统加载。 在管理员权限下打开此工具,如图11-1-8所示。一路next,先选择Enable Test Mode,选择Next,重新启动电脑。如果计算机右下角发现了水印,则说明系统已进入测试模式(可以加载驱动)。再打开此工具,选择Sign a System File,选择我们自己的驱动程序加载签名。,网络空间安全技术实践教程,20,11.1 WDK的安装调试,实验步骤: 3)驱动的安装以及观察调试信息 (4)安装配置DriverMonitor工具并启动、卸载驱动程
《(网络空间安全技术实践)11.1wdk的安装调试》由会员繁星分享,可在线阅读,更多相关《(网络空间安全技术实践)11.1wdk的安装调试》请在金锄头文库上搜索。