




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、麥洛克菲內(nèi)核開發(fā)第一課麥洛克菲周揚榮周揚榮上課整體安排n周六,周日下午1點到6點q地點:清華園賓館旁邊n周三,周四晚上8點到10點輔導(dǎo)n時間:3月3日到7月1日(中間清明和五一正常放假)n手機調(diào)為震動n交作業(yè)時間:每周五晚上n意見反饋q學(xué)員群:183948142q郵箱:麥洛克菲麥洛克菲提綱n測試試題串講nHello world編譯與運行n驅(qū)動框架n驅(qū)動是如何運行的n驅(qū)動服務(wù)安裝nRING3與RING0通信nRING3與RING0開發(fā)區(qū)別n驅(qū)動API分類集合n常見的驅(qū)動漏洞、缺陷問題的7大忠告n調(diào)試(藍屏DUMP分析,ring3與ring0聯(lián)調(diào))n第一個驅(qū)動例子:進程創(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位運算(數(shù)的表示與存儲 補碼/低位優(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)進寬出),邊界考慮,出錯處理,性能優(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è)計 譚浩強 清華大學(xué)出版社nC語言入門經(jīng)典英文版nC語言編程精粹 姜靜波等譯 電子工業(yè)n高質(zhì)量C+/C編程指南 林銳 電子工業(yè)nEffective C+侯捷譯 華中科技大學(xué)出版社nMore Effective C+侯捷譯 中國電力出版社n程序員求職成功路 周揚榮 機械工業(yè)出版社n匯編語言 王爽 清華大學(xué)出版社nVC技術(shù)內(nèi)幕n深入淺出MFC麥洛克菲麥洛克菲內(nèi)核書籍推薦nWindows 2000設(shè)備驅(qū)動程序設(shè)計指南 Art Baker等著 施諾譯 機械工業(yè)出版社n寒江獨
4、釣:Windows內(nèi)核安全編程 邵堅磊等著 電子工業(yè)出版社n天書夜讀:從匯編語言到Windows內(nèi)核編程邵堅磊等著 電子工業(yè)n Windows驅(qū)動開發(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安裝與運行n虛擬機調(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虛擬機設(shè)置n創(chuàng)建一個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ū)動框架(1)HOOK函數(shù)驅(qū)動框架(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寫一個NTModelDrvn結(jié)構(gòu)定義n卸載例程n分發(fā)函數(shù)(通用的,單獨的)nDriverEntryn編譯編譯n運行運行麥洛克菲麥洛克菲麥洛克菲麥洛克菲IRP結(jié)構(gòu)理解與操作(1)CancelUserBufferMdlAddressSystemBufferIOSTATUSIRP Header0n頭部堆棧IO_STATUS_BLOCKStatusInformationIO_STACK_LOCATIONMajorFunctionMinorFunctionunion struct Read;struct Write;struct DeviceControl; Parameter
10、s;DeviceObjectFileObject文件過濾驅(qū)動設(shè)備文件卷設(shè)備磁盤設(shè)備IRP驅(qū)動設(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ū)動是如何運行的nA驅(qū)動:驅(qū)動:q1創(chuàng)建一個服務(wù)(注冊表)nHKEY_LOCA
12、L_MACHINESYSTEMCurrentControlSetServicesSrvNamen啟動GROUP與StartType決定了驅(qū)動加載的早晚nStartType為0的比StartType為1的先啟動。n同一個StartType的,按照GroupOrder順序來啟動nHKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlGroupOrderListq2對象管理器生成驅(qū)動對象(DriverObject),并傳遞給DriverEntry(),執(zhí)行DriverEntry入口函數(shù)q3創(chuàng)建控制設(shè)備對象q4創(chuàng)建控制設(shè)備符號鏈接(RING3可見)q5. 如果
13、是過濾驅(qū)動,創(chuàng)建過濾設(shè)備對象,綁定q5注冊分發(fā)函數(shù)q6. 其它初始化動作麥洛克菲麥洛克菲驅(qū)動是如何運行的(2)nB驅(qū)動與應(yīng)用層交互驅(qū)動與應(yīng)用層交互qCreateqReadqWriteqDeviceIoControlqClosenHOOK麥洛克菲麥洛克菲驅(qū)動服務(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ū)動在安全領(lǐng)域的應(yīng)用?驅(qū)動在安全領(lǐng)域的應(yīng)用?n1綁定與過濾q Sfilter/minifiltern2HOOKq SSDTq X64怎么辦?n3. 回調(diào)q CmRegisterCallbackq
19、minifilter 麥洛克菲麥洛克菲驅(qū)動API分類集合nExXxx()nIoXxx()nKeXxx()nMmXxx()nObXxx()nPsXxx()nRtlXxx()nZwXxx()nFltXxx()nNdisXxx()ExAllocatePoolWithTag()ExAcquireFastMutex ExGetPreviousModeIoCreateDeviceIoCreateSymbolicLinkIoGetCurrentIrpStackLocationIoAttachDeviceToDeviceStackIoAllocateIrpIoSetCompletionRoutineKeWai
20、tForSingleObjectKeSetEventKeInitializeEventObReferenceObjectByHandleObQueryNameStringPsGetCurrentProcessPsGetCurrentProcessIdPsCreateSystemThreadPsLookupProcessByProcessIdRtlZeroMemoryRtlInitUnicodeStringZwOpenKeyZwCreateFileZwOpenProcessZwQuerySystemInformationMmGetSystemRoutineAddressMmIsAddressVa
21、lid麥洛克菲麥洛克菲良好的驅(qū)動開發(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)核校驗器使用內(nèi)核校驗器(verifier)和和Fuzz工具工具測試驅(qū)動麥洛克菲麥洛克菲驅(qū)動調(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ū)動調(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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 1 My school Part A Let's learn(教學(xué)設(shè)計)-2023-2024學(xué)年人教PEP版英語四年級下冊
- 砌磚質(zhì)量合同范本
- 20 美麗的小興安嶺 第二課時 教學(xué)設(shè)計-2024-2025學(xué)年語文三年級上冊統(tǒng)編版
- 9 玩得真開心 (教學(xué)設(shè)計)-2023-2024學(xué)年道德與法治一年級上冊統(tǒng)編版
- 房屋全款購買合同范本
- 制作預(yù)案合同范本
- 5的乘法口訣(教學(xué)設(shè)計)- 2024-2025學(xué)年二年級上冊數(shù)學(xué)人教版
- 舊物交易合同范本
- 4 地球-我們的家園:《環(huán)境問題敲響了警鐘》 (教學(xué)設(shè)計)統(tǒng)編版道德與法治六年級下冊
- 2023-2024學(xué)年清華版(2012)信息技術(shù)三年級下冊第一單元《3課 妙筆生花-文本的修飾》教學(xué)設(shè)計
- 河道整治與生態(tài)修復(fù)工程監(jiān)理規(guī)劃
- 建設(shè)工程招標(biāo)代理合同(GF-2005-0215)(標(biāo)準(zhǔn)版)
- 剪映專業(yè)版教學(xué)課件
- 公司新建電源及大用戶并網(wǎng)管理辦法
- 《hpv與宮頸癌》課件
- 2024年世界職業(yè)院校技能大賽“智能網(wǎng)聯(lián)汽車技術(shù)組”參考試題庫(含答案)
- 2024中華人民共和國文物保護法詳細解讀課件
- SAP導(dǎo)出科目余額表和憑證表操作說明及截圖可編輯范本
- 《建筑設(shè)計基礎(chǔ)》全套教學(xué)課件
- 倉庫貨物安全管理
- 新人教版歷史七下《統(tǒng)一多民族國家的鞏固和發(fā)展》教案
評論
0/150
提交評論