您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 网络空间安全技术实践教程-11.1课件
网络空间安全技术实践教程第三篇网络安全理论与技术实验篇第十一章操作系统安全编程实验11.1WDK的安装调试网络空间安全技术实践教程211.1WDK的安装调试实验目的:本实验要求在Windows下安装WDK,并且搭建驱动程序的调试环境,编译出第一个运行在Windows内核中的驱动程序。网络空间安全技术实践教程311.1WDK的安装调试实验预备理论:(1)对于操作系统来说,什么是KernelMode,什么是UserMode?为了不让程序任意存取资源,大部分的CPU架构都支持Kernelmode与Usermode两种执行模式。当CPU运行于Kernelmode时,任务可以执行特权级指令,对任何I/O设备有全部的访问权,还能够访问任何虚拟地址和控制虚拟内存硬件;这种模式对应x86的ring0层,操作系统的核心部分,包括设备驱动程序都运行在该模式。当CPU运行于UserMode时,硬件防止特权指令的执行,并对内存和I/O空间的访问操作进行检查,如果运行的代码不能通过操作系统的某种门机制,就不能进入内核模式;这种模式对应于x86的ring3层,操作系统的用户接口部分以及所有的用户应用程序都运行在该级别。网络空间安全技术实践教程411.1WDK的安装调试实验预备理论:(2)驱动程序是什么?Windows驱动有几种类型(例如NT/WDM等)?它一般运行在哪个Mode上?驱动程序是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口,操作系统只能通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。Windows驱动程序分为两类,一类是不支持即插即用功能的NT式的驱动程序;另一类是支持即插即用功能的WDM式的驱动程序。他们都运行于kernelmode。(3)Win32API是什么?x86是什么意思?x64又是什么意思?win32API是指微软32位平台的应用编程接口。X86通常是指32位计算机系统。X64通常指64位计算机系统。网络空间安全技术实践教程511.1WDK的安装调试实验预备理论:(1)对于操作系统来说,什么是KernelMode,什么是UserMode?为了不让程序任意存取资源,大部分的CPU架构都支持Kernelmode与Usermode两种执行模式。当CPU运行于Kernelmode时,任务可以执行特权级指令,对任何I/O设备有全部的访问权,还能够访问任何虚拟地址和控制虚拟内存硬件;这种模式对应x86的ring0层,操作系统的核心部分,包括设备驱动程序都运行在该模式。当CPU运行于UserMode时,硬件防止特权指令的执行,并对内存和I/O空间的访问操作进行检查,如果运行的代码不能通过操作系统的某种门机制,就不能进入内核模式;这种模式对应于x86的ring3层,操作系统的用户接口部分以及所有的用户应用程序都运行在该级别。网络空间安全技术实践教程611.1WDK的安装调试实验要点说明:(实验难点说明)安装WDK编译NT驱动中的HelloWorld!调试环境的配置网络空间安全技术实践教程711.1WDK的安装调试实验准备:(实验环境,实验先有知识技术说明)Host机:装有WDKVersion7.1.0的Win7x64位操作系统(或装有WDKVersion10.0.14393.0的Win10x64位操作系统)WinDbg6.12.0002.633网络空间安全技术实践教程811.1WDK的安装调试实验准备:(实验环境,实验先有知识技术说明)虚拟机:装有WDKVersion7600.16385.1的Windows7x64操作系统DriverMonitorVersion3.2.0DbgViewVersion4.76driversignatureenforcementoverriderVersion1.3b网络空间安全技术实践教程911.1WDK的安装调试实验步骤: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所示。网络空间安全技术实践教程1011.1WDK的安装调试实验步骤:2)第一个驱动程序的编译(1)新建DriverEntry.c文件在安装WDK之后,我们就可以开始编译驱动了。我们先在一个目录下新建一个文件DriverEntry.c,内容如下:#includentddk.hvoidDriverUnload(PDRIVER_OBJECTdriver){//Donothing...}NTSTATUSDriverEntry(PDRIVER_OBJECTdriver,PUNICODE_STRINGreg_path){DbgPrint(Hello,World!);driver-DriverUnload=DriverUnload;returnSTATUS_SUCCESS;}网络空间安全技术实践教程1111.1WDK的安装调试实验步骤:2)第一个驱动程序的编译DriverEntry是每个内核模块的入口,在加载这个模块时被系统进程System调用一次。DriverEntry好比控制台的main函数,它的两个参数类型为:PDRIVER_OBJECT和PUNICODE_STRING。对于前者,PDRIVER_OBJECT是时DRIVER_OBJECT结构的结构体指针,PDRIVER_OBJECT结构体中有一个重要的成员DriverUnload,它代表卸载该驱动程序的函数指针。我们设置了DriverUnload的函数指针,这样这个模块可以被动态地卸载,如果没有设置,那么我们的驱动程序一旦加载就不能卸载了。NTSTATUS被定义为32位的无符号长整型。在驱动程序开发中,人们习惯用NTSTATUS返回状态。其中0~0X7FFFFFFF被认为是正确的状态,而0X80000000~0XFFFFFFFF被认为是错误的状态。我们通常用NT_SUCCESS这个宏来判定函数返回的状态是否正确。网络空间安全技术实践教程1211.1WDK的安装调试实验步骤:2)第一个驱动程序的编译PUNICODE_STRING是UNICODE_STRING的结构体指针。UNICODE_STRING在内核中是一个最基础的结构,其结构体如下:typedefstruct_UNICODE_STRING{USHORTLength;USHORTMaximumLength;PWSTRBuffer;}UNICODE_STRING,*PUNICODE_STRING;Buffer为字符串指针,Length成员表示字符串的当前长度,MaximumLength成员表示该字符串允许的最大长度。这样的设计虽然占用空间,但是保证了字符操作的安全性。请注意,在Buffer成员不一定以\0结尾,这一点在文件系统的缓冲路径中尤其明显。PUNICODE_STRINGreg_path表示该驱动的注册路径,详情大家可以自行查询。网络空间安全技术实践教程1311.1WDK的安装调试实验步骤:2)第一个驱动程序的编译(2)新建makefile文件下面我们在DriverEntry.c的同一目录下新建makefile文件,内容为:!INCLUDE$(NTMAKEENV)\makefile.def保存即可。网络空间安全技术实践教程1411.1WDK的安装调试实验步骤:2)第一个驱动程序的编译(3)新建sources文件在同一目录下创建sources文件,内容为:TARGETNAME=HELLOWORLDTARGETTYPE=DRIVERSOURCES=DriverEntry.cTARGETNAME代表你输出的驱动名称,TARGETTYPE代表目标文件输出类型,SOURCES代表要编译的文件。如果有多个文件需要编译,请使用\依次表示,如:TARGETNAME=HELLOWORLDTARGETTYPE=DRIVERSOURCES=DriverEntry.c\Foo.c\Bar.c网络空间安全技术实践教程1511.1WDK的安装调试实验步骤:2)第一个驱动程序的编译(4)编译驱动文件编译程序时,首先要确定以上三个文件在同一路径中,如图11-1-4所示。选择WDK菜单目录中的Win7x64CheckedBuildEnvironment程序,如图11-1-5所示。需要注意的是,这里不要选择FreeBuildEnvironment,因为Free版驱动会抹去DbgPrint之类的调试输出语句。通过cd命令将当前的目录转为我们自己的工程目录中,输入BLD命令(如图11-1-6所示),即可编译驱动,驱动编译成功,得到最终的驱动文件HELLOWORLD.SYS。网络空间安全技术实践教程1611.1WDK的安装调试实验步骤:3)驱动的安装以及观察调试信息先从网上下载DriverMonitor工具(或者是同类软件)及DbgView工具。前者负责加载、卸载驱动,后者用来观察调试信息。我们的驱动适用于64位Windows7系统,并且强烈建议您在虚拟机中安装64位Windows7下进行测试,因为驱动程序一旦出错,不像应用程序编程一样只会弹一个错误对话框,绝大部分情况下会直接蓝屏。网络空间安全技术实践教程1711.1WDK的安装调试实验步骤:3)驱动的安装以及观察调试信息(1)系统中导入注册表文件(reg)为了使得DbgView可以查看调试信息,我们先要导入一个reg文件,文件内容如下:WindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\DebugPrintFilter]DEFAULT=dword:0000000f导入成功后,重新启动电脑。网络空间安全技术实践教程1811.1WDK的安装调试实验步骤:3)驱动的安装以及观察调试信息(2)安装配置DbgView安装完成DbgView工具后,打开DbgView,确保DbgView工具打开CaptureKernel(监视核心),如下图11-1-7所示。网络空间安全技术实践教程1911.1WDK的安装调试实验步骤:3)驱动的安装以及观察调试信息(3)安装配置SignDrv工具并对驱动签名在64位操作系统下,驱动程序的加载需要签名,所以我们这里使用SignDrv工具对我们的驱动程序进行本地签名(此签名只对本机系统有效,用作本地开发调试所用),使之我们的驱动能被系统加载。在管理员权限下打开此工具,如图11-1-8所示。一路next,先选择EnableTestMode,选择Next,重新启动电脑。如果计算机右下角发现了水印,则说明系统已进入测试模式(可以加载驱动)。再打开此工具,选择SignaSystemFile,选择我们自己的驱动程序加载签名。网络空间安全技术实践教程2011.1WDK的安装调试实验步骤:3)驱动的安装以及观察调试信息(4)安装配置DriverMonitor工具并启动、卸载驱动程序接着,使用DriverMonitor工具,选择FileOpenDriver后,打开自己的驱动程序,接着选择FileStartDriver启动驱动,观察DbgView下的调试输出语句,最后选择FileStopDriver卸载驱动以及选择FileRemoveServiceEntry做最后的清理工作。网络空间安全技术实践教程2111.1WDK的安装调试实验步骤:4)双机动态调试驱动动态调试驱动比较麻烦,这里介绍一个相对通用的调试方法——双机调试驱动。(1)下载安装配置WinDbg工具WDK工具包中已经有了WinDbg,点击开始菜单-WindowsKits-WinDbg运行Wi
本文标题:网络空间安全技术实践教程-11.1课件
链接地址:https://www.777doc.com/doc-1743792 .html