资源预览内容
第1页 / 共34页
第2页 / 共34页
第3页 / 共34页
第4页 / 共34页
第5页 / 共34页
第6页 / 共34页
第7页 / 共34页
第8页 / 共34页
第9页 / 共34页
第10页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
麦洛克菲内核开发第一课麦洛克菲 www.mallocfree.com周扬荣上课整体安排n周六,周日下午1点到6点q地点:清华园宾馆旁边n周三,周四晚上8点到10点辅导n时间:3月3日到7月1日(中间清明和五一正常放假)n手机调为震动n交作业时间:每周五晚上n意见反馈q学员群:183948142q邮箱:10950150qq.com麦洛克菲www.mallocfree.com提纲n测试试题串讲nHello world编译与运行n驱动框架n驱动是如何运行的n驱动服务安装nRING3与RING0通信nRING3与RING0开发区别n驱动API分类集合n常见的驱动漏洞、缺陷问题的7大忠告n调试(蓝屏DUMP分析,ring3与ring0联调)n第一个驱动例子:进程创建监视测试与基础n打印格式q%c %wc%C %d%ld %i64d%D%Lq%s %ws%S %u%x%p %f %Z%wZn数据对齐n系统内存布局n程序内存布局n位运算(数的表示与存储 补码/低位优先)qC语言:0x/0 u/l/ul/i64/ll/LLq汇编:1aH/17O/12D/110Bn函数形参参数n内存分配/堆/栈n调用约定与栈帧、FPO优化q(stdcall, cdecl, fastcall, thiscall,nakedcall)n算法(确定原型,输入检查(严进宽出),边界考虑,出错处理,性能优化)麦洛克菲www.mallocfree.com麦洛克菲www.mallocfree.com努力方向nC语言(数据结构,操作系统,汇 编,编译原理)nUI界面(MFC/WTL)n内核n调试(WINDBG)(F1HELP文档)n逆向(IDA/OLLYDBG)麦洛克菲www.mallocfree.com基础书籍推荐nC程序设计 谭浩强 清华大学出版社nC语言入门经典英文版nC语言编程精粹 姜静波等译 电子工业n高质量C+/C编程指南 林锐 电子工业nEffective C+侯捷译 华中科技大学出版社nMore Effective C+侯捷译 中国电力出版社n程序员求职成功路 周扬荣 机械工业出版社n汇编语言 王爽 清华大学出版社nVC技术内幕n深入浅出MFC麦洛克菲www.mallocfree.com内核书籍推荐nWindows 2000设备驱动程序设计指南 Art Baker等著 施诺译 机 械工业出版社n寒江独钓:Windows内核安全编程 邵坚磊等著 电子工业出版社n天书夜读:从汇编语言到Windows内核编程邵坚磊等著 电子工业n Windows驱动开发技术详解 张帆 电子工业出版社n Rootkits: Subverting the Windows Kernel Greg Hoglund等著nC:WinDDK7600.16385.0srcnhttp:/ www.debugman.comnhttp:/www.osronline.comnhttp:/bbs.pediy.comnhttp:/bbs3.driverdevelop.comnMSDN麦洛克菲www.mallocfree.comHello worldn.c/.hnSOURCES/MAKEFILEn.DSP/.DSWnEASYSYS/既有框架n安装与运行n虚拟机调试环境搭建Sources文件: TARGETNAME=HelloDrv(DrvName) TARGETPATH=debug TARGETTYPE=DRIVER SOURCES=main.c other.c Sources文件其它字段: C_DEFINES=$(C_DEFINES) DYOUR_DEFINES INCLUDES=$(INCLUDES);inc TARGETLIBS=$(TARGETLIBS) $(DDK_LIB_PATH)ndis.lib PRECOMPILED_INCLUDE=precomp.h DRIVERTYPE=FSmakefile文件: !INCLUDE $(NTMAKEENV)makefile.def虚拟机设置n创建一个com1串口nXP BOOT.ini(com1可能为com2,取决于vmware这端的ID)qmulti(0)disk(0)rdisk(0)partition(1)WINDOWS=“Microsoft Windows XP Professional -debug“ /debug /debugport=com1 /baudrate=115200 /fastdetectnWIN7qbcdedit /dbgsettings serial baudrate:115200 debugport:1qbcdedit /copy current /d DebugEntryqbcdedit /displayorder current d3d5f290-f64b-11de-a86d- aba3805c5629qbcdedit /debug d3d5f290-f64b-11de-a86d-aba3805c5629 ONnwindbg.exe -k com:port=.pipecom_1,baud=115200,pipe n符号设置:qsrv*d:symbols*http:/msdl.microsoft.com/download/symbols;D:CodecrashDebug;D:Codecr ashDebugcrash.pdbnVista上DbgPrint启用 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerDebug Print Filter “DEFAULT” : REG_DWORD : 0xFFFFFFFF麦洛克菲www.mallocfree.com驱动框架(1)HOOK函数驱动框架(2)麦洛克菲www.mallocfree.comnNT模型qDriverEntry()(单线程环境)qDispatchCreate()IRP_MJ_CREATEqDispatchRead()IRP_MJ_READqDispatchWrite()IRP_MJ_WRITEqDispatchClose()IRP_MJ_CLOSE(FileObject引用为0)qDispatchClean()IRP_MJ_CLEANUP(Handle引用为0)qDispatchControl()IRP_MJ_DEVICE_CONTROLqDriverUnload()(单线程环境)nWDMqWDMAddDevice()qWDMPnp()n应用框架qSfilter/MinifilterqTDI/NDIS/WFPqDISKPERFqHOOK写一个NTModelDrvn结构定义n卸载例程n分发函数(通用的,单独的)nDriverEntryn编译n运行麦洛克菲www.mallocfree.com麦洛克菲www.mallocfree.comIRP结构理解与操作(1)CancelUserBufferMdlAddressSystemBufferIOSTATUSIRP Header0n头部堆栈IO_STATUS_BLOCKStatusInformationIO_STACK_LOCATIONMajorFunctionMinorFunctionunion struct Read; struct Write; struct DeviceControl; Parameters;DeviceObjectFileObject文件过滤驱动设备文件卷设备磁盘设备IRP驱动设备IRP麦洛克菲www.mallocfree.comIRP结构理解与操作(2)Irp-AssociatedIrp.SystemBuffer Irp-IoStatus.Status Irp-IoStatus.Information Irp-UserBuffer Irp-MdlAddressPIO_STACK_LOCATION irpStack; irpStack = IoGetCurrentIrpStackLocation (Irp); irpStack-Parameters.Read.Length irpStack-Parameters.Read.ByteOffset irpStack-Parameters.DeviceIoControl.IoControlCode irpStack-Parameters.DeviceIoControl.InputBufferLength irpStack-Parameters.DeviceIoControl.OutputBufferLength irpStack-MajorFunction irpStack-MinorFunction irpStack-DeviceObject irpStack-FileObject麦洛克菲www.mallocfree.com驱动是如何运行的nA驱动:q1创建一个服务(注册表)nHKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesSr vNamen启动GROUP与StartType决定了驱动加载的早晚nStartType为0的比StartType为1的先启动。n同一个StartType的,按照GroupOrder顺序来启动nHKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlGro upOrderListq2对象管理器生成驱动对象(DriverObject),并传递给 DriverEntry(),执行DriverEntry入口函数q3创建控制设备对象q4创建控制设备符号链接(RING3可见)q5. 如果是过滤驱动,创建过滤设备对象,绑定q5注册分发函数q6. 其它初始化动作麦洛克菲www.mallocfree.com驱动是如何运行的(2)nB驱动与应用层交互qCreateqReadqWriteqDeviceIoControlqClosenHOOK麦洛克菲www.mallocfree.com驱动服务安装n安装:qOpenSCManager()qCreateService()/OpenService()qStartService()n卸载:qOpenSCManager()qControlService() - SERVICE_CONTROL_STOPqDeleteService()麦洛克菲www.mallocfree.comRING3与RING0通信(IOCONTROL)nMETHOD_BUFFEREDqpIrp-AssociatedIrp.SystemBuffer;nMETHOD_IN_DIRECT/METHOD_OUT_DIRECTqpIrp-AssociatedIrp.SystemBuffer;qpIrp-MdlAddress;nMETHOD_NEITHERqstack-Parameters.DeviceIoControl.Type3InputBuffer;qpIrp-UserBuffer;RING3与RING0通信(DEVICE)nDO_BUFFERED_IOqpIrp-AssociatedIrp.SystemBuffer;nDO_DIRECT_IOqpIrp-MdlAddress; MmGetSystemAddressForMdlSafe n其它IO方式qpIrp-UserBuffer; ProbeForWrite /ProbeForRead麦洛克菲www.mallocfree.comRING3与RING0通信HANDLE hDevice = CreateFile(“.NTMode
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号