欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    麦洛克菲内核驱动开发第一课.ppt

    • 资源ID:5674027       资源大小:399.01KB        全文页数:34页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    麦洛克菲内核驱动开发第一课.ppt

    2012-03-03,麦洛克菲内核开发第一课,麦洛克菲,周扬荣,上课整体安排,周六,周日下午1点到6点地点:清华园宾馆旁边周三,周四晚上8点到10点辅导地点:回龙观地铁对面首开智慧社4楼1单元1204时间:3月3日到7月1日(中间清明和五一正常放假)手机调为震动交作业时间:每周五晚上意见反馈学员群:183948142邮箱:,麦洛克菲,提纲,测试试题串讲Hello world编译与运行驱动框架驱动是如何运行的驱动服务安装RING3与RING0通信RING3与RING0开发区别驱动API分类集合常见的驱动漏洞、缺陷问题的7大忠告调试(蓝屏DUMP分析,ring3与ring0联调)第一个驱动例子:进程创建监视,测试与基础,打印格式%c%wc%C%d%ld%i64d%D%L%s%ws%S%u%x%p%f%Z%wZ数据对齐系统内存布局程序内存布局位运算(数的表示与存储 补码/低位优先)C语言:0 x/0 u/l/ul/i64/ll/LL汇编:1aH/17O/12D/110B函数形参参数内存分配/堆/栈调用约定与栈帧、FPO优化(stdcall,cdecl,fastcall,thiscall,nakedcall)算法(确定原型,输入检查(严进宽出),边界考虑,出错处理,性能优化),麦洛克菲,麦洛克菲,努力方向,C语言(数据结构,操作系统,汇编,编译原理)UI界面(MFC/WTL)内核调试(WINDBG)(F1HELP文档)逆向(IDA/OLLYDBG),麦洛克菲,基础书籍推荐,C程序设计 谭浩强 清华大学出版社C语言入门经典英文版C语言编程精粹 姜静波等译 电子工业高质量C+/C编程指南 林锐 电子工业Effective C+侯捷译 华中科技大学出版社More Effective C+侯捷译 中国电力出版社程序员求职成功路 周扬荣 机械工业出版社汇编语言 王爽 清华大学出版社VC技术内幕深入浅出MFC,麦洛克菲,内核书籍推荐,Windows 2000设备驱动程序设计指南 Art Baker等著 施诺译 机械工业出版社寒江独钓:Windows内核安全编程 邵坚磊等著 电子工业出版社天书夜读:从汇编语言到Windows内核编程邵坚磊等著 电子工业 Windows驱动开发技术详解 张帆 电子工业出版社 Rootkits:Subverting the Windows Kernel GregHoglund等著C:WinDDK7600.16385.0srchttp:/http:/http:/http:/MSDN,麦洛克菲,Hello world,.c/.hSOURCES/MAKEFILE.DSP/.DSWEASYSYS/既有框架安装与运行虚拟机调试环境搭建,Sources文件:TARGETNAME=HelloDrv(DrvName)TARGETPATH=debugTARGETTYPE=DRIVERSOURCES=main.c other.cSources文件其它字段:C_DEFINES=$(C_DEFINES)DYOUR_DEFINESINCLUDES=$(INCLUDES);.incTARGETLIBS=$(TARGETLIBS)$(DDK_LIB_PATH)ndis.libPRECOMPILED_INCLUDE=precomp.hDRIVERTYPE=FSmakefile文件:!INCLUDE$(NTMAKEENV)makefile.def,虚拟机设置,创建一个com1串口XP BOOT.ini(com1可能为com2,取决于vmware这端的ID)multi(0)disk(0)rdisk(0)partition(1)WINDOWS=Microsoft Windows XP Professional-debug/debug/debugport=com1/baudrate=115200/fastdetectWIN7bcdedit/dbgsettings serial baudrate:115200 debugport:1bcdedit/copy current/d DebugEntrybcdedit/displayorder current d3d5f290-f64b-11de-a86d-aba3805c5629bcdedit/debug d3d5f290-f64b-11de-a86d-aba3805c5629 ONwindbg.exe-k com:port=.pipecom_1,baud=115200,pipe 符号设置:srv*d:symbols*http:/ManagerDebug Print Filter“DEFAULT”:REG_DWORD:0 xFFFFFFFF,麦洛克菲,驱动框架(1),HOOK函数,驱动框架(2),麦洛克菲,NT模型DriverEntry()(单线程环境)DispatchCreate()IRP_MJ_CREATEDispatchRead()IRP_MJ_READDispatchWrite()IRP_MJ_WRITEDispatchClose()IRP_MJ_CLOSE(FileObject引用为0)DispatchClean()IRP_MJ_CLEANUP(Handle引用为0)DispatchControl()IRP_MJ_DEVICE_CONTROLDriverUnload()(单线程环境)WDMWDMAddDevice()WDMPnp()应用框架Sfilter/MinifilterTDI/NDIS/WFPDISKPERFHOOK,写一个NTModelDrv,结构定义卸载例程分发函数(通用的,单独的)DriverEntry编译运行,麦洛克菲,麦洛克菲,IRP结构理解与操作(1),文件过滤驱动设备,文件卷设备,磁盘设备,IRP,驱动设备,IRP,麦洛克菲,IRP结构理解与操作(2),Irp-AssociatedIrp.SystemBufferIrp-IoStatus.StatusIrp-IoStatus.InformationIrp-UserBufferIrp-MdlAddressPIO_STACK_LOCATION irpStack;irpStack=IoGetCurrentIrpStackLocation(Irp);irpStack-Parameters.Read.LengthirpStack-Parameters.Read.ByteOffsetirpStack-Parameters.DeviceIoControl.IoControlCodeirpStack-Parameters.DeviceIoControl.InputBufferLengthirpStack-Parameters.DeviceIoControl.OutputBufferLengthirpStack-MajorFunctionirpStack-MinorFunctionirpStack-DeviceObjectirpStack-FileObject,麦洛克菲,驱动是如何运行的,A驱动:1创建一个服务(注册表)HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesSrvName启动GROUP与StartType决定了驱动加载的早晚StartType为0的比StartType为1的先启动。同一个StartType的,按照GroupOrder顺序来启动HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlGroupOrderList2对象管理器生成驱动对象(DriverObject),并传递给DriverEntry(),执行DriverEntry入口函数3创建控制设备对象4创建控制设备符号链接(RING3可见)5.如果是过滤驱动,创建过滤设备对象,绑定5注册分发函数6.其它初始化动作,麦洛克菲,驱动是如何运行的(2),B驱动与应用层交互CreateReadWriteDeviceIoControlCloseHOOK,麦洛克菲,驱动服务安装,安装:OpenSCManager()CreateService()/OpenService()StartService()卸载:OpenSCManager()ControlService()-SERVICE_CONTROL_STOPDeleteService(),麦洛克菲,RING3与RING0通信(IOCONTROL),METHOD_BUFFEREDpIrp-AssociatedIrp.SystemBuffer;METHOD_IN_DIRECT/METHOD_OUT_DIRECTpIrp-AssociatedIrp.SystemBuffer;pIrp-MdlAddress;METHOD_NEITHERstack-Parameters.DeviceIoControl.Type3InputBuffer;pIrp-UserBuffer;,RING3与RING0通信(DEVICE),DO_BUFFERED_IOpIrp-AssociatedIrp.SystemBuffer;DO_DIRECT_IOpIrp-MdlAddress;MmGetSystemAddressForMdlSafe 其它IO方式pIrp-UserBuffer;ProbeForWrite/ProbeForRead,麦洛克菲,RING3与RING0通信,HANDLE hDevice=CreateFile(.NTModelDrv,GENERIC_WRITE|GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);if(hDevice=INVALID_HANDLE_VALUE)return;CHAR bufRead1024=0;CHAR bufWrite1024=Hello,world;DWORD dwRead=0;DWORD dwWrite=0;ReadFile(hDevice,bufRead,1024,麦洛克菲,RING3与RING0开发区别(1),什么是RING0与RING3R0/R1/R2/R3X64:只剩下R0和R3虚拟技术:0/1/3模式(速度,兼容)0/3模式(稳定性)VT:根模式/-1(环的旁边),RING3与RING0开发区别(2),printf/scanf/fopen/fclose/fwrite/fread/malloc/free不能用sprintf/strlen/strcpy/wcslen/wcscpy/memcpy/memset可用NTSTATUS/NT_SUCCESS()STATUS_SUCCESSSTATUS_UNSUCCESSFULSTATUS_ACCESS_DENIEDSTATUS_INSUFFICIENT_RESOURCES内存分配:PagedPool/NonPagedPool/tag,RING3与RING0开发区别(3),API调用与中断级别,麦洛克菲,驱动在安全领域的应用?,1绑定与过滤 Sfilter/minifilter2HOOK SSDT X64怎么办?3.回调 CmRegisterCallback minifilter,麦洛克菲,驱动API分类集合,ExXxx()IoXxx()KeXxx()MmXxx()ObXxx()PsXxx()RtlXxx()ZwXxx()FltXxx()NdisXxx(),ExAllocatePoolWithTag()ExAcquireFastMutex ExGetPreviousModeIoCreateDeviceIoCreateSymbolicLinkIoGetCurrentIrpStackLocationIoAttachDeviceToDeviceStackIoAllocateIrpIoSetCompletionRoutineKeWaitForSingleObjectKeSetEventKeInitializeEvent,ObReferenceObjectByHandleObQueryNameStringPsGetCurrentProcessPsGetCurrentProcessIdPsCreateSystemThreadPsLookupProcessByProcessIdRtlZeroMemoryRtlInitUnicodeStringZwOpenKeyZwCreateFileZwOpenProcessZwQuerySystemInformationMmGetSystemRoutineAddressMmIsAddressValid,麦洛克菲,良好的驱动开发习惯,1.MmIsAddressValid函数不可靠2.一定要保证在try_execpt内完成对于用户态内存的任何操作 3.设备控制尽量使用BUFFERED IO4.使用内核校验器(verifier)和Fuzz工具测试驱动,麦洛克菲,驱动调试(1),*kb/|*/bl/bc/bd/bebp/bu/bm/bp/p eprocess bp/t ethread ba w4/r4/e1/i4/addrdb/dw/dd/dq/du/da/ds/dS(显示内存)ddu/ddp/dda/dpp/dpu/dpa/dqp/dqa/dqu(显示含有指针的内存)dds/dqs/dps(显示含有符号地址的内存)dt nt!_eprocess dt nt!_eprocess Addrkv/kb/kp(FPO).open-a crash!wmain+0 x33.reload/isymopt+40lm/lm n t/lm vm.dump/f.dump/m.dump/mf.dump/ma.crash,x nt!*显示匹配符号!process 0 0!process EPROCESS 7.process EPROCESS.thread ETHREAD!thread ETHREADenable_unicode 1 windbg.exe I(大写I)adplus.vbs-hang(或-crash)-p 1234(或-pn xyz.exe)-dbg WinDbg.exe-o d:dump,驱动调试(2),ssdt:dds poi(nt!KeServiceDescriptorTable)L200Shadow ssdt:启动notepad!process 0 0.process/p NOTEPAD eprocess.reloadx win32k!*uf win32k!NtUserGetForegroundWindow,驱动调试(3),BSOD关闭了无效的HANDLE在没有ObReferenceObject(pFileObject)的情况下ObDereferenceObject(pFileObject)引用NULL指针内存访问越界,BAD POOL HEADER 高中断级访问了缺页内存DRIVER_IRQL_NOT_LESS_OR_EQUAL!analyze vR0与R3联调,麦洛克菲,第一个驱动例子:进程创建监视,VOID ProcessCreateMon();VOID ThreadCreateMon();PsSetCreateThreadNotifyRoutinePsSetCreateProcessNotifyRoutine,麦洛克菲,练习与作业,实现char*strstr(const char*s1,const char*s2)默写一个NTModelDrv驱动,并实现R3与R0通信R3与R0联调改写NTModelDrv,促使其蓝屏发生,分析蓝屏思考如何将ProcWatch监控到的内容发送到R3来,

    注意事项

    本文(麦洛克菲内核驱动开发第一课.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开