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