positive sp value has been found
最近在使用IDA分析惡意程式時,該程式使用了大量對抗靜態分析的方法,使得我在分析時總是使用OD看彙編,但它裡面由於call太多,跟了很多以後我都不知道這個call返回到哪裡了,於是覺得還是想辦法看能否F5下,轉成虛擬碼,看著速度會快很多,於是就有了這篇文章,直接進入主題。
拿這一段程式碼舉例說明如何處理,首先這裡紅色的0FF98A7B1就是對抗靜態分析的一種方法,我們需要先U一下轉換為未定義的資料,然後就變成下圖這樣
因為我在OD中已經除錯過了,所以我知道在58的位置按下C,轉換成程式碼就比較正常,每個人根據自己的情況在特殊的位置按下C
從上圖中我們也可以看出,E9 28 14都是垃圾指令,用來干擾靜態分析
經過手動調整以後變成了下圖這樣:
我們在text:0040938C 處按下P(轉換成函式),同時也發現text字型顏色變成了黑色,如下圖所示:
一般情況下按完P以後,我們就可以按F5轉換成虛擬碼了,但這個不行,因為堆疊不平衡了,提示框如下圖所示:
彈這種框的都可以用我的這個方法處理,使之可以使用F5功能,往彙編程式碼下面找,可以看到一行紅色背景的字,如圖所示:
這個時候我們將棧指標提示資訊顯示出來,選擇Options-->General,將我用紅色標記出來的打上勾,點選OK,意思是顯示出堆疊指標資訊。
打勾之後再回到彙編程式碼視窗就變成這樣了,會多出來我紅色框中的內容:
這時我們就將游標放到-04(text 004094A1)的上一行地址(text 004094A0),按下Alt+K,或者右鍵選擇Change stack pointer,彈出下框,輸入框輸入-0x4,然後點選OK:
這樣就沒有負的堆疊了,據我觀察只要堆疊不為負值,就可以按F5轉換為虛擬碼。
成功轉換為虛擬碼。
該方法寫的篇幅略長,主要是為了說的明白,讓更多的人懂,會。目的僅僅如此,希望大家都能學會,還有不明白的……就多看幾遍,我圖已經貼的很詳細了。
本文參考了國外網站的一個帖子,因為我也是通過該帖才學會,尊重原創。