黑客逆向破解基礎-1:殼、加殼和脫殼分別是什麼?加殼的解壓原理介紹。

一、殼的概念

殼的概念,在一些計算機軟件裏有一段專門負責保護軟件不被非法修改或反編譯的程序。它們一般都是先於程序運行,拿到控制權,然後完成它們保護軟件的任務。就像動植物的殼一般都是在身體外面一樣理所當然(但後來也出現了所謂的“殼中帶籽”的殼)。由於這段程序和自然界的殼在功能上有很多相同的地方,基於命名的規則,大家就把這樣的程序稱爲“殼”了。就像計算機病毒和自然界的病毒一樣,其實都是命名上的方法罷了。 從功能上抽象,軟件的殼和自然界中的殼相差無幾。無非是保護、隱蔽殼內的東西。而從技術的角度出發,殼是一段執行於原始程序前的代碼。原始程序的代碼在加殼的過程中可能被壓縮、加密……。當加殼後的文件執行時,殼-這段代碼先於原始程序運行,他把壓縮、加密後的代碼還原成原始程序代碼,然後再把執行權交還給原始代碼。
軟件的殼分爲:加密殼、壓縮殼、僞裝殼、多層殼等類,目的都是爲了隱藏程序真正的OEP。OEP:(Original Entry Point),程序的入口點,軟件加殼就是隱藏了OEP(或者用了假的OEP), 只要我們找到程序真正的OEP,就可以立刻脫殼。 PUSHAD (壓棧) 代表程序的入口點,POPAD (出棧) 代表程序的出口點,與PUSHAD相對應,一般找到這個OEP就在附近啦。

作者編好軟件後,編譯成exe可執行文件。 其作用主要有:
1.有一些版權信息需要保護起來,不想讓別人隨便改動,如作者的姓名,即爲了保護軟件不被破解,通常都是採用加殼來進行保護;
2.需要把程序搞的小一點,從而方便使用。於是,需要用到一些軟件,它們能將exe可執行文件壓縮;
3.在黑客界給木馬等軟件加殼脫殼以躲避殺毒軟件。
實現上述功能,這些軟件稱爲加殼軟件。

二、什麼是加殼和脫殼技術?

加殼,是一種通過一系列數學運算,將可執行程序文件或動態鏈接庫文件的編碼進行改變(目前還有一些加殼軟件可以壓縮、加密驅動程序),以達到縮小文件體積或加密程序編碼的目的。加殼一般是指保護程序資源的方法。
脫殼,一般是指除掉程序的保護,用來修改程序資源。馬甲”能穿也能脫。相應的,有加殼也一定會有解殼(也叫脫殼)。
脫殼主要有兩種方法:硬脫殼和動態脫殼。
第一種,是硬脫殼,這是指找出加殼軟件的加殼算法,寫出逆向算法,就像壓縮和解壓縮一樣。由於,目前很多“殼”均帶有加密、變形的特點,每次加殼生成的代碼都不一樣。硬脫殼對此無能爲力,但由於其技術門檻較低,仍然被一些殺毒軟件所使用。
第二種,是動態脫殼。由於加殼的程序運行時必須還原成原始形態,即加殼程序會在運行時自行脫掉“馬甲”。目前,有一種脫殼方式是抓取(Dump)內存中的鏡像,再重構成標準的執行文件。相比硬脫殼方法,這種脫殼方法對自行加密、變形的殼處理效果更好。

三、加殼的解壓原理

加殼工具在文件頭裏加了一段指令,告訴CPU,怎麼才能解壓自己。現在的CPU都很快,所以這個解壓過程你看不出什麼東西。軟件一下子就打開了,只有你機器配置非常差,纔會感覺到不加殼和加殼後的軟件運行速度的差別。當你加殼時,其實就是給可執行的文件加上個外衣。用戶執行的只是這個外殼程序。當你執行這個程序的時候這個殼就會把原來的程序在內存中解開,解開後,以後的就交給真正的程序。所以,這些的工作只是在內存中運行的。通常說的對外殼加密,都是指很多網上免費或者非免費的軟件,被一些專門的加殼程序加殼,基本上是對程序的壓縮或者不壓縮。因爲有的時候程序會過大,需要壓縮。但是大部分的程序是因爲防止反跟蹤,防止程序被人跟蹤調試,防止算法程序不想被別人靜態分析。加密代碼和數據,保護你的程序數據的完整性。不被修改或者窺視你程序的內幕。

加“殼”雖然增加了CPU負擔,但是減少了硬盤讀寫時間,實際應用時加“殼”以後程序運行速度更快(當然有的加“殼”以後會變慢,那是選擇的加“殼”工具問題)。

一般軟件都會加“殼”,這樣不但可以保護自己的軟件不被破解、修改還可以增加運行時啓動速度。

加“殼”不等於木馬,我們平時的絕大多數軟件都加了自己的專用“殼”。
RAR和ZIP都是壓縮軟件,不是加“殼”工具,他們解壓時是需要進行磁盤讀寫,“殼”的解壓縮是直接在內存中進行的。用RAR或者ZIP壓縮一個病毒你試試,解壓縮時殺毒軟件肯定會發現。而用加“殼”手段封裝木馬,能發現的殺毒軟件就少得多。

木馬加殼的原理很簡單,在黑客營中提供的多數木馬中,很多都是經過處理的,而這些處理就是所謂的加殼。當一個程序生成好後,很輕鬆的就可以利用諸如資源工具和反彙編工具對它進行修改,但如果程序員給程序加一個殼的話,那麼至少這個加了殼的程序就不是那麼好修改了,如果想修改就必須先脫殼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章