




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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打印格式
2、q%c %wc%C %d%ld %i64d%D%Lq%s %ws%S %u%x%p %f %Z%wZn数据对齐n系统内存布局n程序内存布局n位运算(数的表示与存储 补码/低位优先)qC语言:0 x/0 u/l/ul/i64/ll/LLq汇编:1aH/17O/12D/110Bn函数形参参数n内存分配/堆/栈n调用约定与栈帧、FPO优化q(stdcall, cdecl, fastcall, thiscall,nakedcall)n算法(确定原型,输入检查(严进宽出),边界考虑,出错处理,性能优化)麦洛克菲麦洛克菲麦洛克菲麦洛克菲努力方向nC语言(数据结构,操作系统,汇编,编译原理)nUI界面(MF
3、C/WTL)n内核n调试(WINDBG)(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寒江独
4、钓:Windows内核安全编程 邵坚磊等著 电子工业出版社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文件:TARGE
5、TNAME=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虚拟机设置n创建一个c
6、om1串口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
7、 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:/ ManagerDebug Print Filter “DEFAULT” : REG_DWORD : 0 xFFFFFFFF麦洛克菲麦洛克菲驱动框架(1)HOOK函数驱动框架(2)麦洛克菲麦洛克菲nNT模型qDriverEntry()(单线程
8、环境)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/WFPq
9、DISKPERFqHOOK写一个NTModelDrvn结构定义n卸载例程n分发函数(通用的,单独的)nDriverEntryn编译编译n运行运行麦洛克菲麦洛克菲麦洛克菲麦洛克菲IRP结构理解与操作(1)CancelUserBufferMdlAddressSystemBufferIOSTATUSIRP Header0n头部堆栈IO_STATUS_BLOCKStatusInformationIO_STACK_LOCATIONMajorFunctionMinorFunctionunion struct Read;struct Write;struct DeviceControl; Parameter
10、s;DeviceObjectFileObject文件过滤驱动设备文件卷设备磁盘设备IRP驱动设备IRP麦洛克菲麦洛克菲IRP结构理解与操作(2)Irp-AssociatedIrp.SystemBufferIrp-IoStatus.StatusIrp-IoStatus.InformationIrp-UserBufferIrp-MdlAddressPIO_STACK_LOCATION irpStack;irpStack = IoGetCurrentIrpStackLocation (Irp);irpStack-Parameters.Read.LengthirpStack-Parameters.Re
11、ad.ByteOffsetirpStack-Parameters.DeviceIoControl.IoControlCodeirpStack-Parameters.DeviceIoControl.InputBufferLengthirpStack-Parameters.DeviceIoControl.OutputBufferLengthirpStack-MajorFunctionirpStack-MinorFunctionirpStack-DeviceObjectirpStack-FileObject麦洛克菲麦洛克菲驱动是如何运行的nA驱动:驱动:q1创建一个服务(注册表)nHKEY_LOCA
12、L_MACHINESYSTEMCurrentControlSetServicesSrvNamen启动GROUP与StartType决定了驱动加载的早晚nStartType为0的比StartType为1的先启动。n同一个StartType的,按照GroupOrder顺序来启动nHKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlGroupOrderListq2对象管理器生成驱动对象(DriverObject),并传递给DriverEntry(),执行DriverEntry入口函数q3创建控制设备对象q4创建控制设备符号链接(RING3可见)q5. 如果
13、是过滤驱动,创建过滤设备对象,绑定q5注册分发函数q6. 其它初始化动作麦洛克菲麦洛克菲驱动是如何运行的(2)nB驱动与应用层交互驱动与应用层交互qCreateqReadqWriteqDeviceIoControlqClosenHOOK麦洛克菲麦洛克菲驱动服务安装n安装:qOpenSCManager()qCreateService()/OpenService()qStartService()n卸载:qOpenSCManager()qControlService() - SERVICE_CONTROL_STOPqDeleteService()麦洛克菲麦洛克菲RING3与RING0通信(IOCON
14、TROL)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_DIREC
15、T_IOqpIrp-MdlAddress; MmGetSystemAddressForMdlSafe n其它IO方式qpIrp-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 buf
16、Write1024=Hello, world;DWORD dwRead = 0;DWORD dwWrite = 0;ReadFile(hDevice, bufRead, 1024, &dwRead, NULL);WriteFile(hDevice, bufWrite, strlen(bufWrite)+1, &dwWrite, NULL);CHAR bufInput1024 =Hello, world;CHAR bufOutput1024 = 0;DWORD dwRet = 0;DeviceIoControl(hDevice, IOCTL_HELLO, bufInput, si
17、zeof(bufInput), bufOutput, sizeof(bufOutput), &dwRet, NULL);CloseHandle( hDevice );麦洛克菲麦洛克菲RING3与RING0开发区别(1)n什么是RING0与RING3qR0/R1/R2/R3qX64:只剩下R0和R3q虚拟技术:n0/1/3模式(速度,兼容)n0/3模式(稳定性)nVT:根模式/-1(环的旁边)RING3与RING0开发区别(2)nprintf/scanf/fopen/fclose/fwrite/fread/malloc/free不能用nsprintf/strlen/strcpy/wcsl
18、en/wcscpy/memcpy/memset可用nNTSTATUS/NT_SUCCESS()qSTATUS_SUCCESSqSTATUS_UNSUCCESSFULqSTATUS_ACCESS_DENIEDqSTATUS_INSUFFICIENT_RESOURCESn内存分配:PagedPool/NonPagedPool/tagRING3与RING0开发区别(3)nAPI调用与中断级别麦洛克菲麦洛克菲驱动在安全领域的应用?驱动在安全领域的应用?n1绑定与过滤q Sfilter/minifiltern2HOOKq SSDTq X64怎么办?n3. 回调q CmRegisterCallbackq
19、minifilter 麦洛克菲麦洛克菲驱动API分类集合nExXxx()nIoXxx()nKeXxx()nMmXxx()nObXxx()nPsXxx()nRtlXxx()nZwXxx()nFltXxx()nNdisXxx()ExAllocatePoolWithTag()ExAcquireFastMutex ExGetPreviousModeIoCreateDeviceIoCreateSymbolicLinkIoGetCurrentIrpStackLocationIoAttachDeviceToDeviceStackIoAllocateIrpIoSetCompletionRoutineKeWai
20、tForSingleObjectKeSetEventKeInitializeEventObReferenceObjectByHandleObQueryNameStringPsGetCurrentProcessPsGetCurrentProcessIdPsCreateSystemThreadPsLookupProcessByProcessIdRtlZeroMemoryRtlInitUnicodeStringZwOpenKeyZwCreateFileZwOpenProcessZwQuerySystemInformationMmGetSystemRoutineAddressMmIsAddressVa
21、lid麦洛克菲麦洛克菲良好的驱动开发习惯n1. MmIsAddressValid函数不可靠函数不可靠n2.一定要保证在一定要保证在try_execpt内完成对于用户态内完成对于用户态内存的任何操作内存的任何操作 n3.设备控制尽量使用设备控制尽量使用BUFFERED IOn4.使用内核校验器使用内核校验器(verifier)和和Fuzz工具工具测试驱动麦洛克菲麦洛克菲驱动调试(1)n* kb/|*/nbl/bc/bd/benbp/bu/bm/ bp /p eprocess bp /t ethread nba w4/r4/e1/i4/ addrndb/dw/dd/dq/du/da/ds/dS(显
22、示内存)nddu/ddp/dda/dpp/dpu/dpa/dqp/dqa/dqu(显示含有指针的内存)ndds/dqs/dps(显示含有符号地址的内存)ndt nt!_eprocess ndt nt!_eprocess Addrnkv/kb/kp (FPO)n.open -a crash!wmain+0 x33n.reload /insymopt +40nlm/lm n t/lm vmn.dump /fn.dump /mn.dump /mfn.dump /man.crashx 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)nssdt:dds poi(nt!KeServiceDescriptorTable) L2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小班家长健康教育实施要点
- 健康素食课件下载安装
- 获嘉县初二数学试卷
- 合江小学五年级数学试卷
- 健康管理题讲解课件视频
- 《网络综合布线》教案 项目5任务3 管道和桥架工程施工
- 湖北省天门市天门外国语2025年物理高一下期末调研模拟试题含解析
- 加氢裂解汽油项目节能评估报告(节能专用)
- 浙江省工业固定资产投资项目节能评估报告审查程序
- 健康知识星球创意画课件
- 招商大使选聘管理办法
- 智慧教育基于大数据的个性化教学研究与实践
- 2025年中国铁路集团招聘笔试备考题库(带答案详解)
- 用工风险培训课件
- 海外现场安全健康环境管理(HSE)
- 班主任与科任老师的协调教育
- 2025年广东省中考历史试题卷(含答案详解)
- 2025年公安机关人民警察(行政执法)资格考试(客观题及刑法)含答案
- DB3502∕T 166-2024 既有厂区及老旧小区海绵城市方案设计导则
- 2025年 江西省金控科技产业集团有限公司招聘考试笔试试卷附答案
- DLT 5035-2016 发电厂供暖通风与空气调节设计规范
评论
0/150
提交评论