發布源:深圳維創信息技術發布時間:2020-11-24 瀏覽次數: 次
日前,加密軟件主要是在DOS上開發的。
加密軟件的主要技術方法都是類似的.我們這里討論DOS上的軟件加密技術。
一般的用戶都知道“加密軟件”這個概念,但知道”加密軟件具體是如何工作“的人相當少。
我們首先升紹一下加密軟件的工作方式.
加密軟件有如下三種方式:
外殼式:加密軟件把一段加密代碼附加到執行程序上并把程序入口指向附加代碼中。
當被加密的程序裝入內存后,附加代碼首先執行,檢查是否有跟蹤程序存在,如果沒有再檢盤查密鑰是否正確,如果正確,則轉入原來的程序中。
這種方式的優點是不需要修改源代碼,使用簡單。
然而,其缺點也很明顯:一旦附加代碼被擊破,就會被解得干干凈凈。
內含式:加密代碼以OBJ文件形式存在。
應用程序調用這些加密代碼,*后與要加密的程序編譯連接到一起。
這種方式需要修改源代碼,比較可靠。
但是代碼復雜性不如外殼式,不容易對二進制代碼做復雜變形,容易被跟蹤。
違種方式主要用于使用軟件加密狗和加密卡的加密程序。
結合式:把上述兩種方法結合起來。
用OBJ去檢查外殼的可靠性,內外結合。
軟件加密技術主要由密鑰技術、反跟蹤技術和代碼插入技術構成,缺一不可。
一 密鑰技術密鑰技術是指與密鑰有關的全部技術,如密鑰盤的制作、識別密鑰盤、安裝和回收密鑰等。
密鑰的特點就是不能或者不容易復制。
密鑰主要分軟盤、加密卡和并行口加密盒(也稱“軟件狗”)。
這三種密鑰的特點如下。
軟盤加密卡加密盒成本低高較低可靠性一般穩定穩定易安裝性不需要安裝復雜容易使用方便性不方便方便方便系統開銷別時需要插盤占擴展槽和地址空間并行口產品盤備份不能可以可以
由上表可見,三種密鑰各有千秋.可以根據不同的需求選用。
比如,對于一般的小型的軟件來說,由于成本問題,選用軟盤密鑰的加密軟件合適一些。
我們來看一下軟盤密鑰的原理和制作的方法
在軟盤上制作密鑰的技術有很多種。
*早的FROLOK是用激光在軟盤上打孔,在軟l制作無法復制的硬錯誤。
還可以在軟盤上制作弱位。
軟盤上的信息是二進制,即0與1.但弱位不是0也不是1——有時是0,有時是1,這種信息用計算機無法復制。
目前,加密軟件主要采用道縫加密。
將數據寫到某一格式化過的扇區時,因為不同的磁盤機會有轉速的差別,因此數據寫完后不可能與下一個扇區連接得無縫隙,而且這縫隙中會出現一些噪音信號。
利用這種噪音信號來作為辨別是否是原盤的依據。
這種方式可使目前所有拷貝程序(包括拷貝卡)都無法復翩。
具體地說,由于磁道是圓形的.因此必然有頭尾相接的地方,用這種接縫作為“指紋”來模仿PROLOK所用的激光孔“指紋”,可使每片母盤都不同·母盤的辨認程序的細節也會不同,制作方法簡要說明如下:
1. 將格式化磁道的參數表中*后一個扇區N置為6;
2. 用INT 13H格式化一個磁道(實際上還是用正常大小恪式化,*步的結果只是改動了*后一個扇區的地址場);
3. 把INT 1EH指向的參數表中的N改為6;
4. 讀*后一個扇區,就可把接縫讀出來(此時錯誤號為10H).
5. 把INT 1EH指向的參數表中N恢復為2;
不同的盤、不同的磁道,制作出來的密鑰是不同的。
二 反跟蹤技術
有了好的密鑰技術,沒有強有力的反跟蹤手段來保護它,解密者使用功能強大的調試器和一些輔助工具來破譯,幾分鐘就可以解開,達不到保護的目的。
反跟蹤技術是加密軟件*關鍵、工作量*大的部分,同時也是加密技術不、斷推陳出新、永無止境的原因。
反跟蹤的手段主要有以下幾種:一種方法是把程序寫亂或使用高級語言生成代碼,使代碼雜亂無章,跟蹤者不容易看懂。
另一種方法是主動出擊,設置陷阱,讓調試器不能正常工作,如破壞INT 3和INT1的中斷向量,讓DEBUG不能工作。
識別調試器的存在情況,讓程序走岔道。
還有一種方法是做大量變形和和跳轉、拖垮對手。
比如說,在BITLOK使用了加密虛擬饑、多層間址多堆棧鏈接等反跟蹤技術。
具體方法是:設計一個加密虛擬機。
虛擬機指令用INTEL 80*86的指令來仿真。
加密程序使用虛擬機指令;而且加上多層間址多堆棧鏈接等大工作量的操作,跟蹤者即使看懂虛擬機指令,也容易被拖垮。
就未來的加密軟件而言,*重要的是如何保護算法,那么反跟蹤技術顯得更為重要。
三、代碼插入技術
加密的核心代碼寫好以后,剩下的工作是如何把這些代碼插入到被加密的程序中,插入加密代碼的方式較多,但首先必須了解DOS的執行文件格式。
插入方式主要有內含式、外殼式、結合式。
內含方式把插入代碼附加在文件尾部·把程序的入口點改到插入代碼中,DOS依然使用EXEC(iNT 21H,功能4Bh)來執行被加密程序。
(這種方法也是病毒傳染的常用方法。)這種方法實現起來簡單.但有很上的局限:無法插入到帶覆蓋模塊的程序中,無法有效地解決EXE文件的代碼變形問題。
外殼方式采用的是另外一種方法。
它首先將原來的執行文件.比如說sample.exe變形為sample.ovl,插入代碼將sample.exe看成覆蓋模塊,插入代碼給自己取名為sample.exe,由sample.exe調用sample.exe,并決定sample.exe的裝載和重定位方式(包括在裝載過程中將被變形的代碼復原)。
假如原來的執行文件sample.exe本身代有覆蓋,上述方法就會碰到問題。
因為像FOXpRO等編譯出的數據庫執行文件一般帶有覆蓋模塊,而且它們的文件頭內容相同。
如果用對待一般執行文件的辦法來加密這樣的執行文件,跟蹤者很容易識別它的文件頭和代碼部分跳過被加密的文件頭,被加密文件的核心代碼部分也就暴露無遺,起不到加密的效果。
比較好的做法是:插入代碼把控制權轉交給被變形的sample.exe之前,先將一個監控代碼駐留在內存中,用來接管INT 21H操怍,如果sample.exe要執行某一個覆蓋模塊,則該駐留代碼
截獲文件操作,還原將要執行的覆蓋代碼。
在實現代碼插入時,還應該注意非Mz格式的問題.目前在DOS上EXE文件主要是MZ格式,但使用OS/2恪式和BOSS格式的程序越束越多,如以Borland Pascal保護方式編譯出的程序。
這些問題增加了開發難度,開發者應該深入鉆研。
在windows上開發加密軟件與DOS上的基本原理是一到致的,但具體實觀上有較大的差別。
Copyright © 2021 深圳市維創信息技術有限公司 版權所有