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