版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三篇网络安全理论与技术实验篇第十一章操作系统安全编程实验11.1WDK的安装调试网络空间安全技术实践教程111.1WDK的安装调试实验目的:
本实验要求在Windows下安装WDK,并且搭建驱动程序的调试环境,编译出第一个运行在Windows内核中的驱动程序。网络空间安全技术实践教程211.1WDK的安装调试实验预备理论:(1)对于操作系统来说,什么是KernelMode,什么是UserMode?为了不让程序任意存取资源,大部分的CPU架构都支持Kernelmode与Usermode两种执行模式。当CPU运行于Kernelmode时,任务可以执行特权级指令,对任何I/O设备有全部的访问权,还能够访问任何虚拟地址和控制虚拟内存硬件;这种模式对应x86的ring0层,操作系统的核心部分,包括设备驱动程序都运行在该模式。当CPU运行于UserMode时,硬件防止特权指令的执行,并对内存和I/O空间的访问操作进行检查,如果运行的代码不能通过操作系统的某种门机制,就不能进入内核模式;这种模式对应于x86的ring3层,操作系统的用户接口部分以及所有的用户应用程序都运行在该级别。 网络空间安全技术实践教程311.1WDK的安装调试实验预备理论:(2)驱动程序是什么?Windows驱动有几种类型(例如NT/WDM等)?它一般运行在哪个Mode上?驱动程序是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口,操作系统只能通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。Windows驱动程序分为两类,一类是不支持即插即用功能的NT式的驱动程序;另一类是支持即插即用功能的WDM式的驱动程序。他们都运行于kernelmode。
(3)Win32API是什么?x86是什么意思?x64又是什么意思?win32API是指微软32位平台的应用编程接口。 X86通常是指32位计算机系统。X64通常指64位计算机系统。网络空间安全技术实践教程411.1WDK的安装调试实验预备理论:(1)对于操作系统来说,什么是KernelMode,什么是UserMode?为了不让程序任意存取资源,大部分的CPU架构都支持Kernelmode与Usermode两种执行模式。当CPU运行于Kernelmode时,任务可以执行特权级指令,对任何I/O设备有全部的访问权,还能够访问任何虚拟地址和控制虚拟内存硬件;这种模式对应x86的ring0层,操作系统的核心部分,包括设备驱动程序都运行在该模式。当CPU运行于UserMode时,硬件防止特权指令的执行,并对内存和I/O空间的访问操作进行检查,如果运行的代码不能通过操作系统的某种门机制,就不能进入内核模式;这种模式对应于x86的ring3层,操作系统的用户接口部分以及所有的用户应用程序都运行在该级别。 网络空间安全技术实践教程511.1WDK的安装调试实验要点说明:(实验难点说明)安装WDK编译NT驱动中的HelloWorld!调试环境的配置网络空间安全技术实践教程611.1WDK的安装调试实验准备:(实验环境,实验先有知识技术说明)Host机:装有WDKVersion7.1.0的Win7x64位操作系统(或装有WDKVersion10.0.14393.0的Win10x64位操作系统)WinDbg6.12.0002.633网络空间安全技术实践教程711.1WDK的安装调试实验准备:(实验环境,实验先有知识技术说明)虚拟机:装有WDKVersion7600.16385.1的Windows7x64操作系统DriverMonitorVersion3.2.0DbgViewVersion4.76driversignatureenforcementoverriderVersion1.3b
网络空间安全技术实践教程811.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所示。网络空间安全技术实践教程911.1WDK的安装调试实验步骤:2)第一个驱动程序的编译
(1)新建DriverEntry.c文件在安装WDK之后,我们就可以开始编译驱动了。我们先在一个目录下新建一个文件DriverEntry.c,内容如下:#include<ntddk.h>voidDriverUnload(PDRIVER_OBJECTdriver){//Donothing...}NTSTATUSDriverEntry(PDRIVER_OBJECTdriver,PUNICODE_STRINGreg_path){ DbgPrint("Hello,World!"); driver->DriverUnload=DriverUnload; returnSTATUS_SUCCESS;}网络空间安全技术实践教程1011.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这个宏来判定函数返回的状态是否正确。网络空间安全技术实践教程1111.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表示该驱动的注册路径,详情大家可以自行查询。网络空间安全技术实践教程1211.1WDK的安装调试实验步骤:2)第一个驱动程序的编译(2)新建makefile文件下面我们在DriverEntry.c的同一目录下新建makefile文件,内容为:!INCLUDE$(NTMAKEENV)\makefile.def保存即可。网络空间安全技术实践教程1311.1WDK的安装调试实验步骤:2)第一个驱动程序的编译(3)新建sources文件在同一目录下创建sources文件,内容为:TARGETNAME=HELLOWORLDTARGETTYPE=DRIVERSOURCES=DriverEntry.cTARGETNAME代表你输出的驱动名称,TARGETTYPE代表目标文件输出类型,SOURCES代表要编译的文件。如果有多个文件需要编译,请使用\依次表示,如:TARGETNAME=HELLOWORLDTARGETTYPE=DRIVERSOURCES=DriverEntry.c\
Foo.c\
Bar.c网络空间安全技术实践教程1411.1WDK的安装调试实验步骤:2)第一个驱动程序的编译(4)编译驱动文件编译程序时,首先要确定以上三个文件在同一路径中,如图11-1-4所示。选择WDK菜单目录中的Win7x64CheckedBuildEnvironment程序,如图11-1-5所示。需要注意的是,这里不要选择FreeBuildEnvironment,因为Free版驱动会抹去DbgPrint之类的调试输出语句。通过cd命令将当前的目录转为我们自己的工程目录中,输入BLD命令(如图11-1-6所示),即可编译驱动,驱动编译成功,得到最终的驱动文件HELLOWORLD.SYS。网络空间安全技术实践教程1511.1WDK的安装调试实验步骤:3)驱动的安装以及观察调试信息先从网上下载DriverMonitor工具(或者是同类软件)及DbgView工具。前者负责加载、卸载驱动,后者用来观察调试信息。我们的驱动适用于64位Windows7系统,并且强烈建议您在虚拟机中安装64位Windows7下进行测试,因为驱动程序一旦出错,不像应用程序编程一样只会弹一个错误对话框,绝大部分情况下会直接蓝屏。网络空间安全技术实践教程1611.1WDK的安装调试实验步骤:3)驱动的安装以及观察调试信息
(1)系统中导入注册表文件(reg)为了使得DbgView可以查看调试信息,我们先要导入一个reg文件,文件内容如下:
WindowsRegistryEditorVersion5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\DebugPrintFilter]
"DEFAULT"=dword:0000000f导入成功后,重新启动电脑。网络空间安全技术实践教程1711.1WDK的安装调试实验步骤:3)驱动的安装以及观察调试信息
(2)安装配置DbgView安装完成DbgView工具后,打开DbgView,确保DbgView工具打开CaptureKernel(监视核心),如下图11-1-7所示。网络空间安全技术实践教程1811.1WDK的安装调试实验步骤:3)驱动的安装以及观察调试信息
(3)安装配置SignDrv工具并对驱动签名在64位操作系统下,驱动程序的加载需要签名,所以我们这里使用SignDrv工具对我们的驱动程序进行本地签名(此签名只对本机系统有效,用作本地开发调试所用),使之我们的驱动能被系统加载。在管理员权限下打开此工具,如图11-1-8所示。一路next,先选择EnableTestMode,选择Next,重新启动电脑。如果计算机右下角发现了水印,则说明系统已进入测试模式(可以加载驱动)。再打开此工具,选择SignaSystemFile,选择我们自己的驱动程序加载签名。网络空间安全技术实践教程1911.1WDK的安装调试实验步骤:3)驱动的安装以及观察调试信息
(4)安装配置DriverMonitor工具并启动、卸载驱动程序
接着,使用DriverMonitor工具,选择File>OpenDriver后,打开自己的驱动程序,接着选择File>StartDriver启动驱动,观察DbgView下的调试输出语句,最后选择File>StopDriver卸载驱动以及选择File>RemoveServiceEntry做最后的清理工作。网络空间安全技术实践教程2011.1WDK的安装调试实验步骤:4)双机动态调试驱动动态调试驱动比较麻烦,这里介绍一个相对通用的调试方法——双机调试驱动。(1)下载安装配置WinDbg工具WDK工具包中已经有了WinDbg,点击开始菜单->WindowsKits->WinDbg运行WinDbg(注意此时host机,虚拟机中都已安装好WDK而安装好的WDK中可以看到WinDbg界面),如下图11-1-9所示。网络空间安全技术实践教程2111.1WDK的安装调试实验步骤:4)双机动态调试驱动(2)配置VMware管道虚拟串口调试机与被调试机用串口连接,但是在被调试机是虚拟机的情况下,就不可能用真正的串口来连接了,但是可以在虚拟机上生成一个用管道虚拟的串口。设置步骤如下:1>、虚拟机关闭状态下,选择编辑虚拟机设置。2>、选择硬件选项卡,移除打印机,因为打印机占了一个串口,如果不删除则需要使用COM_2作为命名管道。网络空间安全技术实践教程2211.1WDK的安装调试实验步骤:4)双机动态调试驱动3>、添加一个串行端口。在图11-1-11中,点击添加按钮,在弹出窗口,选择串行端口,单击”下一步“按钮,进入如图11-1-12所示界面。接着,在图11-1-13中,选择输出到命名管道,单击“下一步”按钮,进入如图11-1-14所示界面。网络空间安全技术实践教程2311.1WDK的安装调试实验步骤:4)双机动态调试驱动在图11-1-14中,设置如下:命名管道输入:\\.\pipe\com_1该端是服务器。另一端是应用程序。勾上启动时连接。单击“完成”按钮。回到图11-1-15最初界面,勾选I/O模式,轮询时主动放弃CPU(Y),点击“确定”按钮。网络空间安全技术实践教程2411.1WDK的安装调试实验步骤:4)双机动态调试驱动
(3)配置GuestOS的启动项开启虚拟机,进入系统,配置GuestOSWin7系统的启动项,具体配置步骤如下:1>、以管理员身份运行cmd。2>、键入bcdedit命令,查看当前启动项,输出如下:刚刚安装的,一般只有一个标识为{current}的启动加载器是当前的启动配置。3>、建立一个新的启动项。bcdedit/copy{current}/d"Windwos7"网络空间安全技术实践教程2511.1WDK的安装调试实验步骤:4)双机动态调试驱动
4>、设置新的启动项。bcdedit/debugONbcdedit/bootdebugON5>、查看当前的调试配置:bcdedit/dbgsettings一般来说,会显示出使用的第一个串口,波特率为115200bps,和期望的一致,不需要修改。6>、选择菜单的超时,我设置为10秒:bcdedit/timeout107>、重新启动,当需要调试时就用调试模式进入。网络空间安全技术实践教程2611.1WDK的安装调试实验步骤:4)双机动态调试驱动
(4)配置WinDbgWinDbg安装在host上,下载安装与调试机位数相同的WinDbg,然后对WinDbg配置,具体步骤如下:1>、设置调试机上WinDbg的启动参数,使之连接一个管道,并把这个管道当作一个串口来处理,具体有2种方法:方法一:cmd窗口中,在windbg.exe所在路径下执行,windbg.exe-b-kcom:port=\\.\pipe\com_1,baud=115200,pipe。如图11-1-23和11-1-24所示。首先在命令行下输入cdC:\ProgramFiles(x86)\DebuggingToolsforWindows(x86);然后再输入Windbg.exe-b-kcom:port=\\.\pipe\com_1,baud=115200,pipe即可。网络空间安全技术实践教程2711.1WDK的安装调试实验步骤:4)双机动态调试驱动方法二:在开始->程序->选择WinDbg,单击右键并选择属性如图11-1-25所示,进入如图11-1-26所示界面,在快捷方式属性页中,进入“目标”中的".....windbg.exe"后面增加前面的启动参数,即在右侧双引号后面添加一个空格和参数-b–kcom:port=\\.\pipe\com_1,baud=115200,pipe,结果如图11-1-27所示。注意:windbg.exe的全路径一般是双引号引住的,但是后面的命令行参数应该放在引号外。同时为避免每次重复都配置,将WinDbg添加至桌面快捷方式,如图11-1-28所示。点击运行WinDbg的快捷方式,得到如图11-1-29所示界面。网络空间安全技术实践教程2811.1WDK的安装调试实验步骤:4)双机动态调试驱动
2>、为了能实现源代码调试,必须设置符号文件路径和源文件路径。
符号文件路径(SymbolFilePath)可以有多个,中间用分号分隔。WinDbg有一个强大的功能,可以自动到Microsoft的服务器上下载符号文件。可以在WinDbg界面file选项中找到设置“符号文件路径”,在符号路径下做设置,如图11-1-30所示。在图11-1-30中,路径srv*c:\symbols*/download/symbols中c:\symbols为本地目录,从服务器下载的符号会存储在此目录中,你可以设置为你想存放的目录中。/download/symbols为服务器路径。如果相关符号表没有在本地目录系找到的话,就会自动在指定的服务器下载。分号后面添加自定义驱动模块的符号文件的路径,设置要调试的源码所在路径即可。网络空间安全技术实践教程2911.1WDK的安装调试实验步骤:4)双机动态调试驱动等上述配置完成后,重新启动虚拟机,在开机的Boot选项上选择调试模式,打开上述WinDbg的快捷方式,如果出现如图11-1-31的文字,则说明您的双机调试终于配置成功了!如果看到WinDbg出现如下文字:nt!RtlpBreakWithStatusInstruction:fffff800`03e8c490ccint3请不要惊慌,int3表示一个软件断点中断,我们输入命令g即可让虚拟机中的系统继续运作。g命令即是运行网络空间安全技术实践教程3011.1WDK的安装调试实验步骤:4)双机动态调试驱动
(5)利用WinDbg调试驱动HELLOWORLD.sys接着,我们来讲述一下如何用Windbg调试我们的驱动——以我们的HELLOWORLD.sys驱动为例子。比如我们想跟踪一下DriverEntry这个函数,我们加入DbgBreakPoint()这个断点函数,如下所示:DbgPrint("Hello,World!");DbgBreakPoint();driver->DriverUnload=DriverUnload;网络空间安全技术实践教程3111.1WDK的安装调试实验步骤:4)双机动态调试驱动
编译驱动。接着在Windbg的File>SymbolSearchPath中填入srv*C:\symbols*/download/symbols;C:\Users\admin\Desktop\Driver\objchk_win7_amd64(为您的驱动编译路径)。如果是第一次操作,此时可能要等待一会Windbg下载一些符号表。接着,在File>SourceSearchPath中填入自己的源文件路径,如C:\Users\admin\Desktop\Driver。上述操作完成后,我们在主机中的WinDbg命令输入kd>后面输入g,运行我们的驱动程序,在运行的瞬间虚拟机会停止响应(实际上是进入到了int3断点中)。我们可以看到Windbg界面发生了变化,显示以下代码信息,如下图11-1-32。网络空间安全技术实践教程3211.1WDK的安装调试实验步骤:4)双机动态调试驱动
(6)利用WinDbg查看驱动HELLOWORLD.sys运行时寄存器相关信息如果我们要查看当前的寄存器,在图11-1-32的最下方的WinDbg命令行输入框中,输入命令。在windbg命令行输入r命令:0:kd>rrax=0000000000000000rbx=fffffa8001b98cb0rcx=2799464012740000rdx=000000000000000drsi=fffffa8002157000rdi=000000000000000drip=fffff88002f6803arsp=fffff880045da830rbp=0000000000000000r8=0000000000000065r9=0000000000000003r10=0000000000000000r11=fffff880045da450r12=0000000000000001r13=ffffffff80000648r14=fffffa80020f17e0r15=000000000000001ciopl=0nvupeingnznaponccs=0010ss=0018ds=002bes=002bfs=0053gs=002befl=00000286网络空间安全技术实践教程3311.1WDK的安装调试实验步骤:4)双机动态调试驱动
(6)利用WinDbg查看驱动HELLOWORLD.sys运行时结构体相关信息如果我们要查看某一个结构体的结果,可以使用dt命令,如下:0:kd>dtPDRIVER_OBJECTHE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026人才招聘行业市场深度调研及发展趋势与投资前景预测研究报告
- 2027届四川省绵阳涪城区物理九年级第一学期期末学业水平测试试题含解析
- 菏泽市2027届九上物理期末经典试题含解析
- 2026全民健身背景下运动损伤防护产品市场增长潜力评估报告
- 2026人工智能伦理治理体系完善研究及全球科技伦理对话机制建立探讨笔记
- 2026氢能源产业市场供需概况及投资方向评估研究报告
- 后浇带施工安全监理实施细则
- 钢结构除锈防腐现场安全作业操作规程
- 物业绿化设备台账管理制度
- 大学英语四级高频词汇培训
- 2024届安徽省普通高校分类考试招生和对口招生文化素质语文模拟检测试题(含答案)
- (正式版)JB∕T 14732-2024 中碳和中碳合金钢滚珠丝杠热处理技术要求
- 2024年滨州传媒集团有限公司招聘笔试冲刺题(带答案解析)
- 2024年重点高中自主招生物理试题含答案
- DL-T-5161.13-2018电气装置安装工程质量检验及评定规程第13部分:电力变流设备施工质量检验
- 护士实习:护士职业规划与发展路径
- UG NX 12.0三维建模及自动编程项目教程 课件 任务1.9虎钳零件建模及工程图制作
- 2023年昆山市档案局公开招聘1名公益性岗位工作人员(共500题含答案解析)笔试历年难、易错考点试题含答案附详解
- 公安局xx派出所业务用房建设可行性论证报告
- TDZJN 84-2022 饮用水处理装置用隔膜增压泵
- 药物临床试验质量检查记录表
评论
0/150
提交评论