自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

網(wǎng)絡(luò)安全攻防:軟件逆向之脫殼

安全
在程序運行時殼的代碼先運行,然后再運行原來的程序。主要目的是為了隱藏程序的OEP(入口點),防止外部軟件對程序的反匯編分析或動態(tài)分析。

[[390863]]

“殼”是一種對程序進行加密的程序,“殼”形象地表現(xiàn)了這個功能。我們可以把被加殼的程序當成食物,而加殼程序就是在外面加上一層堅硬的外殼,防止別人去竊取其中的程序。加殼后的程序依然可以被直接運行。在程序運行時殼的代碼先運行,然后再運行原來的程序。主要目的是為了隱藏程序的OEP(入口點),防止外部軟件對程序的反匯編分析或動態(tài)分析。許多病毒通過加殼來達到免殺的目的,但殼也用在保護正版軟件不被破解。技術(shù)沒有對錯之分,關(guān)鍵看使用的目的。

1. 殼的分類

(1)壓縮殼

壓縮殼的作用就是壓縮程序的大小。壓縮殼并不會對程序進行修改,而是改變了存儲方式,使程序更小。運行程序時先運行殼的解壓縮程序,解壓源程序到內(nèi)存中,然后執(zhí)行。常見的壓縮殼有UPX,可以將一般程序壓縮到原來體積的30%。對upx_test進行壓縮,原來大小為188 KB,壓縮后為33 KB,只有原來的17.54%,詳細信息如圖1所示。

圖1  壓縮upx_test

用PEiD進行查殼,測試一下是不是有殼,如圖2所示,確實已經(jīng)有了UPX的壓縮殼。

圖2  PEiD查殼(UPX)

(2)加密殼

加密殼的作用是保護程序不被破解。一般情況下,加密殼加密之后的程序大小視情況而定,有些加密殼也有壓縮殼的效果。加密殼會對程序進行修改,如打亂代碼、混淆等。常見的加密殼有ASProtect、EXECrptor、Armadillo等。如圖3所示是用ASProtect進行加密。

圖3  ASProtect加密

用PEiD進行查殼,測試一下是不是有殼,如圖4所示,確實已經(jīng)有了APS的加密殼。

圖4  PEiD查殼(APS)

3)虛擬機保護殼

虛擬機保護殼是近些年開始流行的加密保護方案,關(guān)鍵技術(shù)是軟件實現(xiàn)CPU的功能。由于程序不遵循Intel的OPCode標志,所以分析起來會很麻煩。

2. 脫殼

對于不同的殼,網(wǎng)上有很多對應(yīng)的脫殼工具。在脫殼前一般先用查殼工具,查加的是什么殼,然后找到對應(yīng)的脫殼工具進行脫殼。以之前的UPX殼壓縮的upx_test.exe為例,進行脫殼演示。如圖5是PEiD查殼結(jié)果,通過查殼我們知道這是UPX的殼,然后用對應(yīng)的脫殼工具進行脫殼。

圖5  PEiD查殼結(jié)果

這里用的是UPXshell進行演示。將程序拖入到UPXshell中單擊“GO”即可得到脫殼之后的程序。脫殼之后會覆蓋原來的帶殼的程序,所以在脫殼前要做好備份,如圖6所示。

圖6  脫殼

脫殼是逆向分析的必備技能之一。雖然用軟件脫殼十分方便,但還是會存在許多限制,如要找對應(yīng)的脫殼軟件,較新、較強的殼一般無法用軟件脫殼等。所以還是有必要了解一些脫殼的基本知識。

(1)OEP

脫殼的第一步是找到源程序的OEP(Original Entry Point)。OEP標志是否已經(jīng)運行到源程序。對于一些簡單的壓縮殼,找到OEP就意味著已經(jīng)脫殼成功。

