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