麦洛克菲内核开发第一课

上传人:kms****20 文档编号:51276326 上传时间:2018-08-13 格式:PPT 页数:34 大小:373.50KB
返回 下载 相关 举报
麦洛克菲内核开发第一课_第1页
第1页 / 共34页
麦洛克菲内核开发第一课_第2页
第2页 / 共34页
麦洛克菲内核开发第一课_第3页
第3页 / 共34页
麦洛克菲内核开发第一课_第4页
第4页 / 共34页
麦洛克菲内核开发第一课_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《麦洛克菲内核开发第一课》由会员分享,可在线阅读,更多相关《麦洛克菲内核开发第一课(34页珍藏版)》请在金锄头文库上搜索。

1、麦洛克菲内核开发第一课麦洛克菲 周扬荣上课整体安排n周六,周日下午1点到6点q地点:清华园宾馆旁边n周三,周四晚上8点到10点辅导n时间:3月3日到7月1日(中间清明和五一正常放假)n手机调为震动n交作业时间:每周五晚上n意见反馈q学员群:183948142q邮箱:麦洛克菲提纲n测试试题串讲nHello world编译与运行n驱动框架n驱动是如何运行的n驱动服务安装nRING3与RING0通信nRING3与RING0开发区别n驱动API分类集合n常见的驱动漏洞、缺陷问题的7大忠告n调试(蓝屏DUMP分析,ring3与ring0联调)n第一个驱动例子:进程创建监视测试与基础n打印格式q%c %w

2、c%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算法(确定原型,输入检查(严进宽出),边界考虑,出错处理,性能优化)麦洛克菲麦洛克菲努力方向nC语言(数据结构,操作系统,汇 编,编译原理)nUI界面(MFC/WTL)n内核n调试(W

3、INDBG)(F1HELP文档)n逆向(IDA/OLLYDBG)麦洛克菲基础书籍推荐nC程序设计 谭浩强 清华大学出版社nC语言入门经典英文版nC语言编程精粹 姜静波等译 电子工业n高质量C+/C编程指南 林锐 电子工业nEffective C+侯捷译 华中科技大学出版社nMore Effective C+侯捷译 中国电力出版社n程序员求职成功路 周扬荣 机械工业出版社n汇编语言 王爽 清华大学出版社nVC技术内幕n深入浅出MFC麦洛克菲内核书籍推荐nWindows 2000设备驱动程序设计指南 Art Baker等著 施诺译 机 械工业出版社n寒江独钓:Windows内核安全编程 邵坚磊等著

4、 电子工业出版社n天书夜读:从汇编语言到Windows内核编程邵坚磊等著 电子工业n Windows驱动开发技术详解 张帆 电子工业出版社n Rootkits: Subverting the Windows Kernel Greg Hoglund等著nC:WinDDK7600.16385.0srcnhttp:/ nhttp:/nhttp:/nhttp:/nMSDN麦洛克菲Hello worldn.c/.hnSOURCES/MAKEFILEn.DSP/.DSWnEASYSYS/既有框架n安装与运行n虚拟机调试环境搭建Sources文件: TARGETNAME=HelloDrv(DrvName)

5、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

6、(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 d3d5f2

7、90-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:/ ashDebugcrash.pdbnVista上DbgPrint启用 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerDebug Print Filter “DEFAULT” : REG_D

8、WORD : 0xFFFFFFFF麦洛克菲驱动框架(1)HOOK函数驱动框架(2)麦洛克菲nNT模型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()(单线程环

9、境)nWDMqWDMAddDevice()qWDMPnp()n应用框架qSfilter/MinifilterqTDI/NDIS/WFPqDISKPERFqHOOK写一个NTModelDrvn结构定义n卸载例程n分发函数(通用的,单独的)nDriverEntryn编译n运行麦洛克菲麦洛克菲IRP结构理解与操作(1)CancelUserBufferMdlAddressSystemBufferIOSTATUSIRP Header0n头部堆栈IO_STATUS_BLOCKStatusInformationIO_STACK_LOCATIONMajorFunctionMinorFunctionunion

10、struct Read; struct Write; struct DeviceControl; Parameters;DeviceObjectFileObject文件过滤驱动设备文件卷设备磁盘设备IRP驱动设备IRP麦洛克菲IRP结构理解与操作(2)Irp-AssociatedIrp.SystemBuffer Irp-IoStatus.Status Irp-IoStatus.Information Irp-UserBuffer Irp-MdlAddressPIO_STACK_LOCATION irpStack; irpStack = IoGetCurrentIrpStackLocation

11、(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-DeviceObjec

12、t irpStack-FileObject麦洛克菲驱动是如何运行的nA驱动:q1创建一个服务(注册表)nHKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesSr vNamen启动GROUP与StartType决定了驱动加载的早晚nStartType为0的比StartType为1的先启动。n同一个StartType的,按照GroupOrder顺序来启动nHKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlGro upOrderListq2对象管理器生成驱动对象(DriverObject),并传递给 Driv

13、erEntry(),执行DriverEntry入口函数q3创建控制设备对象q4创建控制设备符号链接(RING3可见)q5. 如果是过滤驱动,创建过滤设备对象,绑定q5注册分发函数q6. 其它初始化动作麦洛克菲驱动是如何运行的(2)nB驱动与应用层交互qCreateqReadqWriteqDeviceIoControlqClosenHOOK麦洛克菲驱动服务安装n安装:qOpenSCManager()qCreateService()/OpenService()qStartService()n卸载:qOpenSCManager()qControlService() - SERVICE_CONTROL

14、_STOPqDeleteService()麦洛克菲RING3与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麦洛克菲RING3与RING0通信HANDLE hDevice = CreateFile(“.NTMode

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号