軟件狗[Dongles]的加密與解密技術(shù)(5)
來源:龍人計算機研究所 作者:站長 時間:2006-11-04 11:27:13
二、硬件加密
軟件狗的電路不要做的太直接,否則不利于加密。這里我們就來講講如何增進軟件狗的復(fù)雜性,加強硬件電路的機密功能。
在講第二代軟件狗時,我們說它其實就是幾個簡單的與或邏輯門,目前已經(jīng)被淘汰。現(xiàn)在我們將要把它跟EEPROM結(jié)合起來,經(jīng)過變化,組成比較復(fù)雜的第三代軟件狗,從而增加解密難度。
CAL芯片由于本身就有加密功能,所以也常被用來與EEPROM結(jié)合做成復(fù)雜的軟件狗,更由于其內(nèi)部邏輯配置的靈活性,使得解密的難度上漲了很多倍。
解密者要仿制加密盒,首先必須搞到同型號的EEPROM,所以,我們盡量采用市場上一般購買不到的EEPROM型號,這樣也能起到保密的作用。另外,如果采用特殊的93CX6系列,就可以利用不同廠商出品的特殊93CX6,其特性不同這一點來加強硬件的 加密功能。
下面我們給出兩個具體例子來說明(以93C46型為例)
例1 在電路中加入一個非們,以改變93C46某一管腳的極性,電路中要盡量采用低功耗的芯片,所以這里用了CMOS型的74HC04非門來實現(xiàn)。
這是在前面例子的基礎(chǔ)上把CS信號反了相,讀者還可以適當(dāng)加入一些無用的電阻,電容等器件,以迷惑解密者。同時,我們還需要把相應(yīng)的程序修改一下,把原來對CS信號的控制也反相才行。
...... ......
...... ......
;---------------------------------------------[+]
;設(shè)置EEPROM的片選CS為高電平,即選中EEPROM(-AUTO FEED線反相
;后接CS)
;硬件電路變化時,本部分程序應(yīng)作相應(yīng)改動
;---------------------------------------------[+]
SetCS macro
push ax
CtrlPort ;選擇控制口
in al,dx
; and al,not,02h ;令-AUTO FEED線輸出
;為高電平
or al,02h ;令-AUTO FEED線輸出
;為低電平
KbdTest_Add_AL ;檢查鍵盤中斷,若被開
;放,則改變al值
out dx,al
_CtrlPort ;選擇數(shù)據(jù)口
pop ax
endm
;
;--------------------------------------------[+]
;設(shè)置EEPROM的片選CS為低電平,即不選中EEPROM(-AUTO FEED線反相
;后接CS)
;硬件電路改變時,本部分程序應(yīng)作相應(yīng)改動
;--------------------------------------------[+]
ClearCS macro
push ax
CtrlPort ;選擇控制器
in al,dx
or al,02h ;令-AUTO FEED線輸出
;為低電平
and al,not 02h;為高電平
KbdTest_Add_0w ;檢查鍵盤中斷,若被開放
;則改變_const_word_0_值
out dx,al
_CtrlPort ;選擇數(shù)據(jù)口
pop ax
endm
;
...... ......
...... ......
例2 在電路中加入一個或非門,使得必須用兩根并行口的信號線來得到一根93CX的控制線,這里采用了COMS型的74HC02或非門。
這是在前面例子的基礎(chǔ)上把CS信號用兩根口線(D2和D3)來控制,還可以適當(dāng)假如一些無用的電阻、電容等器件,以迷惑解密者。同時,我們還需要把相應(yīng)的程序修改成只有當(dāng)D2和D3都為低電平時CS才為高電平。
...... ......
...... ......
;--------------------------------------------[+]
;設(shè)置EEPROM的片選CS為高電平,即選中EEPROM(D2D3線或非后接CS)
;硬件電路改變時,本部分程序應(yīng)作相應(yīng)改動
;--------------------------------------------[+]
SetCS macro
push ax
in al,dx ;取數(shù)據(jù)口數(shù)據(jù)
and al,not,0ch ;令D2D3線都輸出低電平
KbdTest_Add_AL ;檢查鍵盤中斷,若被開
;放,則改變al值
out dx,al
pop ax
endm
;--------------------------------------------[+]
ClearCS macro
push ax
in al,dx ;取數(shù)據(jù)口數(shù)據(jù)
or al,08h ;令D2=0,D3=1
KbdTest_Add_0W ;檢查鍵盤中斷,若被開放
;則改變_const_word_0_值
out dx,al
pop ax
endm
...... ......
...... ......
第四代軟件狗加密技術(shù)
前面我們介紹了從第一代軟件狗到第三代軟件狗的使用和制作,但是,這些軟件狗都是著眼于別人想不到這樣的做法這個基礎(chǔ)上的,一旦被人解密,散發(fā)出來,那么它的保護效果就要大打折扣了。任何人只要搞得到相同的芯片,便能仿制出一模一樣的軟件狗。即使你在加上一些TTL和CMOS等邏輯器件,甚至加上PAL、PEEL、GAL,或者在加上一些無用的電阻、電容,但畢竟都是局限于一些簡單的邏輯變化和干擾手段,對于那些“專業(yè)解密高手”來說,仍然可以輕易地把它當(dāng)作一個黑盒子,找一臺儲備示波器或者邏輯分析儀、邏輯分析卡,然后把電腦和軟件狗之間的所有操作信號都記錄下來,再用單片機將所有操作信號一五一十加以模擬就成了。甚至還可以設(shè)計出學(xué)習(xí)式的軟件狗,像市場上那種學(xué)習(xí)式萬用遙控器一樣,去學(xué)習(xí)原版軟件狗的操作信號,真正是道高一尺,魔高一丈。
這種情況是否以為這軟件狗已經(jīng)沒有什么用了呢?那倒也不是,只不過還需要再往上提高一個層次—采用單片機來設(shè)計軟件狗。目前已經(jīng)有不少軟件公司在他們的一系列軟件上都采用了這種新的軟件狗作加密保護用。
采用單片機制作軟件狗有什么優(yōu)點呢?主要在于主機存放程序與加密盒之間的溝通方式可以任意設(shè)計,不像第三代軟件狗那樣比較固定。這樣,解密、破譯的難度就成倍增加了。譬如,對于想用模擬方式仿制軟件狗的做法,我們可以采用用特定的算法來溝通的方法予以解決,讓示波器或邏輯分析儀每次記錄的信號都不一樣,別人就難以模擬您的軟件狗了。再如,為對付學(xué)習(xí)式軟件狗,我們可以設(shè)定若干種溝通方式,平時只用一種方式溝通,在某種條件下、才出現(xiàn)特別的溝通方式,過一陣子也會失效,很難把所有的溝通方式都記錄下來。
說了那么多,那么好,這種軟件狗到底該如何制作呢?是不是采用任何一種單片機都行呢?不是。前面說過,軟件狗是靠“偷電”來獲得電源的,所以,在選擇單片機時,首先要保證它的功耗比較低,適合在并口上工作。其次單片機的指令要簡單,功能要較強,適合做軟件狗,最后一點,單片機本身帶內(nèi)置ROM,并有加密功能,以簡化電路和防止被非法復(fù)制。符合這些條家的單片機是很多的,如NEC的MPD7554,Microchip的PIC16C5X系列等等。