版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、麥洛克菲內(nèi)核開發(fā)第一課麥洛克菲周揚(yáng)榮周揚(yáng)榮上課整體安排n周六,周日下午1點(diǎn)到6點(diǎn)q地點(diǎn):清華園賓館旁邊n周三,周四晚上8點(diǎn)到10點(diǎn)輔導(dǎo)n時(shí)間:3月3日到7月1日(中間清明和五一正常放假)n手機(jī)調(diào)為震動(dòng)n交作業(yè)時(shí)間:每周五晚上n意見反饋q學(xué)員群:183948142q郵箱:麥洛克菲麥洛克菲提綱n測試試題串講nHello world編譯與運(yùn)行n驅(qū)動(dòng)框架n驅(qū)動(dòng)是如何運(yùn)行的n驅(qū)動(dòng)服務(wù)安裝nRING3與RING0通信nRING3與RING0開發(fā)區(qū)別n驅(qū)動(dòng)API分類集合n常見的驅(qū)動(dòng)漏洞、缺陷問題的7大忠告n調(diào)試(藍(lán)屏DUMP分析,ring3與ring0聯(lián)調(diào))n第一個(gè)驅(qū)動(dòng)例子:進(jìn)程創(chuàng)建監(jiān)視測試與基礎(chǔ)n打印格式
2、q%c %wc%C %d%ld %i64d%D%Lq%s %ws%S %u%x%p %f %Z%wZn數(shù)據(jù)對齊n系統(tǒng)內(nèi)存布局n程序內(nèi)存布局n位運(yùn)算(數(shù)的表示與存儲 補(bǔ)碼/低位優(yōu)先)qC語言:0 x/0 u/l/ul/i64/ll/LLq匯編:1aH/17O/12D/110Bn函數(shù)形參參數(shù)n內(nèi)存分配/堆/棧n調(diào)用約定與棧幀、FPO優(yōu)化q(stdcall, cdecl, fastcall, thiscall,nakedcall)n算法(確定原型,輸入檢查(嚴(yán)進(jìn)寬出),邊界考慮,出錯(cuò)處理,性能優(yōu)化)麥洛克菲麥洛克菲麥洛克菲麥洛克菲努力方向nC語言(數(shù)據(jù)結(jié)構(gòu),操作系統(tǒng),匯編,編譯原理)nUI界面(MF
3、C/WTL)n內(nèi)核n調(diào)試(WINDBG)(F1HELP文檔)n逆向(IDA/OLLYDBG)麥洛克菲麥洛克菲基礎(chǔ)書籍推薦nC程序設(shè)計(jì) 譚浩強(qiáng) 清華大學(xué)出版社nC語言入門經(jīng)典英文版nC語言編程精粹 姜靜波等譯 電子工業(yè)n高質(zhì)量C+/C編程指南 林銳 電子工業(yè)nEffective C+侯捷譯 華中科技大學(xué)出版社nMore Effective C+侯捷譯 中國電力出版社n程序員求職成功路 周揚(yáng)榮 機(jī)械工業(yè)出版社n匯編語言 王爽 清華大學(xué)出版社nVC技術(shù)內(nèi)幕n深入淺出MFC麥洛克菲麥洛克菲內(nèi)核書籍推薦nWindows 2000設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)指南 Art Baker等著 施諾譯 機(jī)械工業(yè)出版社n寒江獨(dú)
4、釣:Windows內(nèi)核安全編程 邵堅(jiān)磊等著 電子工業(yè)出版社n天書夜讀:從匯編語言到Windows內(nèi)核編程邵堅(jiān)磊等著 電子工業(yè)n Windows驅(qū)動(dòng)開發(fā)技術(shù)詳解 張帆 電子工業(yè)出版社n Rootkits: Subverting the Windows Kernel Greg Hoglund等著nC:WinDDK7600.16385.0srcnhttp:/ nhttp:/nhttp:/nhttp:/nMSDN麥洛克菲麥洛克菲Hello worldn.c/.hnSOURCES/MAKEFILEn.DSP/.DSWnEASYSYS/既有框架n安裝與運(yùn)行n虛擬機(jī)調(diào)試環(huá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虛擬機(jī)設(shè)置n創(chuàng)建一個(gè)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符號設(shè)置:qsrv*d:symbols*http:/ ManagerDebug Print Filter “DEFAULT” : REG_DWORD : 0 xFFFFFFFF麥洛克菲麥洛克菲驅(qū)動(dòng)框架(1)HOOK函數(shù)驅(qū)動(dòng)框架(2)麥洛克菲麥洛克菲nNT模型qDriverEntry()(單線程
8、環(huán)境)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()(單線程環(huán)境)nWDMqWDMAddDevice()qWDMPnp()n應(yīng)用框架qSfilter/MinifilterqTDI/NDIS/WFPq
9、DISKPERFqHOOK寫一個(gè)NTModelDrvn結(jié)構(gòu)定義n卸載例程n分發(fā)函數(shù)(通用的,單獨(dú)的)nDriverEntryn編譯編譯n運(yùn)行運(yùn)行麥洛克菲麥洛克菲麥洛克菲麥洛克菲IRP結(jié)構(gòu)理解與操作(1)CancelUserBufferMdlAddressSystemBufferIOSTATUSIRP Header0n頭部堆棧IO_STATUS_BLOCKStatusInformationIO_STACK_LOCATIONMajorFunctionMinorFunctionunion struct Read;struct Write;struct DeviceControl; Parameter
10、s;DeviceObjectFileObject文件過濾驅(qū)動(dòng)設(shè)備文件卷設(shè)備磁盤設(shè)備IRP驅(qū)動(dòng)設(shè)備IRP麥洛克菲麥洛克菲IRP結(jié)構(gòu)理解與操作(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麥洛克菲麥洛克菲驅(qū)動(dòng)是如何運(yùn)行的nA驅(qū)動(dòng):驅(qū)動(dòng):q1創(chuàng)建一個(gè)服務(wù)(注冊表)nHKEY_LOCA
12、L_MACHINESYSTEMCurrentControlSetServicesSrvNamen啟動(dòng)GROUP與StartType決定了驅(qū)動(dòng)加載的早晚nStartType為0的比StartType為1的先啟動(dòng)。n同一個(gè)StartType的,按照GroupOrder順序來啟動(dòng)nHKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlGroupOrderListq2對象管理器生成驅(qū)動(dòng)對象(DriverObject),并傳遞給DriverEntry(),執(zhí)行DriverEntry入口函數(shù)q3創(chuàng)建控制設(shè)備對象q4創(chuàng)建控制設(shè)備符號鏈接(RING3可見)q5. 如果
13、是過濾驅(qū)動(dòng),創(chuàng)建過濾設(shè)備對象,綁定q5注冊分發(fā)函數(shù)q6. 其它初始化動(dòng)作麥洛克菲麥洛克菲驅(qū)動(dòng)是如何運(yùn)行的(2)nB驅(qū)動(dòng)與應(yīng)用層交互驅(qū)動(dòng)與應(yīng)用層交互qCreateqReadqWriteqDeviceIoControlqClosenHOOK麥洛克菲麥洛克菲驅(qū)動(dòng)服務(wù)安裝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開發(fā)區(qū)別(1)n什么是RING0與RING3qR0/R1/R2/R3qX64:只剩下R0和R3q虛擬技術(shù):n0/1/3模式(速度,兼容)n0/3模式(穩(wěn)定性)nVT:根模式/-1(環(huán)的旁邊)RING3與RING0開發(fā)區(qū)別(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內(nèi)存分配:PagedPool/NonPagedPool/tagRING3與RING0開發(fā)區(qū)別(3)nAPI調(diào)用與中斷級別麥洛克菲麥洛克菲驅(qū)動(dòng)在安全領(lǐng)域的應(yīng)用?驅(qū)動(dòng)在安全領(lǐng)域的應(yīng)用?n1綁定與過濾q Sfilter/minifiltern2HOOKq SSDTq X64怎么辦?n3. 回調(diào)q CmRegisterCallbackq
19、minifilter 麥洛克菲麥洛克菲驅(qū)動(dòng)API分類集合nExXxx()nIoXxx()nKeXxx()nMmXxx()nObXxx()nPsXxx()nRtlXxx()nZwXxx()nFltXxx()nNdisXxx()ExAllocatePoolWithTag()ExAcquireFastMutex ExGetPreviousModeIoCreateDeviceIoCreateSymbolicLinkIoGetCurrentIrpStackLocationIoAttachDeviceToDeviceStackIoAllocateIrpIoSetCompletionRoutineKeWai
20、tForSingleObjectKeSetEventKeInitializeEventObReferenceObjectByHandleObQueryNameStringPsGetCurrentProcessPsGetCurrentProcessIdPsCreateSystemThreadPsLookupProcessByProcessIdRtlZeroMemoryRtlInitUnicodeStringZwOpenKeyZwCreateFileZwOpenProcessZwQuerySystemInformationMmGetSystemRoutineAddressMmIsAddressVa
21、lid麥洛克菲麥洛克菲良好的驅(qū)動(dòng)開發(fā)習(xí)慣n1. MmIsAddressValid函數(shù)不可靠函數(shù)不可靠n2.一定要保證在一定要保證在try_execpt內(nèi)完成對于用戶態(tài)內(nèi)完成對于用戶態(tài)內(nèi)存的任何操作內(nèi)存的任何操作 n3.設(shè)備控制盡量使用設(shè)備控制盡量使用BUFFERED IOn4.使用內(nèi)核校驗(yàn)器使用內(nèi)核校驗(yàn)器(verifier)和和Fuzz工具工具測試驅(qū)動(dòng)麥洛克菲麥洛克菲驅(qū)動(dòng)調(diào)試(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、示內(nèi)存)nddu/ddp/dda/dpp/dpu/dpa/dqp/dqa/dqu(顯示含有指針的內(nèi)存)ndds/dqs/dps(顯示含有符號地址的內(nèi)存)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驅(qū)動(dòng)調(diào)試(2)nssdt:dds poi(nt!KeServiceDescriptorTable) L2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度年福建省高校教師資格證之高等教育心理學(xué)過關(guān)檢測試卷B卷附答案
- 2024年安徽省高考?xì)v史試卷(含答案解析)
- 2024年HWREP刷適性改進(jìn)劑項(xiàng)目投資申請報(bào)告代可行性研究報(bào)告
- 一年級數(shù)學(xué)(上)計(jì)算題專項(xiàng)練習(xí)匯編
- 2024健身中心器械維護(hù)分包協(xié)議
- 2024年餐飲業(yè)務(wù)全面合作協(xié)議范本
- 2024企業(yè)欠款清算協(xié)議范例
- 2024年企業(yè)保安服務(wù)協(xié)議
- 2024商品采購單一價(jià)格協(xié)議規(guī)范格式
- 《橢圓的標(biāo)準(zhǔn)方程的求法》一等獎(jiǎng)?wù)f課稿3篇
- 煎餅公司創(chuàng)業(yè)的策劃方案書
- 工期日歷天計(jì)算器
- 儀表交工資料
- 走遍德國 A1(課堂PPT)
- 380V變頻器招標(biāo)技術(shù)文件2010
- 基于PLC的門禁系統(tǒng)的設(shè)計(jì)
- 第一章特殊教育概述-特殊教育概論(共4頁)
- 報(bào)廢農(nóng)業(yè)機(jī)械回收確認(rèn)表(樣式)
- 機(jī)房精密空調(diào)維護(hù)驗(yàn)收報(bào)告
- 《數(shù)字信號處理》教案
- 鐵科研微機(jī)控制直通式電空制動(dòng)系統(tǒng)
評論
0/150
提交評論