什么是加殼
加殼的全稱應(yīng)該是可執(zhí)行程序資源壓縮,壓縮后的程序可以直接運(yùn)行。加殼,顧名思義,就是給一個(gè)東西加上一個(gè)殼,只不過(guò)這里是程序。就好比這大自然中的種子一樣,為了保護(hù)自己,有一層殼,要想看到里面的東西,就要?jiǎng)冮_這層殼。 加殼的另一種常用的方式是在二進(jìn)制的程序中植入一段代碼,在運(yùn)行的時(shí)候優(yōu)先取得程序的控制權(quán),之后再把控制權(quán)交還給原始代碼,這樣做的目的是隱藏程序真正的OEP(入口點(diǎn),防止被破解)。大多數(shù)病毒就是基于此原理。 加殼的程序需要阻止外部程序或軟件對(duì)加殼程序本身的反匯編分析或者動(dòng)態(tài)分析,以達(dá)到保護(hù)殼內(nèi)原始程序以及軟件不被外部程序破壞,保證原始程序正常運(yùn)行。這種技術(shù)也常用來(lái)保護(hù)軟件版權(quán),防止軟件被破解。但對(duì)于病毒,加殼可以繞過(guò)一些殺毒軟件的掃描,從而實(shí)現(xiàn)它作為病毒的一些入侵或破壞的一些特性。 加殼的工具分為壓縮殼和加密殼: * UPX ASPCAK TELOCK PELITE NSPACK … * * ARMADILLO ASPROTECT ACPROTECT EPE SVKP …*
什么是脫殼
脫殼就是將外面的保護(hù)程序脫掉,看到里面的程序。對(duì)于有殼的程序,每次程序的入口點(diǎn)總是從殼開始,,這個(gè)入口點(diǎn)是EP,那么源程序的入口點(diǎn)是OEP,殼將真正的OEP隱藏了,我們脫殼就是修改程序的入口點(diǎn)。
如何脫殼
如果沒有基礎(chǔ)的匯編知識(shí),那就查出相應(yīng)的殼,用相應(yīng)的脫殼機(jī)進(jìn)行脫殼,那如果,脫殼機(jī)無(wú)法脫呢?手動(dòng)脫殼!
基礎(chǔ)知識(shí)
1.PUSHAD (壓棧) 代表程序的入口點(diǎn), 2.POPAD (出棧) 代表程序的出口點(diǎn),與PUSHAD想對(duì)應(yīng),一般找到這個(gè)OEP就在附近 3.OEP:程序的入口點(diǎn),軟件加殼就是隱藏了OEP(或者用了假的OEP/FOEP),只要我們找到程序真正的OEP,就可以立刻脫殼。
脫殼的方法清單
詳細(xì)請(qǐng)參考 https://www.jb51.net/softjc/720126.html
方法一:?jiǎn)尾礁櫡?/strong>
1.用OD載入,點(diǎn)“不分析代碼!” 2.單步向下跟蹤F8,實(shí)現(xiàn)向下的跳。也就是說(shuō)向上的跳不讓其實(shí)現(xiàn)!(通過(guò)F4) 3.遇到程序往回跳的(包括循環(huán)),我們?cè)谙乱痪浯a處按F4(或者右健單擊代碼,選擇斷點(diǎn)——>運(yùn)行到所選) 4.綠色線條表示跳轉(zhuǎn)沒實(shí)現(xiàn),不用理會(huì),紅色線條表示跳轉(zhuǎn)已經(jīng)實(shí)現(xiàn)! 5.如果剛載入程序,在附近就有一個(gè)CALL的,我們就F7跟進(jìn)去,不然程序很容易跑飛,這樣很快就能到程序的OEP 6.在跟蹤的時(shí)候,如果運(yùn)行到某個(gè)CALL程序就運(yùn)行的,就在這個(gè)CALL中F7進(jìn)入 7.一般有很大的跳轉(zhuǎn)(大跨段),比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN的一般很快就會(huì)到程序的OEP。 PS:在有些殼無(wú)法向下跟蹤的時(shí)候,我們可以在附近找到?jīng)]有實(shí)現(xiàn)的大跳轉(zhuǎn),右鍵–>“跟隨”,然后F2下斷,Shift+F9運(yùn)行停在“跟隨”的位置,再取消斷點(diǎn),繼續(xù)F8單步跟蹤。一般情況下可以輕松到達(dá)OEP!
方法二:ESP定律法
ESP定理脫殼(ESP在OD的寄存器中,我們只要在命令行下ESP的硬件訪問斷點(diǎn),就會(huì)一下來(lái)到程序的OEP了?。?1.開始就點(diǎn)F8,注意觀察OD右上角的寄存器中ESP有沒突現(xiàn)(變成紅色)。 (這只是一般情況下,更確切的說(shuō)我們選擇的ESP值是關(guān)鍵句之后的第一個(gè)ESP值) 2.在命令行下:dd XXXXXXXX(指在當(dāng)前代碼中的ESP地址,或者是hr XXXXXXXX),按回車! 3.選中下斷的地址,斷點(diǎn)—>硬件訪—>WORD斷點(diǎn)。 4.按一下F9運(yùn)行程序,直接來(lái)到了跳轉(zhuǎn)處,按下F8,到達(dá)程序OEP。
方法三:內(nèi)存鏡像法
1:用OD打開軟件! 2:點(diǎn)擊選項(xiàng)——調(diào)試選項(xiàng)——異常,把里面的忽略全部√上!CTRL+F2重載下程序! 3:按ALT+M,打開內(nèi)存鏡象,找到程序的第一個(gè).rsrc.按F2下斷點(diǎn),然后按SHIFT+F9運(yùn)行到斷點(diǎn),接著再按ALT+M,打開內(nèi)存鏡象,找到程序的第一個(gè).rsrc.上面的.CODE(也就是00401000處),按F2下斷點(diǎn)!然后按SHIFT+F9(或者是在沒異常情況下按F9),直接到達(dá)程序OEP!
方法四:一步到達(dá)OEP
1.開始按Ctrl+F,輸入:popad(只適合少數(shù)殼,包括UPX,ASPACK殼),然后按下F2,F(xiàn)9運(yùn)行到此處 2.來(lái)到大跳轉(zhuǎn)處,點(diǎn)下F8,到達(dá)OEP!
方法五:最后一次異常法
1:用OD打開軟件 2:點(diǎn)擊選項(xiàng)——調(diào)試選項(xiàng)——異常,把里面的√全部去掉!CTRL+F2重載下程序 3:一開始程序就是一個(gè)跳轉(zhuǎn),在這里我們按SHIFT+F9,直到程序運(yùn)行,記下從開始按SHIFT+F9到程序運(yùn)行的次數(shù)m! 4:CTRL+F2重載程序,按SHIFT+F9(這次按的次數(shù)為程序運(yùn)行的次數(shù)m-1次) 5:在OD的右下角我們看見有一個(gè)”SE 句柄”,這時(shí)我們按CTRL+G,輸入SE 句柄前的地址! 6:按F2下斷點(diǎn)!然后按SHIFT+F9來(lái)到斷點(diǎn)處! 7:去掉斷點(diǎn),按F8慢慢向下走! 8:到達(dá)程序的OEP!
方法六:模擬跟蹤法
1:先試運(yùn)行,跟蹤一下程序,看有沒有SEH暗樁之類 2:ALT+M打開內(nèi)存鏡像,找到(包含=SFX,imports,relocations) 內(nèi)存鏡像,項(xiàng)目 30 地址=0054B000 大小=00002000 (8192.) Owner=check 00400000 區(qū)段=.aspack 包含=SFX,imports,relocations 類型=Imag 01001002 訪問=R 初始訪問=RWE 3:地址為0054B000,如是我們?cè)诿钚休斎雝c eip<0054B000,回車,正在跟蹤ing。。 PS:大家在使用這個(gè)方法的時(shí)候,要理解他是要在怎么樣的情況下才可以使用
方法七:“SFX”法
1:設(shè)置OD,忽略所有異常,也就是說(shuō)異常選項(xiàng)卡里面都打上勾 2:切換到SFX選項(xiàng)卡,選擇“字節(jié)模式跟蹤實(shí)際入口(速度非常慢)”,確定。 3:重載程序(如果跳出是否“壓縮代碼?”選擇“否”,OD直接到達(dá)OEP) ps:這種方法不要濫用得好,鍛煉能力為妙。
這里最常用的ESP定律法(堆棧平衡原理),為什么說(shuō)是ESP呢,當(dāng)所有的寄存器都?jí)喝霔r(shí)(pushad),esp地址的是指向棧頂?shù)牡刂返?,?dāng)殼將執(zhí)行權(quán)交給源程序時(shí),esp地址要回到pushad之前的狀態(tài),這時(shí)就可以看到esp變化了,這就是源程序的入口點(diǎn)。(匯編,匯編,匯編?。?/p>
什么是加殼和脫殼技術(shù)?加殼和脫殼技術(shù)是什么意思?
什么是加殼和脫殼技術(shù)?加殼和脫殼技術(shù)是什么意思?加殼,是一種通過(guò)一系列數(shù)學(xué)運(yùn)算,將可執(zhí)行程序文件或動(dòng)態(tài)鏈接庫(kù)文件的編碼進(jìn)行改變(目前還有一些加殼軟件可以壓縮、加密驅(qū)動(dòng)程序),以達(dá)到縮小文件體積或加密程序編碼的目的。加殼一般是指保護(hù)程序資源的方法。
脫殼一般是指除掉程序的保護(hù),用來(lái)修改程序資源。馬甲”能穿也能脫。相應(yīng)的,有加殼也一定會(huì)有解殼(也叫脫殼)。脫殼主要有兩種方法:硬脫殼和動(dòng)態(tài)脫殼。
第一種,是硬脫殼,這是指找出加殼軟件的加殼算法,寫出逆向算法,就像壓縮和解壓縮一樣。由于,目前很多“殼”均帶有加密、變形的特點(diǎn),每次加殼生成的代碼都不一樣。硬脫殼對(duì)此無(wú)能為力,但由于其技術(shù)門檻較低,仍然被一些殺毒軟件所使用。
第二種,是動(dòng)態(tài)脫殼。由于加殼的程序運(yùn)行時(shí)必須還原成原始形態(tài),即加殼程序會(huì)在運(yùn)行時(shí)自行脫掉“馬甲”。目前,有一種脫殼方式是抓取(Dump)內(nèi)存中的鏡像,再重構(gòu)成標(biāo)準(zhǔn)的執(zhí)行文件。相比硬脫殼方法,這種脫殼方法對(duì)自行加密、變形的殼處理效果更好。
殼的概念
在一些計(jì)算機(jī)軟件里有一段專門負(fù)責(zé)保護(hù)軟件不被非法修改或反編譯的程序。它們一般都是先于程序運(yùn)行,拿到控制權(quán),然后完成它們保護(hù)軟件的任務(wù)。就像動(dòng)植物的殼一般都是在身體外面一樣理所當(dāng)然(但后來(lái)也出現(xiàn)了所謂的“殼中帶籽”的殼)。由于這段程序和自然界的殼在功能上有很多相同的地方,基于命名的規(guī)則,大家就把這樣的程序稱為“殼”了。就像計(jì)算機(jī)病毒和自然界的病毒一樣,其實(shí)都是命名上的方法罷了。 從功能上抽象,軟件的殼和自然界中的殼相差無(wú)幾。無(wú)非是保護(hù)、隱蔽殼內(nèi)的東西。而從技術(shù)的角度出發(fā),殼是一段執(zhí)行于原始程序前的代碼。原始程序的代碼在加殼的過(guò)程中可能被壓縮、加密……。當(dāng)加殼后的文件執(zhí)行時(shí),殼-這段代碼先于原始程序運(yùn)行,他把壓縮、加密后的代碼還原成原始程序代碼,然后再把執(zhí)行權(quán)交還給原始代碼。 軟件的殼分為加密殼、壓縮殼、偽裝殼、多層殼等類,目的都是為了隱藏程序真正的OEP(入口點(diǎn),防止被破解)。關(guān)于“殼”以及相關(guān)軟件的發(fā)展歷史請(qǐng)參閱吳先生的《一切從“殼”開始》。
作者編好軟件后,編譯成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)上述功能,這些軟件稱為加殼軟件。
(二)加殼軟件最常見的加殼軟件ASPACK ,UPX,PEcompact 不常用的加殼軟件WWPACK32;PE-PACK ;PETITE NEOLITE
(三)偵測(cè)殼和軟件所用編寫語(yǔ)言的軟件,因?yàn)槊摎ぶ耙樗臍さ念愋汀?1.偵測(cè)殼的軟件fileinfo.exe 簡(jiǎn)稱fi.exe(偵測(cè)殼的能力極強(qiáng)) 2.偵測(cè)殼和軟件所用編寫語(yǔ)言的軟件language.exe(兩個(gè)功能合為一體,很棒) 推薦language2000中文版(專門檢測(cè)加殼類型) 3.軟件常用編寫語(yǔ)言Delphi,VisualBasic(VB)---最難破,VisualC(VC)
(四)脫殼軟件。 軟件加殼是作者寫完軟件后,為了保護(hù)自己的代碼或維護(hù)軟件產(chǎn)權(quán)等利益所常用到的手段。目前有很多加殼工具,當(dāng)然有盾,自然就有矛,只要我們收集全常用脫殼工具,那就不怕他加殼了。軟件脫殼有手動(dòng)脫和自動(dòng)脫殼之分,下面我們先介紹自動(dòng)脫殼,因?yàn)槭謩?dòng)脫殼需要運(yùn)用匯編語(yǔ)言,要跟蹤斷點(diǎn)等,不適合初學(xué)者,但我們?cè)诤筮厡⑸宰鹘榻B。
加殼一般屬于軟件加密,現(xiàn)在越來(lái)越多的軟件經(jīng)過(guò)壓縮處理,給漢化帶來(lái)許多不便,軟件漢化愛好者也不得不學(xué)習(xí)掌握這種技能?,F(xiàn)在脫殼一般分手動(dòng)和自動(dòng)兩種,手動(dòng)就是用TRW2000、TR、SOFTICE等調(diào)試工具對(duì)付,對(duì)脫殼者有一定水平要求,涉及到很多匯編語(yǔ)言和軟件調(diào)試方面的知識(shí)。而自動(dòng)就是用專門的脫殼工具來(lái)脫,最常用某種壓縮軟件都有他人寫的反壓縮工具對(duì)應(yīng),有些壓縮工具自身能解壓,如UPX;有些不提供這功能,如:ASPACK,就需要UNASPACK對(duì)付,好處是簡(jiǎn)單,缺點(diǎn)是版本更新了就沒用了。另外脫殼就是用專門的脫殼工具來(lái)對(duì)付,最流行的是PROCDUMP v1.62 ,可對(duì)付目前各種壓縮軟件的壓縮檔。在這里介紹的是一些通用的方法和工具,希望對(duì)大家有幫助。我們知道文件的加密方式,就可以使用不同的工具、不同的方法進(jìn)行脫殼。下面是我們常常會(huì)碰到的加殼方式及簡(jiǎn)單的脫殼措施,供大家參考: 脫殼的基本原則就是單步跟蹤,只能往前,不能往后。脫殼的一般流程是:查殼->尋找OEP->Dump->修復(fù) 找OEP的一般思路如下: 先看殼是加密殼還是壓縮殼,壓縮殼相對(duì)來(lái)說(shuō)容易些,一般是沒有異常,找到對(duì)應(yīng)的popad后就能到入口,跳到入口的方式一般為。 我們知道文件被一些壓縮加殼軟件加密,下一步我們就要分析加密軟件的名稱、版本。因?yàn)椴煌浖踔敛煌姹炯拥臍?,脫殼處理的方法都不相同?/p>
常用脫殼工具:
1、文件分析工具(偵測(cè)殼的類型):Fi,GetTyp,peid,pe-scan,
2、OEP入口查找工具:SoftICE,TRW,ollydbg,loader,peid
3、dump工具:IceDump,TRW,PEditor,ProcDump32,LordPE
4、PE文件編輯工具PEditor,ProcDump32,LordPE
5、重建Import Table工具:ImportREC,ReVirgin
6、ASProtect脫殼專用工具:Caspr(ASPr V1.1-V1.2有效),Rad(只對(duì)ASPr V1.1有效),loader,peid
(1)Aspack: 用的最多,但只要用UNASPACK或PEDUMP32脫殼就行了
(2)ASProtect+aspack:次之,國(guó)外的軟件多用它加殼,脫殼時(shí)需要用到SOFTICE+ICEDUMP,需要一定的專業(yè)知識(shí),但最新版現(xiàn)在暫時(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)脫殼,但不要專業(yè)知識(shí)
(9)Petite: 有一部分的老版本可以用PEDUMP32直接脫殼,新版本脫殼時(shí)需要用到SOFTICE+ICEDUMP,需要一定的專業(yè)知識(shí)
(10)WWpack32: 和PECOMPACT一樣其實(shí)有一部分的老版本可以用PEDUMP32直接脫殼,不過(guò)有時(shí)候資源無(wú)法修改,也就無(wú)法漢化,所以最好還是用SOFTICE配合 PEDUMP32脫殼
我們通常都會(huì)使用Procdump32這個(gè)通用脫殼軟件,它是一個(gè)強(qiáng)大的脫殼軟件,他可以解開絕大部分的加密外殼,還有腳本功能可以使用腳本輕松解開特定外殼的加密文件。另外很多時(shí)候我們要用到exe可執(zhí)行文件編輯軟件ultraedit。我們可以下載它的漢化注冊(cè)版本,它的注冊(cè)機(jī)可從網(wǎng)上搜到。ultraedit打開一個(gè)中文軟件,若加殼,許多漢字不能被認(rèn)出 ultraedit打開一個(gè)中文軟件,若未加殼或已經(jīng)脫殼,許多漢字能被認(rèn)出 ultraedit可用來(lái)檢驗(yàn)殼是否脫掉,以后它的用處還很多,請(qǐng)熟練掌握例如,可用它的替換功能替換作者的姓名為你的姓名注意字節(jié)必須相等,兩個(gè)漢字替兩個(gè),三個(gè)替三個(gè),不足處在ultraedit編輯器左邊用00補(bǔ)。
常見的殼脫法:
(一)aspack殼 脫殼可用unaspack或caspr 1.unaspack ,使用方法類似lanuage,傻瓜式軟件,運(yùn)行后選取待脫殼的軟件即可. 缺點(diǎn):只能脫aspack早些時(shí)候版本的殼,不能脫高版本的殼 2.caspr第一種:待脫殼的軟件(如aa.exe)和caspr.exe位于同一目錄下,執(zhí)行windows起始菜單的運(yùn)行,鍵入 caspr aa.exe脫殼后的文件為aa.ex_,刪掉原來(lái)的aa.exe,將aa.ex_改名為aa.exe即可。使用方法類似fi 優(yōu)點(diǎn):可以脫aspack任何版本的殼,脫殼能力極強(qiáng)缺點(diǎn):Dos界面。第二種:將aa.exe的圖標(biāo)拖到caspr.exe的圖標(biāo)上***若已偵測(cè)出是aspack殼,用unaspack脫殼出錯(cuò),說(shuō)明是aspack高版本的殼,用caspr脫即可。
(二)upx殼 脫殼可用upx待脫殼的軟件(如aa.exe)和upx.exe位于同一目錄下,執(zhí)行windows起始菜單的運(yùn)行,鍵入upx -d aa.exe。
(三)PEcompact殼 脫殼用unpecompact 使用方法類似lanuage傻瓜式軟件,運(yùn)行后選取待脫殼的軟件即可。
(四)procdump 萬(wàn)能脫殼但不精,一般不要用 使用方法:運(yùn)行后,先指定殼的名稱,再選定欲脫殼軟件,確定即可脫殼后的文件大于原文件由于脫殼軟件很成熟,手動(dòng)脫殼一般用不到。
虛擬機(jī)脫殼引擎(VUE)技術(shù)
對(duì)于病毒,如果讓其運(yùn)行,則用戶計(jì)算機(jī)就會(huì)被病毒感染。因此,一種新的思路被提出,即給病毒構(gòu)造一個(gè)仿真的環(huán)境,誘騙病毒自己脫掉“馬甲”。并且“虛擬環(huán)境”和用戶的計(jì)算機(jī)隔離,病毒在虛擬機(jī)的操作不會(huì)對(duì)用戶計(jì)算機(jī)有任何的影響。
“虛擬機(jī)脫殼”技術(shù)已經(jīng)成為近年來(lái)全球安全業(yè)界公認(rèn)的、解決這一問題的最有效利器。但由于編寫虛擬機(jī)系統(tǒng)需要解決虛擬CPU、虛擬周邊硬件設(shè)備、虛擬驅(qū)動(dòng)程序等多個(gè)方面的困難。
脫殼能力不強(qiáng)的殺毒軟件,對(duì)付“加殼”后病毒就需要添加兩條不同的特征記錄。如果黑客換一種加殼工具加殼,則對(duì)于這些殺毒軟件來(lái)說(shuō)又是一種新的病毒,必須添加新的特征記錄才能夠查殺。如果殺毒軟件的脫殼能力較強(qiáng),則可以先將病毒文件脫殼,再進(jìn)行查殺,這樣只需要一條記錄就可以對(duì)這些病毒通殺,不僅減小殺毒軟件對(duì)系統(tǒng)資源的占用,同時(shí)大大提升了其查殺病毒的能力。
最新資訊