標籤:殼 脫殼 pecompact 2.20殼 pecompact 手動脫殼
Fly2015
PeCompact殼又是一個沒有聽說過的殼,需要脫殼的程式是吾愛破解培訓的第一課的選修作業四。最近對脫殼有點上癮了,當然也遭受了脫殼受挫的無奈,但是比較幸運還是把這個殼給搞了。
對加殼程式進行查殼。
工具DIE顯示程式加的是PeCompact殼,並且原來沒加殼的程式使用Microsoft Visual C/C++(2008)編寫的,這一點對於尋找原程式的真實OEP非常有協助。
OD載入加殼的程式進行分析,加殼程式的進入點的彙編代碼。
F8走了幾步,坑啊,寫殼的作者在代碼中設定了異常,例如中標識的指令就會導致F8單步的時候觸發向地址0賦值的異常,即使將這兩條指令Nop掉,後面的指令中F8單步跟蹤也會觸發異常。
要對這個加殼程式進行脫殼,就必須規避觸發指令中異常的問題。是不是不能處理呢?還是有辦法規避異常問題的,還好加殼的作者比較善良。
既然F8單步的方法不能處理,那就想另外的辦法對加殼程式進行脫殼。Ctrl+F2再次載入該加殼程式進行調試分析,並在函數VirtualProtectA和VirtualProtectExA上設定斷點(直接使用OD提供的API設定斷點外掛程式在API函數的上設定斷點),。
F9運行4次,此時OD中的程式的狀態。坑啊,這個殼的IAT表在不經意中就被暴漏了,IAT表的起始地址VA為432000。
Alt+F9讓程式從系統臨空回到使用者程式的臨空,停在使用者程式的指令代碼中。
Ctrl+F9執行完所在的函數到Retn指令處,F8單步回到上一層的調用方函數中。
Ctrl+F9再次執行完所在的函數到Retn指令處,F8單步回到上一層的調用方函數中。
離脫殼已經很近了,直覺告訴地址00455D8E jmp eax中EAX儲存的值就是原程式真實OEP的地址。
在地址00455D8E處F2斷點,F4/F9運行到此處,得到EAX=0041DDAC即為原程式真實的OEP的VA地址。
F7單步跟進到地址0041DDAC處,選中部分記憶體資料,Ctrl+A分析記憶體資料,終於見到了光明。
OK,原程式的OEP找到了,使用Load PE和RECImport 工具或者Scylla工具進行程式的完美脫殼,IAT表的修複也比較順利。
運行一下脫殼後的程式,證明脫殼成功。
手動脫PeCompact 2.20殼的文件剖析和脫殼後程式的:http://download.csdn.net/detail/qq1084283172/8900459
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
手動脫PeCompact 2.20殼實戰-吾愛破解培訓第一課選修作業四