手動脫MoleBox殼實戰總結
作者:Fly2015
這個程式是吾愛破解脫殼練習第8期的加殼程式,該程式的殼是MoleBox V2.6.5殼,這些都是廣告,可以直接無視了。前面的部落格手動脫Mole Box V2.6.5殼實戰中已經給出了一種比較笨的脫殼的方法,在進行脫殼程式的IAT表的修複的時,採用的是手動記錄系統API的地址然後手動的去恢複被加密的系統API的方法,很挫。下面就來講一講稍微好點的修複IAT表的方法。
回顧一下前面找加殼程式原OEP的步驟。
使用ESP定律進行該加殼程式的脫殼,在硬體寫入斷點斷下來以後,單步F7到地址0046997B3處,發現Call eax指令中的EAX儲存是加殼程式真實OEP的VA地址0045159C。
被加殼程式的真實OEP被找到了,但是使用OD的外掛程式OllyDump或者Load PE+ImportREC或者是Scylla_x86進行程式的脫殼,然後運行程式,發現脫殼後的程式運行出錯。
隨後找到原因,原來是有部分函數的API地址被加密處理了,具體的被加密的函數。很顯然,地址00455170處儲存的系統API的函數地址是第一個被加密處理(具體的怎麼找IAT表的方法,看前面的部落格)。
Ctrl+F2再次動態調試剖析器,為要找到IAT表中的函數是怎麼被加密處理的,需要在地址00455170處下Dword型的硬體寫入斷點,4次F9後地址00455170處被加密的系統API的函數的地址顯示出來了,。通過調用GetProcAddress函數擷取到的系統API函數的地址儲存到了ds:[ECX]中,值得注意。
F8單步偵錯工具走幾步,發現地址00470F42處調用的函數00471620使用來給IAT表中系統API進行加密處理的。
F7單步跟進函數00471620進行分析發現,通過置換的方式將ds:[ECX]處的函數地址給修改了。
OK,程式在調用被加密處理的IAT表中函數時,最終函數調用的還是系統的API也就是說只是給系統的API增加了調用的代理函數。既然是這樣,那就將修改IAT表中系統API函數的代碼給path掉也就是NOP掉。
將修改IAT表中函數調用地址的彙編代碼mov dword ptr ds:[ecx], eax修改為兩條nop指令,然後F8單步運行程式,沒什麼問題。
F9運行程式,由於根據ESP定律下的硬體寫入斷點還在,因此程式會斷在設定的硬體寫入斷點處,F8單步幾步即可找到程式真實OEP,。
很顯然,加殼程式的真實OEP的VA地址為0045159C,F7跟進到OEP處。工具搞起,使用Load PE結合ImportREC或者Scylla_x86(剪下掉無效的函數指標)對加殼程式進行完美的脫殼。
運行一下脫殼後的程式,驗證脫殼成功。
手動脫Mole Box殼總結文檔和脫殼程式的:http://download.csdn.net/detail/qq1084283172/8908073