免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

Pwn學(xué)習(xí)隨筆( 二 )

lea edi, dword ptr ss:[ebp-40]取地址編號賦給ediedi = esp + 3*0x4 , 下面三條之路是一組 , stos用于將eax的值存儲到edi的地址編號中 , ecx記錄執(zhí)行次數(shù) 。每執(zhí)行一次 , ecx - 1, edi + 4(df位為0)或者edi - 4(df位為1)ccccccccint 3的硬編碼int 3是端點(diǎn) , 這樣做為了防止緩沖區(qū)溢出 , 未到的棧空間都被設(shè)置為cccccccc , CPU執(zhí)行遇到這里就會將程序停下來了 。下一步mov eax, dword ptr ss:[ebp+8]是函數(shù)的第二個參數(shù) , ebp+c是函數(shù)的第一個參數(shù) , 這兩步執(zhí)行了關(guān)鍵操作 2 + 1 = 3此時函數(shù)功能就完成了 , 下面就是恢復(fù)現(xiàn)場了 , pop edi , 可分為兩步 , mov edi, espadd esp,4 , 先push的后pop然后執(zhí)行mov, esp, ebp , 即將棧指針esp下降到之前sub執(zhí)行前的位置 , 棧中的數(shù)據(jù)并沒有清除
然后pop ebp , 即將0x12ff30賦給ebp然后esp + 4 , 最后執(zhí)行retn , 相當(dāng)于pop eipmov eip, 401171然后esp + 4 , 這個地址就很關(guān)鍵了 , 這就是我們在pwn中經(jīng)常覆蓋的返回地址 。然后返回到調(diào)用者中執(zhí)行 , 但是需要注意此時esp與剛開始不一樣 , 還沒有平衡堆棧 , 由上圖下面的add esp, 8用于平衡堆棧 , 這種方式就叫外平棧 。

Pwn學(xué)習(xí)隨筆

文章插圖

Pwn學(xué)習(xí)隨筆

文章插圖
要覆蓋返回地址 , 即ebp + 4 , 覆蓋了ebp之后還需要再覆蓋ebp + 4的位置 , 64位下為ebp + 8 , 如上圖所示401171即為返回地址
leave指令相當(dāng)于這兩條指令:movl %ebp, %esp即令esp=ebppopl %ebp 即 ebp = M[esp] , esp = esp + 4
裸函數(shù)示例
int __declspec(naked) plus(){__asm{//在函數(shù)調(diào)用之前會先push 1 push 2(傳參數(shù))call后會執(zhí)行push 返回地址//保留調(diào)用前的棧底push ebp//提升堆棧mov ebp,espsub esp,0x40//保留現(xiàn)場push ebxpush esipush edi//填充緩沖區(qū)主要用于存儲函數(shù)的局部變量mov eax,0xccccccccmov ecx,0x10// 之所以是10 是因?yàn)橹疤嵘褩?x40 / 4 = 10棧一個格四個字節(jié)lea edi,dword ptr ds:[ebp-0x40]rep stosd //每次填充四個字節(jié) , 重復(fù)16次//函數(shù)的核心功能ebp + 0x4為返回地址mov eax,dword ptr ds:[ebp+0x8]//把第一個參數(shù)給eaxebp+0x4為函數(shù)返回地址add eax,dword ptr ds:[ebp+0xc]//第二個參數(shù) + eax -> eax//恢復(fù)現(xiàn)場pop edi// 取出棧頂給edi , 然后esp+4pop esi// 取出棧頂給esi , 然后esp+4pop ebx// 取出棧頂給ebx , 然后esp+4//降低堆棧mov esp,ebppop ebp//恢復(fù)棧底 , 剛開始ebp保留過ret//相當(dāng)于pop eip 把函數(shù)返回地址401171給eip然后 rsp + 4}}//裸函數(shù) , 系統(tǒng)不會生成任何指令 , 調(diào)用時會出錯 , 會導(dǎo)致指令跳轉(zhuǎn)后回不來 , 往往需要自己寫入?yún)R編指令Pwntools用法參考手冊