手动脱Mole Box壳实战总结
作者: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
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的手动脱Mole Box壳实战总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IntelliJ IDEA 中,英官网
- 下一篇: MairaDB 函数(二)