殼是一段執(zhí)行于原始代碼前的代碼。原始程序的代碼在家可的過(guò)程中可能被壓縮、加密等,當(dāng)加殼后的文件執(zhí)行時(shí),殼這段代碼先于原始程序運(yùn)行,把壓縮、加密等后的代碼還原成原始程序代碼,然后再把執(zhí)行權(quán)交給原始代碼。
加殼的全稱(chēng)應(yīng)該是可執(zhí)行程序資源壓縮,壓縮后的程序可以直接運(yùn)行。加殼的另一種常用方法是在二進(jìn)制的程序中植入一段代碼,在運(yùn)行的時(shí)候優(yōu)先取得程序的控制權(quán),做一些額外的工作,大多數(shù)病毒就是基于此原理。加殼的程序經(jīng)常想盡辦法阻止外部程序或軟件對(duì)加殼程序的反匯編分析或者動(dòng)態(tài)分析,以達(dá)到它不可告人的目的。這種技術(shù)也常用來(lái)保護(hù)軟件版權(quán),防止被軟件破解。加殼工具通常分為壓縮殼和加密殼兩類(lèi)。壓縮殼的特點(diǎn)是減小軟件體積大小,加密保護(hù)不是重點(diǎn);加密殼種類(lèi)比較多,不同的殼側(cè)重點(diǎn)不同,一些殼單純保護(hù)程序,另一些殼提供額外的功能,如提供注冊(cè)機(jī)制,使用次數(shù),時(shí)間限制等。
軟件的殼分為加密殼、壓縮殼、偽裝殼、多層殼等,目的都是為了隱藏程序真正的OEP(入口點(diǎn),防止被破解)。
作者編好軟件后,編譯成exe可執(zhí)行文件。
1.有一些版權(quán)信息需要保護(hù)起來(lái),不想讓別人隨便改動(dòng),如作者的姓名,即為了保護(hù)軟件不被破解,通常都是采用加殼來(lái)進(jìn)行保護(hù)。
2.需要把程序搞的小一點(diǎn),從而方便使用。于是,需要用到一些軟件,它們能將exe可執(zhí)行文件壓縮。
3.在黑客界給木馬等軟件加殼脫殼以躲避殺毒軟件。實(shí)現(xiàn)上述功能,這些軟件稱(chēng)為加殼軟件。
脫殼分為手動(dòng)和自動(dòng)兩種:
手動(dòng):TRW2000、TR、SOFTICE等調(diào)試工具對(duì)付,對(duì)脫殼者有一定水平要求,涉及到很多匯編語(yǔ)言和軟件調(diào)試方面的知識(shí)。
自動(dòng):用專(zhuān)門(mén)的脫殼工具來(lái)脫。
最常用某種壓縮軟件都有他人寫(xiě)的反壓縮工具對(duì)應(yīng),有些壓縮工具自身能解壓,如UPX;如ASPACK,就需要UNASPACK對(duì)付,好處是簡(jiǎn)單,缺點(diǎn)是版本更新了就沒(méi)用了。
脫殼用專(zhuān)門(mén)的脫殼工具來(lái)對(duì)付,最流行的是PROCDUMP v1.62,可對(duì)付各種壓縮軟件的壓縮檔。
脫殼的基本原則就是單步跟蹤,只能往前,不能往后。
脫殼流程:查殼->尋找OEP->DUMP->修復(fù)
尋找OEP的一般思路如下:先看殼是加密殼還是壓縮殼,壓縮殼相對(duì)來(lái)說(shuō)容易些,一般是沒(méi)有異常,找到對(duì)應(yīng)的popad后就能到入口,跳到入口的方式一般為:jmp OEP,push OEP ret, call OEP, je OEP(段之間的大跳轉(zhuǎn)),OD的反匯編窗口里都是同一個(gè)段的內(nèi)容,所以更好區(qū)別是否是段間跳轉(zhuǎn)。我們知道文件被一些壓縮加殼軟件加密,下一步我們就要分析加密軟件的名稱(chēng)、版本。因?yàn)椴煌浖踔敛煌姹炯拥臍?,脫殼處理的方法都不相同?br>
脫殼工具:
文件分析工具(偵測(cè)殼的類(lèi)型):Fi, GetTyp, peid, pe-scan;
OEP入口查找工具:SoftICE, TRW, ollydbg, loader, peid;
dump工具:IceDump, TRW, PEditor, ProcDump32, LordPE;
PE文件編輯工具:PEditor,ProcDump32, LordPE;
重建Import Table工具:ImportREC, ReVirgin;
ASProtect脫殼專(zhuān)用工具:Caspr(ASPr V1.1-V1.2有效),Rad(只對(duì)ASPr V1.1有效),loader,peid
(1)Aspack: 用的最多,但只要用UNASPACK或PEDUMP32脫殼就行了
(2)ASProtect+aspack:次之,國(guó)外的軟件多用它加殼,脫殼時(shí)需要用到SOFTICE+ICEDUMP,需要一定的專(zhuān)業(yè)知識(shí)。
(3)Upx: 可以用UPX本身來(lái)脫殼,但要注意版本是否一致,用-D 參數(shù)
(4)Armadill: 可以用SOFTICE+ICEDUMP脫殼,比較煩
(5)Dbpe: 國(guó)內(nèi)比較好的加密軟件,新版本暫時(shí)不能脫,但可以破解
(6)NeoLite: 可以用自己來(lái)脫殼
(7)Pcguard: 可以用SOFTICE+ICEDUMP+FROGICE來(lái)脫殼
(8)Pecompat: 用SOFTICE配合PEDUMP32來(lái)脫殼,但不要專(zhuān)業(yè)知識(shí)
(9)Petite: 有一部分的老版本可以用PEDUMP32直接脫殼,新版本脫殼時(shí)需要用到SOFTICE+ICEDUMP,需要一定的專(zhuān)業(yè)知識(shí)
(10)WWpack32: 和PECOMPACT一樣其實(shí)有一部分的老版本可以用PEDUMP32直接脫殼,不過(guò)有時(shí)候資源無(wú)法修改,也就無(wú)法漢化,所以最好還是用SOFTICE配合 PEDUMP32脫殼 我們通常都會(huì)使用Procdump32這個(gè)通用脫殼軟件,它是一個(gè)強(qiáng)大的脫殼軟件,他可以解開(kāi)絕大部分的加密外殼,還有腳本功能可以使用腳本輕松解開(kāi)特定外殼的加密文件。另外很多時(shí)候我們要用到exe可執(zhí)行文件編輯軟件ultraedit。我們可以下載它的漢化注冊(cè)版本,它的注冊(cè)機(jī)可從網(wǎng)上搜到。ultraedit打開(kāi)一個(gè)中文軟件,若加殼,許多漢字不能被認(rèn)出 ultraedit打開(kāi)一個(gè)中文軟件,若未加殼或已經(jīng)脫殼,許多漢字能被認(rèn)出 ultraedit可用來(lái)檢驗(yàn)殼是否脫掉,以后它的用處還很多,請(qǐng)熟練掌握例如,可用它的替換功能替換作者的姓名為你的姓名注意字節(jié)必須相等,兩個(gè)漢字替兩個(gè),三個(gè)替三個(gè),不足處在ultraedit編輯器左邊用00補(bǔ)。
殼脫法:
1、aspack殼:脫殼可以用unaspack或casper
(1)unaspack,使用方法類(lèi)似language,傻瓜式軟件,運(yùn)行后選取待脫殼的軟件即可,缺點(diǎn)是只能脫aspack早些時(shí)候版本的殼,不能脫高版本的殼
(2)casper: a),待脫殼的軟件(如aa.exe)和casper.exe位于同一目錄下,執(zhí)行window起始菜單的運(yùn)行,鍵入casper aa.exe脫殼后的文件為aa.ex_,刪掉原來(lái)的aa.exe,將aa.ex_改名為aa.exe即可。使用方法類(lèi)似fi,優(yōu)點(diǎn)是可以脫aspack任何版本的殼,脫殼能力極強(qiáng),缺點(diǎn)是Dos界面。 b),將aa.exe的圖標(biāo)拖到casper.exe的圖標(biāo)上,若已偵測(cè)出是aspack殼,用unaspack脫殼出錯(cuò),說(shuō)明是aspack高版本的殼,用casper脫即可。
2、upx殼:脫殼可用upx
待脫殼的軟件(如aa.exe)和upx.exe位于同一目錄下,執(zhí)行windows起始菜單的運(yùn)行,鍵入upx -d aa.exe。
3、PEcompact殼:脫殼可用unpecompact
使用方法類(lèi)似lanuage傻瓜式軟件,運(yùn)行后選取待脫殼的軟件即可。
4、procdump:萬(wàn)能脫殼,但不精,一般不要用
使用方法:運(yùn)行后,先指定殼的名稱(chēng),再選定欲脫殼軟件,確定即可,脫殼后的文件大于原文件,由于脫殼軟件很成熟,手動(dòng)脫殼一般用不到。
偵測(cè)殼和軟件所用編寫(xiě)語(yǔ)言的軟件,因?yàn)槊摎で耙闅さ念?lèi)型。
1、偵測(cè)殼的軟件fileinfo.exe簡(jiǎn)稱(chēng)fi.exe
2、偵測(cè)殼和軟件所用編寫(xiě)語(yǔ)言的軟件language.exe,推薦language2000中文版(專(zhuān)門(mén)檢測(cè)加殼類(lèi)型)
3、軟件常用編寫(xiě)語(yǔ)言Delphi,VisualBasic(VB,最難破),VisualC(VC)
一、PE格式
PE是Portable Executable File Format(可移植的執(zhí)行體)簡(jiǎn)寫(xiě)。是windows平臺(tái)上的主流可執(zhí)行文件格式。
學(xué)習(xí)PE格式的方法是自己先準(zhǔn)備一個(gè)十六進(jìn)制工具,如HexWorkshop,WinHex,用這些工具打開(kāi)一個(gè)EXE文件對(duì)照著學(xué)。強(qiáng)烈推薦用Stud_PE v.2.2.0.5這款工具輔助學(xué)習(xí)PE格式。PE格式學(xué)習(xí)的重點(diǎn)是在輸入表(Import Table)這塊。
二、SEH格式
結(jié)構(gòu)化異常處理(Structured Exception Handling)是windows操作系統(tǒng)處理程序錯(cuò)誤或異常的技術(shù)。SEH是windows操作系統(tǒng)的一種系統(tǒng)機(jī)制,與特定的程序設(shè)計(jì)語(yǔ)言無(wú)關(guān)。
外殼程序里大量使用了SEH,如果不了解SEH,將會(huì)使你跟蹤十分困難。由于 Ollydbg 對(duì)SEH處理異常靈活,因此脫殼用Ollydbg會(huì)大大提高效率。
三、認(rèn)識(shí)殼
一般殼的裝載過(guò)程:
(1)獲取殼自己所需要使用的API地址
(2)解密源程序的各個(gè)區(qū)塊(section)的數(shù)據(jù)
(3)重定位
(4)HOOK-API
(5)跳轉(zhuǎn)到程序原入口點(diǎn)(OEP)
四、常見(jiàn)壓縮殼與加密殼
常用壓縮殼:
(1)ASPack:是款Win32可執(zhí)行文件壓縮軟件,可壓縮windows 32位可執(zhí)行文件(.exe)以及庫(kù)文件(.dll, .ocx),文件壓縮比率高達(dá)40%-70%。
(2) UPX:是一個(gè)以命令行方式操作的可執(zhí)行文件經(jīng)典免費(fèi)壓縮程序,壓縮算法自己實(shí)現(xiàn),速度極快。(開(kāi)源)
(3)PECompact:同樣也是一款能壓縮可執(zhí)行文件的工具(支持EXE、DLL、SCR、OCX等文件)。相比同類(lèi)軟件,PECompact提供了多種壓縮項(xiàng)目的選擇,用戶(hù)可以根據(jù)需要確定哪些內(nèi)部資源需要壓縮處理。同時(shí),該軟件還提供了加解密的插件接口功能。
常用加密殼:
(1)ASProtect:是一款非常強(qiáng)大的Windows 32位保護(hù)工具,這4、5年來(lái),其一直在更新進(jìn)步。其開(kāi)發(fā)者是俄國(guó)人Alexey Solodovnikov。它擁有壓縮、加密、反跟蹤代碼、反-反匯編代碼、CRC校驗(yàn)和花指令等保護(hù)措施。它使用Blowfish、Twofish、TEA等強(qiáng)勁的加密算法,還用RSA1024作為注冊(cè)密鑰生成器。它還通過(guò)API鉤子(API hooks,包括Import hooks(GPA hook)和Export hooks)與加殼的程序進(jìn)行通信。甚至用到了多態(tài)變形引擎(Polymorphic Engine)。反Apihook代碼(Anti-Apihook Code)和BPE32的多態(tài)變形引擎(BPE32的Polymorphic Engine)。并且ASProtect為軟件開(kāi)發(fā)人員提供SDK,實(shí)現(xiàn)加密程序內(nèi)外結(jié)合。
(2) Armadillo加密殼:也稱(chēng)穿山甲,是一款應(yīng)用面較廣的殼。可以運(yùn)用各種手段來(lái)保護(hù)你的軟件,同時(shí)也可以為軟件加上種種限制,包括時(shí)間、次數(shù),啟動(dòng)畫(huà)面等等!很多商用軟件采用其加殼。Armadillo對(duì)外發(fā)行時(shí)有Public,Custom兩個(gè)版本。Public是公開(kāi)演示的版本,Custom是注冊(cè)用戶(hù)拿到的版本。只有Custom才有完整的功能,Public版有功能限制,沒(méi)什么強(qiáng)度,不建議采用。
(3)EXECryptor加密殼:也是一款猛殼,可能由于兼容性等原因,采用其保護(hù)的商業(yè)軟件不是太多。這款殼的特點(diǎn)是Anti-Debug做的比較隱蔽,另外就是采用了虛擬機(jī)保護(hù)一些關(guān)鍵代碼。
(4)hemida加密殼:Themida是Oreans的一款商業(yè)殼,官方鏈接:www.oreans.com。Themida 1.1以前版本帶驅(qū)動(dòng),穩(wěn)定性有些影響。Themida最大特點(diǎn)就是其虛擬機(jī)保護(hù)技術(shù),因此在程序中擅用SDK,將關(guān)鍵的代碼讓Themida用虛擬機(jī)保護(hù)起來(lái)。Themida最大的缺點(diǎn)就是生成的軟件有些大。WinLicense這款殼和Themida是同一公司的一個(gè)系列產(chǎn)品,WinLicense主要多了一個(gè)協(xié)議,可以設(shè)定使用時(shí)間,運(yùn)行次數(shù)等功能,兩者核心保護(hù)是一樣的。
(5) VMProtect: VMProtect是一款純虛擬機(jī)保護(hù)軟件,官方鏈接:www.VMProtect.ru。它是當(dāng)前最強(qiáng)的虛擬機(jī)保護(hù)軟件,經(jīng)VMProtect處理過(guò)的代碼,至今還沒(méi)有人公開(kāi)宣稱(chēng)能還原。 但也有缺點(diǎn),就是會(huì)影響程序速度,因此在一些對(duì)速度要求很高的場(chǎng)合就不適合用了。VMProtect 1.22.3之前是免費(fèi)版,可以支持EXE,DLL等文件。更高版本需要購(gòu)買(mǎi),其支持驅(qū)動(dòng)的保護(hù)?,F(xiàn)在流行的做法,先用VMProtect將你的核心代碼處理一下,再選用一款兼容性好的殼保護(hù)。
五、文件類(lèi)型分析
文件分析工具有PEID,F(xiàn)ileInfo等。
PEID:原理是利用查特征串搜索來(lái)完成識(shí)別工作的。