2017-04-30 43 views
0

我有一個可執行文件,似乎是堆棧緩衝區溢出。我很確定我理解大部分情況,但我需要知道的是緩衝區存儲在內存中的位置。如果我知道它的絕對地址,或者相對於EBP或任何其他註冊表,我會是金黃的。Ida:如何在內存中找到一個緩衝區變量

我知道Ida跟蹤字符串和函數,但有什麼辦法可以找到緩衝區或類似的變量嗎?至少有一種方法可以獲得某種線索?

我已經能夠爲程序提供參數,但我不知道這些參數如何與緩衝區相關。再次,如果我能找到這些變量的位置,這並不難。

我對Ida相當陌生,所以我覺得這不應該很難完成,我只是缺少一些關鍵信息。

感謝, 彌敦道

+0

爲什麼這會降低投票率? – NirIzr

+0

我真的不知道,坦率地說我真的很想回答 – Nathan

回答

0

好了,因爲沒有人回答我的問題,我也可以提供我發現了什麼是最好的回答自己。

1)瞭解如何組裝寫入內存

在x86處理器,彙編指令寫一個字節的內存將是這個樣子:

MOV Ptr Byte [ECX], EAX 

在這個例子中,內容的寄存器EAX寫入ECX內容指定的內存位置。使用Immunity,在這種類型的指令中設置一個斷點。例如,一旦程序命中此行,請檢查ECX的內容並在該位置查找內存轉儲。這應該是寫入緩衝區的地方。

2)瞭解如何存儲器正存儲

在免疫的存儲器窗口,每個存儲器轉儲對應於在運行時期間創建的分配的空間。如果禁用ASLR(您可以使用EMET強制禁用它),則可以簡單地運行程序,然後在事實後搜索內存。如果ASLR已啓用,請嘗試找出正在寫入每次重新運行的內存類型,然後嘗試推斷正在寫入哪個內存轉儲。在推斷之後,在內存轉儲中設置一個斷點,設置爲在寫入或讀取任何內容後立即觸發。

它會殺了你說這麼多的話?嗯?