天天看點

虛函數突破GS

如何确定變量的記憶體布局

為什麼不直接執行buff裡面的shellcode,而要繞遠

因為虛表指針指向buff,buff的位址還要指向另一個位址,沒有辦法直接執行buff。這是由虛函數與虛表性質決定。

為什麼執行完call還必須傳回shellcode,call不就是call進shellcode嗎?

call是必須的,見問題2.然後剩下的問題是怎麼回到shellcode内,一是把shell位址作為call的位址,但是位址在不同電腦上加載的時候是不一樣的,是以位址的方法不可行;二是通過跳闆跳轉實作。這樣需要注意的是跳闆在shellcode的一開頭,當作為shell的時候要被執行到,需要嘗試一個“poppopretn”的位址時不産生異常(亂指令比較容易産生異常,但是也會被編譯器放過去,嘗試的時候7c開頭的5個不成,78開頭的2個都成功了)。