保護(hù)模式篇章第三部分直接訪問硬件3更改tss io許可位圖指向_第1頁
保護(hù)模式篇章第三部分直接訪問硬件3更改tss io許可位圖指向_第2頁
保護(hù)模式篇章第三部分直接訪問硬件3更改tss io許可位圖指向_第3頁
保護(hù)模式篇章第三部分直接訪問硬件3更改tss io許可位圖指向_第4頁
保護(hù)模式篇章第三部分直接訪問硬件3更改tss io許可位圖指向_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

標(biāo)題:【】rootkit直接硬件之[三]作者:combojiang2008-03-鏈接: 關(guān)于ring3直接硬件的辦法,前面已經(jīng)介紹了2篇,本篇算是結(jié)束篇了。篇幅較長,大家慢慢閱讀。取得I/O移計算I/O地址對應(yīng)位所在字節(jié)在I/O位圖內(nèi)的偏移把字節(jié)偏移加上位圖開始偏移,再加1,所得值與TSS碼為0通用把讀出的兩個字節(jié)與碼進(jìn)行與運算,若結(jié)果不為0表示檢查未通過,則產(chǎn)生出錯碼為0的通用保進(jìn)行I/O回顧下保護(hù)模式中介紹:80386采用I/O級IPOL和I/O位圖的方法來控制輸入/輸出,實現(xiàn)輸/輸出保護(hù).I/O位圖位于任務(wù)狀態(tài)段TSS中。I/O級IPOL就是EFLAGS寄存器中IOPL位據(jù)這個描述符,我們可以找到TSS。TSS看lkd>dt_ktss+0x000 :+0x002 :+0x004 :+0x008 :+0x00a :+0x00c :[4]+0x01c :+0x020 :+0x024 :+0x028 :+0x02c :+0x030 :+0x034 :+0x038 :+0x03c :+0x040 :+0x044 :+0x048 :+0x04a :+0x04c :+0x04e :+0x050 :+0x052 :+0x054 :+0x056 :+0x058 :+0x05a :+0x05c :+0x05e :+0x060 :+0x062 :+0x064 :+0x066 :+0x068 :[1]+0x208cIntDirectionMap :[32]UCharlkd>dt_KiIoAccessMap+0x000 :[32]+0x020 :[8196]其中的IoMapBase就是I/O位圖的在TSS段中的偏移位置。也就是說在TSS段中從這個位置開始就是I/O位圖了。另外在這個結(jié)構(gòu)中還有IoMaps.IoMap一項,這是個長度為8196字節(jié)的數(shù)組。在Windows32位操作系統(tǒng)中,端口是由word類型來描述的,也就是說最大端口數(shù)量就是65536,即64k.由于每個端口使用一個bit位來描述,因此64k的端口占用字節(jié)數(shù)就是65536/8=8192字節(jié)。因此,我們完全可以使用IoMaps.IoMap[8196]作為我們I/O IoMaps.IoMap位于tss段偏移0x88位置處。也就是說,如果我們把I/O位圖放到IoMaps.IoMap中,然后讓IoMapBase和進(jìn)程中BOOLEANKe386QueryIoAccessMap(ULONGMapNumber,PKIO_ACCESS_MAPIoAccessMap);BOOLEANKe386SetIoAccessMap(ULONGMapNumber,PKIO_ACCESS_MAPIoAccessMap);BOOLEANKe386IoSetAccessProcess(PKPROCESSProcess,ULONGMapNumber);其中第一個函數(shù),是查詢端口用的。第二個,第三個函數(shù)是用于設(shè)置tssI/O位圖的,我們lkd>uL804f80fe804f8100804f8101804f8103 edi,dwordptr nt!Ke386SetIoAccessMap+0x67 nt!Ke386SetIoAccessMap+0x67 dwordptr[nt!_impKeRaiseIrqlToSynchLevel eax,dwordptr ;edi= eax,dwordptr esi,dwordptrb dwordptres:[edi],dwordeax,dwordptr[edx+4];=ecx,dwordptr[eax+44h]= cx,wordptr[ecx+30h];cx= eax,dwordptr[eax+40h] wordptr dwordptr[nt!_imp_KfLowerIrql nt!Ke386SetIoAccessMap+0x69 1。0FFDFF000h對應(yīng)于KPCR,WINDBGlkd>KPCRforProcessor0atffdff000:Major1Minor1NtTib.ExceptionList:b2616c7cNtTib.StackBase:b2616df0NtTib.StackLimit:bNtTib.SelfTib:SelfPcr:ffdff000Prcb:ffdff120IDR:ffffffffIDT:8003f400GDT:8003f000CurrentThread:88fb6da8IdleThread:2??碖PCR構(gòu),ds:[FFDFF020h]對應(yīng)于Prcb,KPCR移0x40位置對應(yīng)于TSSlkd>dt_kpcr+0x000 :+0x01c :Ptr32+0x020 :Ptr32+0x024 :+0x028 :+0x02c :+0x030 :+0x034 :Ptr32+0x038 :Ptr32+0x03c :Ptr32+0x040 :Ptr32+0x044 :+0x046 :+0x048 :+0x04cStallScaleFactor:+0x050 :+0x051 :+0x052 :+0x053SecondLevelCacheAssociativity:+0x054 :+0x058Kernel:[14]+0x090SecondLevelCacheSize:+0x094Hal:[16]+0x0d4 :+0x0d8 :+0x0dcKernel :[17]+0x120 :3??磘ss偏移0x88對應(yīng)于IoMaps[0].IoMap,偏0x66對應(yīng)IoMapBase。lkd>dt_ktss+0x000 :+0x002 :+0x004 :+0x008 :+0x00a :+0x00c :[4]+0x01c :+0x020 :+0x024 :+0x028 :+0x02c :+0x030 :+0x034 :+0x038 :+0x03c :+0x040 :+0x044 :+0x048 :+0x04a :+0x04c :+0x04e :+0x050 :+0x052 :+0x054 :+0x056 :+0x058 :+0x05a :+0x05c :+0x05e :+0x060 :+0x062 :+0x064 :+0x066 :+0x068 :[1]+0x208cIntDirectionMap :[32]UCharlkd>dt_KiIoAccessMap+0x000 :[32]+0x020 :[8196]4。Prcb_KPRCB,其偏移0x4CurrentThreadlkd>dt_KPRCB+0x000 :+0x002 :+0x004 :Ptr32+0x008 :Ptr32+0x00c :Ptr32+0x010 :+0x011: +++0x4c0 :+0x4c4 :+0x4c8MultiThreadSetBusy:+0x4c9 :[3]+0x4cc :Ptr32+0x4d0MultiThreadProcessorSet:+0x4d4MultiThreadSetMaster:Ptr32+0x4d8ThreadStartCount:[2]+0x4e0CcFastReadNoWait:+0x4e4 :+0x4e8CcFastReadNotPossible:+0x4ecCcCopyReadNoWait:+0x4f0 :+0x4f4CcCopyReadNoWaitMiss:+0x4f8KeAlignmentFixupCount:+0x4fcKeContextSwitches:+0x500KeDcacheFlushCount:+0x504KeExceptionDispatchCount:+0x508KeFirstLevelTbFills:+0x50cKeFloatingEmulationCount:+0x510KeIcacheFlushCount:+0x514KeSecondLevelTbFills:+0x518 :+0x51c :[1]+0x520 :[16]+0x5a0PPNPagedLookasideList:[32]+0x6a0PPPagedLookasideList:[32]+0x7a0 :+0x7a4 :+0x7a8 :Ptr32+0x7ac :[52]+0x7e0 :[3]Ptr32+0x7ec :+0x7f0 : +0x7f4 :+0x7f8 :[40]+0x820 :+0x824 :Ptr32+0x828 :[56]+0x860 :+0x868 :Ptr32+0x86c :+0x870 :+0x874DpcRoutineActive:+0x878DpcInterruptRequested:+0x87c :+0x880 :+0x884umDpcQueueDepth:+0x888 :+0x88c :+0x890 :[16]+0x8a0 :+0x8a4 :[28]+0x8c0 :+0x8e0ChainedInterruptList:Ptr32+0x8e4LookasideIrpFloat:+0x8e8 :[6]+0x900 :[13]+0x90d :+0x90eLogicalProcessorsPerPhysicalProcessor:+0x910 :+0x914 :+0x918 :+0x920 :+0xb30 :5。CurrentThread移0x44ApcState.Process,即當(dāng)前進(jìn)程lkd>dt_kthread+0x000 :+0x010 :+0x018 :Ptr32+0x01c :Ptr32+0x020 :Ptr32+0x024 :Ptr32+0x028 :Ptr32+0x02c :+0x02d :+0x02e :[2]+0x030 :+0x031 :+0x032 :+0x033 :+0x034 :+0x04c :+0x050 :+0x051 :[3]+0x054 :+0x058 :+0x059 :+0x05a :+0x05b :+0x05c :Ptr32+0x060 :+0x060 :+0x068 :+0x06c :+0x06d :+0x06ePriorityDecrement:+0x06f :+0x070 :[4]+0x0d0 :Ptr32+0x0d4KernelApcDisable:+0x0d8 :+0x0dcSystemAffinityActive:+0x0dd :+0x0de :+0x0df :+0x0e0 :Ptr32+0x0e4 :Ptr32+0x0e8 :+0x0f0 :+0x118 :+0x120 :+0x124 :+0x128 :+0x129ProcessReadyQueue:+0x12aKernelStackResident:+0x12b :+0x12c :Ptr32+0x130 :Ptr32+0x134 :Ptr32+0x138 :[2]Ptr32+0x140 :+0x141 :+0x142 :+0x143 :+0x144 :+0x148 :+0x14c :+0x164 :+0x165 :+0x166 :+0x167 :+0x168 :Ptr32+0x16c :+0x19cSuspendSemaphore:+0x1b0 :+0x1b8 :+0x1b9 :+0x1ba :+0x1bbDisableBoost :UCharlkd>dt_KAPC_STATE+0x000 :[2]+0x010 :Ptr32+0x014KernelApcInProgress:+0x015KernelApcPending:+0x016 :6。在Process移0x30應(yīng)于IopmOffset。lkd>dt_KPROCESS+0x000 :+0x010 :+0x018DirectoryTableBase:[2]+0x020 :+0x028 :+0x030 :+0x032 :+0x033 :+0x034ActiveProcessors:+0x038 :+0x03c :+0x040 :+0x048 :+0x04c :Ptr32+0x050 :+0x058 :+0x05c :+0x060 :+0x062 :+0x063 :+0x064 :+0x065 :+0x066 :+0x067 :+0x068 :+0x069 :+0x06a :+0x06b :+0x06b :了解了關(guān)鍵的值,我們把這段匯編代碼還原為cKe386SetIoAccessMap(ULONGMapNumber,PKIO_ACCESS_MAP){KIRQLif((MapNumber>1)||(MapNumber==0)){returnFALSE;oldIrql=KeRaiseIrqlToSynchLevel();PKPCRKiPcr=(PKPCR)0xffdff000;void*pIOPM=&(KiPcr->TSS->IoMaps[0].IoMap);memcpy(pIOPM,IoAccessMap,0x800);KiPcr->TSS->IoMapBase=PsGetCurrentProcess()->IopmOffset;return}lkd>uKe386IoSetAccessProcessl30esi,dwordptr[ebp+0Ch]//參數(shù)26)//小于等于804f81e2804f81e4e)//大于804f81e6804f81e81);//參數(shù)804f81ea 804f81efeb0c nt!Ke386IoSetAccessProc

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論