UPX脱壳
什么是加殼
加殼是一種程序的保護機制,它可以保護我們的程序不那么容易的被逆向出來。不能直接用IDA分析出來。
其原理為經過一段加殼程序得到一個新的程序,我們原來的程序就在新的程序中的一部分,生成的新程序中也會多一段代碼,多的一部分就是解密代碼。
加殼一般分為兩類,一種是加密加殼,其目的就是為了防止逆向而存在的一種殼。另外一種就是壓縮殼,將很大的,有很多重復數據的程序壓縮成很小的程序,在運行的過程當中動態解壓。其中UPX就是一種壓縮殼。
UPX脫殼
加殼可執行文件 UPX sample.exe
脫殼執行文件 UPX -d sample.exe (很多時候不管用)
所以要學會手動脫殼
手動脫殼的目標:
1.找到原始程序的入口地址 (OEP)
2.再原始程序入口地址處設置硬件斷點(下次調試可快快速進入原始代碼,硬件調試不會修改數據)
進階目標:
脫殼到文件,并修復運行。
脫殼步驟
先查殼:
發現是UPX殼,然后用IDA打開
發現也是無法靜態分析出來,于是我們就開始調試。
由于前面已經講過UPX是個壓縮殼,我們只需要找到這個程序頭部的壓縮代碼的終點(也就是原始代碼的起點即可)
在一直單步過發現有return 或 end 之類的命令之后直接單步進入。
進入之后就發現了原始的匯編代碼,但是無法查看其偽代碼,需要新建一個函數,然后就可以查看偽代碼了。
這樣就完成了手動脫UPX殼
總結
- 上一篇: NVIDIA TX2---Tegra架构
- 下一篇: OSChina 周一乱弹 —— 大学老教