脫殼步驟二-修復

常規操作

1、尋找OEP:OD載入,找到OEP,停在OEP處(一般在push ebp代碼處)。

2、生成轉存文件:打開LordPE,選中程序的進程,右鍵“修正鏡像大小”,然後右鍵“完整轉存”,輸入文件名,保存。此步也可用OD自帶的插件進行,在代碼區右鍵“用OllyDump脫殼調試進程”,此外如果勾選了“重建輸入表”,後面就不需要再用ImportREC修正輸入表了,如果不勾選,則需要進入第3步的操作。輸入文件名,保存。

3、修正輸入表:打開ImportREC,附加到程序的進程,輸入尋找到的OEP地址(即OEP處的push ebp這句代碼的地址),注意,輸入的是偏移地址,如OEP的地址爲:00403831,輸入時只須輸入3831即可。輸入地址後,點擊“自動查找IAT”按鈕,然後點擊“獲取輸入表”,點擊“顯示無效函數”,如果存在無效函數,則可在無效函數上右鍵“剪切指針”去除無效函數。最後點擊“修復轉存文件”按鈕,選擇在第二步中生成的轉存文件,確定,脫殼即可完成。

 

異常處理:

1、提示數據錯誤

運行脫殼後的程序時,提示數據錯誤。此錯誤一般是由附加數據引起的。查殼時,比如NsPack 1.4 -> Liuxingping [Overlay] *,其中的[Overlay]即說明該程序存在附加數據,而對脫殼後的程序進行查殼,就沒有了[Overlay],所以需要把附加數據從源文件添加到脫殼後的文件中。此問題的處理方式爲:

(1)打開LordPE,“PE編輯器”按鈕,選擇原始程序(未脫殼的),打開,進入編輯器界面,點擊“區段”按鈕,進入區段表界面,查看最後一個區段的ROffset和RSize兩個值,這兩個值相加的結果即爲附加數據的起始地址。以下以相加結果爲00028400爲例。

(2)打開WinHex(注意,如果WinHex打開時有問題,一般是目錄沒設置好,設置方法爲菜單“選項”->“綜合選項”(有的叫“常規”),進入設置界面,此界面中的臨時文件目錄和鏡像備份目錄必須是存在的,如果不存在,打開時就會提示錯誤)。用WinHex打開未脫殼的原始程序,找到上一步中得到的地址,在該地址處“選塊開始”,然後在最末尾處“選塊結束”,將選中的塊Ctrl+C複製。

(3)用WinHex打開脫殼後的文件,在文件的末尾處粘貼,保存文件,即可解決脫殼後的程序數據錯誤的問題。

2、手動查找IAT信息

在修正輸入表時,輸入OEP地址後,可以“自動查找IAT”,也可以手動查找,查找方法爲:

(1)OD載入,到達OEP後,在代碼區域隨便找一句調用系統函數的代碼(call 系統函數),在這句代碼上右鍵“跟隨(Enter)”,即可找到有大片jmp的地方,上滾到第一個,該條數據中的地址減去基址再往前走4-8個字節(一般可使用8個字節)即爲IAT的開始地址(RVA),如第一個jmp爲:

004C8988  - FF25 0C014E00   JMP DWORD PTR DS:[4E010C]                ; ADVAPI32.RegCloseKey

則IAT的開始地址爲:4E010C - 400000 - 8= E0104。

下滾到這一片jmp的最後一條(中間有INT3之類的可以忽略),如:

004C93CA  - FF25 E80E4E00   JMP DWORD PTR DS:[4E0EE8]                ; OLEAUT32.VariantInit

則IAT的結束地址爲:4E0EE8 - 400000 + 8= E0EF0。

則IAT的大小爲:E0EE8 - E010C = DEC。

(2)OD載入,到達OEP後,F8單步走,遇到調用系統函數的地方,F7步入,也可到達大片jmp的地方。計算方法同(1)。

發佈了24 篇原創文章 · 獲贊 9 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章