手动脱UPX壳的几种方法
UPX是一種常見的壓縮殼。通過PEID檢測到是UPX的殼的話,可以用如下四種方式來脫殼:
單步跟蹤法、ESP定律、內存鏡像法、POPAD查找法。
1.單步跟蹤法。就是使用ollydbg(簡稱OD)加載程序后,按F8進行單步步過。如果遇到程序向上跳轉(紅色箭頭表示跳轉實現),則在程序命令的下一行按F4,將程序運行到所選位置。要保證程序一直向下跳轉,否則運行一個向上跳轉,就會跳到殼的循環當中,就出不來了。運行到一定代碼后,如果看到一個比較大的跳轉,可能是jmp,也可能是ret。跳轉之后的代碼是popad,一般就是到了程序的OEP了。然后脫殼即可。
2.ESP定律。這個是利用堆棧平衡的原理,如果具體想了解什么是ESP定律和堆棧平衡,可以看這個鏈接的帖子:http://www.pediy.com/bbshtml/BBS6/pediy6083.htm
一般操作步驟:使用OD加載程序后,按F8進行單步跟蹤,注意右上角的寄存器窗口,當發現ESP和EIP的值同時變紅時(表示同時發生了變化)。在寄存器窗口中點擊右鍵,選擇“數據窗口中跟隨”。然后在右下角的內存窗口中,點擊右鍵,選擇“斷點”——“硬件訪問”——“字”。最后按F9運行程序,就會直接來到程序的OEP附件了。最后記得要刪除剛剛下的硬件斷點。通過菜單欄上選擇“調試”——“硬件斷點”,就會看到我們下的斷點,刪除即可。
3.內存鏡像法。加載程序,按CTRL+M,或者點工具欄上的M按鈕。打開內存窗口。在資源這一行上按F2下斷點,即“.rsrc”這一行。然后按F9運行程序。再按CTRL+M打開內存窗口,在數據行上下斷點(按F2)。即PE頭的下一行。下斷后,再按F9運行,就會達到程序的OEP附近了。
4.POPAD查找法。加載程序后,按CTRL+F進行查找。在查找框中輸入“popad”,把“整個塊”的復選框去掉。按后回車,就會來到程序OEP的附件了。按后按F4,將程序運行到當前位置,再單步跟蹤幾次就到OEP了。
總結
以上是生活随笔為你收集整理的手动脱UPX壳的几种方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 包含Iphlpapi.h 编译错误 er
- 下一篇: 获取PE文件的区段表