麥洛克菲內(nèi)核開發(fā)第一課_第1頁
麥洛克菲內(nèi)核開發(fā)第一課_第2頁
麥洛克菲內(nèi)核開發(fā)第一課_第3頁
麥洛克菲內(nèi)核開發(fā)第一課_第4頁
麥洛克菲內(nèi)核開發(fā)第一課_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論