關於“外殼”這個詞估計是中國人獨創的,我覺得比較生動貼切,它的意思就是給可執行的文件加上一個外殼。為什麽要給可執行文件加上個外殼呢?其目的不僅僅是加密一詞就能夠說明的,記得最早的外殼程序應該是 PKLITE,它是鼎鼎大名的 PKZIP 公司所寫的一個小程序,其作用是對 DOS 下的可執行文件進行壓縮,壓縮後的文件一般隻有原來的一半大小,但執行起來毫無問題。記得第一次看到這個程序的時候大呼神奇,實際上說穿了就是給原來的程序加了個殼,用戶執行的實際上是這個外殼的程序,而這個外殼程序負責把用戶原來的程序在內存中解開壓縮,並把控製權交還給解開後的真正的程序,由於一切工作都是在內存中運行,用戶根本不知道也不需要知道其運行過程,隻要執行起來沒有變化就好。當時有些人擔心這些解壓縮的工作會給程序帶來額外的運行時間,但實際上所有的可執行文件都要讀到內存中去執行,文件小了,從計算機硬盤上讀到內存的時間自然也少了,兩下相抵,實際上用戶並不會感覺程序慢了多少。
再其後就是計算機病毒的泛濫,其實那些感染可執行文件的病毒說穿了也是一種外殼,隻不過這種外殼程序首先在把控製權交給真正執行的程序前,在係統內部先安裝好了它的傳染機製,然後在不告訴你的情況下給你每個運行的程序都加上一個“病毒殼”。在每天都有新病毒產生的今天,被動的殺毒好象已經趕不上病毒的產生速度,於是有人提出了主動預防的觀點,這就是通用病毒免疫程序。它的原理是先在未被感染的文件上主動加上個殼,這個殼在執行的時候檢查是否外麵還有一個殼,如果有那麽很可能是被病毒感染了,它會自動把外麵的殼脫掉。
說到這兒,你可能已經明白外殼程序到底是個什麽東西了吧,如果在外殼程序中加入對軟件鎖或鑰匙盤的驗證部分,它就是我們所說的外殼加密了。其實外殼加密的作用還不止於此,在 Internet 上麵有很多程序是專門為加殼而設計的,它對程序進行壓縮或根本不壓縮,它的主要特點在於反跟蹤,加密代碼和數據,保護你的程序數據完整性。如果你不希望你的程序代碼被黑客修改,如果你的程序不希望被人跟蹤調試,如果你的算法程序不想被別人靜態分析,這種外殼程序就是為你設計的。
當然外殼程序也可能是以上幾種應用的結合體,例如軟件鎖的外殼加密,一反麵它要驗證軟件鎖的正確性,另一方麵它要有強大的反跟蹤機製來防止黑客修改外殼本身,另外還要對用戶真正的程序進行數據加密。總之,外殼程序在某些開發者的腦子裏是無所不能的。
下麵我簡單介紹一下在不同的係統平台下可執行文件的異同以及外殼程序的要求:
1、DOS 平台:
DOS 下麵的可執行文件格式分為兩種,一種是以 .COM 結尾的純代碼文件。COM 文件沒有文件頭部分,缺省的總是從 100H 處開始執行,沒有重定位項,這也限製了它的所有代碼和數據必須控製在 64K 以內。對這種程序進行外殼加密是十分簡單的,幾乎不需要考慮太多的問題,除了加密後的代碼也必須保證在 64K 以內。另外一種是以 .EXE 結尾的文件,這種文件以 MZ 開頭,通常我們稱之為 MZ 文件。MZ 文件有一個文件頭,用來指出每個段的定義,以及重定位表。.EXE文件擺脫了 64K 的限製,是 DOS 下最主要的文件格式。即使有了文件頭,MZ 格式看上去仍舊比較簡單,外殼加密程序主要應處理好的就是重定位項的問題。
2、Windows 16 位平台:
在 Windows 3.1 平台下 Microsoft 推出了一種新的可執行文件格式,在 MZ 文件頭之後又有一個以 NE 開始的文件頭,我們稱之為 NE 文件。由於 Windows 的可執行文件同 DOS 相比增加了很多內容,如資源、動態庫...。NE 格式表現極為複雜,NE 格式文件裝載程序讀取磁盤上的文件後,需要在內存中成一個完全不同的數據結構。但 Microsoft 可能預見到這種格式的弱點,它允許用戶編寫自裝載代碼,也就是說你大可不必理睬 NE 格式的種種要求,隻要你的程序能夠在內存中生成 Windows 所需要的結構,Windows 不關心你存儲在磁盤上的文件是什麽結構的。正是利用這個特性,使 Windows 16 位平台的外殼加密成為可能。因為你的自裝載代碼中除了裝載代碼外,還可以幹一些你想幹的事情。
3、Windows 32 位平台:
在 Windows 95/NT/2000 上,Microsoft 又推出了一種新的可執行文件格式,Nicrosoft 稱之為Portable 可執行文件。它同 NE 格式不同的是在 MZ 文件頭之後是一個以 PE 開始的文件頭。PE 文件格式是從 COFF 的 OBJ 格式發展而來的,它同 NE 格式相比是進了一大步, 其文件在磁盤中的格式同內存中的格式區別不大,裝載程序實現起來相當簡單,通過文件內存映像機製將磁盤文件映射到虛擬地址空間,並進行一下重定位及設定引入地址表即可。但由於 PE 文件不支持自裝載,很多程序都用自己的方法來管理程序中的數據(如VB、VF...)。標準很不統一,給外殼加密的實現帶來了很大的困難。另外還有一些技術細節資料的匱乏,也造成外殼加密實現上的困難。現有的外殼加密程序大多都是繞過一些敏感的內容來進行的,所以說 PE 下的外殼加密距離標準化、通用化還有一定的距離。
外殼加密程序也不是沒有缺點的,有很多網上免費的外殼加密程序兼容性很差,加密後的程序在某些計算機或某些操作係統下無法運行。但通常一個好的外殼加密程序足以抵擋大多數解密者的進攻,起碼也會大大增加解密所花費的時間。為了你程序的安全性考慮,應仔細選擇您的外殼加密。
彩神彩票 © 1998-2024。
京ICP備34881403號
京公網安備11010802041807號