單步調(diào)試法:加殼程序開始運行時,棧的情況與解壓后主程序的棧情況完全相同。所以很多加殼程序載入 OD 后都會停留在 pushad/pushfd 處,將原來的棧先保存下來,所以,pushad/pushfd肯定就有對應(yīng)的popad/popfd。只要找到popad/popfd就可以快速地找到OEP。將upx_test.exe載入OllyDbg,一直按F8,如果遇到向上跳轉(zhuǎn)就按F4運行到下一行。直到遇到popad,下面會有一個比較大的jmp跳轉(zhuǎn)。如圖7和圖8所示。跳轉(zhuǎn)之后的地方就是程序的OEP,如圖9所示。

圖7  單步調(diào)試1

圖8  單步調(diào)試2

圖9  查找到OEP

這里只介紹了比較簡單而且比較通用的一種脫殼方法。實際中還有很多巧妙的方法,如ESP定律、利用編輯語言的特點等。

(2)內(nèi)存映像轉(zhuǎn)存

找到OEP之后,程序已經(jīng)在內(nèi)存中,這時內(nèi)存中的程序最接近加殼前的程序。只需要將內(nèi)存中的映像轉(zhuǎn)存出來,一般的殼就結(jié)束了。內(nèi)存映像轉(zhuǎn)存(dump)工具有好多,如LordPE、PETools。而且OllyDbg中也有OllyDump插件可以使用。

下面就可以進行脫殼了。右鍵單擊“push ebp”選擇dump process,單擊“dump”按鈕脫殼。會生成一個脫殼后的程序,默認文件名會在原文件名后面加上“_dump”。最后進行查殼,顯示已經(jīng)無殼,并且成功運行,表示脫殼成功,如圖10所示。

圖10  內(nèi)存映像轉(zhuǎn)存

(3)重建導出表

很多加密殼會對導入表做手腳。這時,就算成功脫殼,程序也是無法運行的。在導入表中起關(guān)鍵作用的是IAT,所以很多時候修復導出表也叫修復IAT??梢允褂胕mportREC重建導出表,如圖11所示。

圖11  重建導出表 

 

責任編輯:龐桂玉 來源: 計算機與網(wǎng)絡(luò)安全
相關(guān)推薦

2021-03-24 09:46:46

網(wǎng)絡(luò)安全軟件反匯編

2021-05-21 12:52:47

網(wǎng)絡(luò)安全Android App虛擬機

2021-06-16 09:40:44

網(wǎng)絡(luò)安全物聯(lián)網(wǎng)代碼

2021-05-07 14:12:50

網(wǎng)絡(luò)安全Web安全CSRF

2021-04-23 13:35:41

網(wǎng)絡(luò)安全藍牙Wi-Fi

2021-04-27 10:00:27

網(wǎng)絡(luò)安全WebURL

2021-05-08 15:22:31

網(wǎng)絡(luò)安全Web安全SQL

2021-04-25 21:45:25

網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全攻防ZigBee安全

2021-05-13 20:38:30

2021-04-30 19:38:42

網(wǎng)絡(luò)安全WebHTTP

2021-04-13 11:30:09

網(wǎng)絡(luò)安全無線網(wǎng)絡(luò)WEP

2021-04-15 11:55:40

網(wǎng)絡(luò)安全無線網(wǎng)絡(luò)WPA

2021-03-22 10:52:58

網(wǎng)絡(luò)安全Android數(shù)據(jù)安全

2021-02-02 14:02:48

網(wǎng)絡(luò)安全對稱密碼密鑰

2021-04-06 10:30:49

網(wǎng)絡(luò)安全暗網(wǎng)互聯(lián)網(wǎng)

2021-03-15 13:50:24

網(wǎng)絡(luò)安全Android安全機制

2021-02-22 08:35:41

網(wǎng)絡(luò)安全Linux系統(tǒng)安全

2019-01-10 15:44:00

2021-05-24 11:40:50

網(wǎng)絡(luò)安全數(shù)據(jù)庫安全服務(wù)器

2021-02-23 09:12:46

網(wǎng)絡(luò)安全系統(tǒng)安全OpenSS
點贊
收藏

51CTO技術(shù)棧公眾號