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