單片機系統(tǒng)的軟件加密和硬件加密技術(shù)

隨著單片機技術(shù)的發(fā)展和廣泛應用,單片機產(chǎn)品的加密已成為知識產(chǎn)權(quán)保護的重要手段,其加密手段無外乎只有兩種,軟件加密和硬件加密。

一、軟件加密技術(shù)

軟件加密是硬件加密的補充和延伸,只要能使程序代碼難以分析和跟蹤,并且使反匯編后的程序變得混亂難懂,便是有效的軟件加密技術(shù)。軟件加密簡單易行,不需額外增加系統(tǒng)的硬件開銷。但采用軟件加密技術(shù)時,充分考慮系統(tǒng)的實時性要求是采用軟件加密護卡應遵循的基本原則。

1、代碼置亂加密技術(shù)

代碼置亂加密是在程序代碼中加上一些冗余字節(jié)置使整個程序反匯編后變得雜亂無章。以下是代碼置亂加密的一些基本方法:

(1)在程序模塊之間插入1-2個加密字節(jié),這些加密字節(jié)一般應為多字節(jié)指令的操作碼。采用這種方法后,用一般的反匯編程序?qū)o法得到系統(tǒng)實際運行的程序。例如,在下面的兩個子程序模塊之間插入一個加密字節(jié)02H(02H為3字節(jié)指令LJMP的操作碼):

SUB1:

2100H 22 RET

210IH 02 DB 02H

2102H 909650

UB2: MOV DPTR,#9695H

2105H 7405 MOV A,#05H

2107H FO M O V X @DPTR,A

2108H 22 RET

用反匯編程序?qū)ι鲜龀绦蜻M行反匯編后,將得到以下程序:

SUBI:;

i.-i.Vt

2100H 22 RET

210IH 029096 UMP 9096H

2104H 5074 JNC 217AH

2106H 05FO INC B

2108H 22 RET

(2)使程序中的某些字節(jié)為兩個程序模塊共同使用。例如,20FIH單元中的52H為兩個程序模塊SUB3和SUB4共同使用。

SUB3:

20FOH 0152 AJMP 2052H

20FIH 522F

SUB4:

ANL 2FH,A

以上兩條指令經(jīng)反匯編后,將變成下列指令:

......

AJMP 2052H

ADD A,R7

.....

(3)在未使用的程序存儲器區(qū)域中全部都加上無用的程序代碼,這些程序代碼要加得巧妙一些,以進一步增加破譯程序的難度。

2、動態(tài)反跟蹤加密技術(shù)

代碼置亂加密屬于靜態(tài)加密技術(shù),靜態(tài)加密的程序代碼最終還要以明文的方式在單片機中運行解密者可通過調(diào)試跟蹤和監(jiān)視程序的執(zhí)行過程及運行狀態(tài)來分析和破解程序。因此,對單單片機應用程序的加密還應考慮動態(tài)反跟蹤的問題,即程序的動態(tài)加密處理。

(1)多循環(huán)、多分支

在不破壞系統(tǒng)實時性的前提下,可在程序中設(shè)置多重循環(huán)、多分支、多次調(diào)用子程序,把防跟蹤能力隱含在程序的復雜性中。這些程序有些是虛設(shè)的,目的是混淆解密者的視線,消耗解密者的精力有些是必須完成的,或為后面的程序提供信息,真假混雜,使解密者眼花繚亂,不易跟蹤。

(2)程序動態(tài)解碼

動態(tài)解碼是指程序運行時,由一段程序?qū)iT對某一區(qū)域的加密指令或數(shù)據(jù)代碼進行解密,當解密后的代碼使用完畢,再將其重新加密,使存儲器中不存在完整的程序代碼。程序動態(tài)解碼不僅對防程序的靜態(tài)分析很有效,因為從加密程序的清單上很難看出程序的真實目的;而且在程序的反跟蹤方面又有獨到之處,在阻止帶斷點調(diào)試跟蹤時,由于程序在執(zhí)行之前是以密文形式出現(xiàn)的,解密者很難確定斷點設(shè)置的位置,稍有不慎就會導致解密失敗。

(3)程序段防修改

為了防止程序被修改,可在程序的關(guān)鍵處取指令或數(shù)據(jù)代碼參與某種運算,其結(jié)果作為判斷程序是否被修改的依據(jù)。如果程序未被修改,則使程序正常執(zhí)行。否則,程序?qū)?zhí)行誤操作、停機,甚至改變或刪除關(guān)鍵代碼,使解密者無法重新分析程序。

二、硬件加密技術(shù)

單片機系統(tǒng)的硬件加密技術(shù)有很多種,盡量不增加或者少增加芯片、連線及過線孔是采用硬件加密技術(shù)應遵循的重要原則。

1、總線變換加密技術(shù)

總線變換是指對單片機的地址總線或數(shù)據(jù)總線中的某些線進行交叉換位,或通過邏輯電路改變某些線原有的邏輯關(guān)系,使得仿真時從程序存儲器中讀出的數(shù)據(jù)變成一個隨機數(shù),從而失去反匯編的意義。

總線變換的方法很多,圖1是把數(shù)據(jù)總線Do和D7交換的簡單加密電路。

在未加密的單片機系統(tǒng)中,數(shù)據(jù)總線P0.7~PO.O與外部程序存儲器2764的數(shù)據(jù)總線D7~Do是按順序一一對應相連的。而在圖l中把Do和D1兩位交換后,單片機所執(zhí)行的實際程序代碼與外部程序存儲器中所存放的程序代碼便完全不同了。例如,單片機實際執(zhí)行的二進制定點數(shù)求補子程序為:

lOOOH EA BINCPLA:MOV A,R2

IOOIH F4 CPL A

1002H 04 INC A

1003H FA MOV R2,A

1004H 22 RET

若從外部程序存儲器2764中讀出該子程序,經(jīng)反匯編后的程序為BINCPLB:

1000H 6B BINCPLB:XRL A.R3

100IH 7904 MOVRI.#04H

1003H 7822 MOVR3,#22H

由此可見,BINCPLB已面目全非,不再是二進制定點數(shù)求補子程序,并且該子程序的最后也不是返回指令,因此,整個程序無法執(zhí)行。實際應用時,外部程序存儲器2764中應存放BINCPLB程序代碼,只有采用圖1所示的電路才會讀出形成BINCPLA二進制定點數(shù)求補子程序。若把該外部程序存儲器中的程序代碼放在常規(guī)的單片機上進行反匯編,就會出現(xiàn)BINCPLB的程序代碼,從而達到加密的目的。

由于單片機實際執(zhí)行的是BINCPLA程序代碼,而外部程序存儲器中應存放的是BINCPLB程序代碼。因此存在一個代碼轉(zhuǎn)換過程,即將單片機實際執(zhí)行的程序代碼(明文)轉(zhuǎn)換成外部程序存儲器中應存放的程序代碼(密文)。這個轉(zhuǎn)換過程可以手工完成,也可以編程由機器自動完成。

除了上述交換Do和D7進行加密外,還可對總線的某些位進行邏輯運算,如:求反、與、或、異或等,其加密的原理是類似的。

1、總線燒毀加密技術(shù)

單片機片內(nèi)程序存儲器中所存放的程序代碼必須通過數(shù)據(jù)總線才能讀出。如果把單片機數(shù)據(jù)總線的其中一位永久地破壞了,解密者即使擦除了加密位,也無法讀出片內(nèi)程序存儲器中所存放的正確程序代碼。開發(fā)設(shè)計人員在設(shè)計單片機系統(tǒng)的硬件電路時,只要預留出一條數(shù)據(jù)總線不用,當將應用程序?qū)懭雴纹瑱C片內(nèi)程序存儲器后,再用高壓或激光將預留的數(shù)據(jù)總線燒毀,即可實現(xiàn)對單片機的加密。

2、總線密鑰加密技術(shù)

改變單片機地址總線與外部程序存儲器地址的對應關(guān)系,使它們按密鑰進行交換,密鑰存放在只讀存儲器ROM或EPROM中。圖2所示為采用密鑰陣列的加密電路原理圖,用一片2716芯片存放密鑰,將外部程序存儲器2764的高5位地址A12~A8,重新按密鑰進行編碼,即可把外部程序存儲器2764原來的頁號順序打亂,從而達到加密的目的。

3、重要數(shù)據(jù)保護加密技術(shù)

隨機存儲器RAM的一個顯著特點是存儲信息的易失性,即當外部供電電源消失時,所存信息將在幾個毫秒之后消失,即使重新供電,原存信息也無法恢復。此外,靜態(tài)RAM大都為CMOS工藝,CMOS具有超低功耗和強抗干擾的特點,用一個小鋰電池供電,可以保存數(shù)據(jù)10年以上。

利用靜態(tài)RAM的以上特點,將一些重要數(shù)據(jù)存放在靜態(tài)RAM中,用電池供電。如果解密者在沒有剖析清楚硬件電路的情況下,拔出RAM芯片或取出電池,RAM中存儲的這些重要數(shù)據(jù)就會消失。以后即使插入該RAM芯片或接入電池,系統(tǒng)也無法正常工作。

4、采用PLD器件加密技術(shù)

PLD包括PAL、GAL、CPLD和FPGA等,它具有設(shè)計靈活、調(diào)試方便、可靠性高等眾多優(yōu)點,并且具有加密保護單元,以防止抄襲電路設(shè)計和非法復制。

將PLD器件用于單片機系統(tǒng)的UO地址譯碼邏輯、總線變換加密等硬件電路的設(shè)計,可以有效地保護硬件電路和軟件程序,使單片機系統(tǒng)軟、硬件的破譯和仿制更加困難。

小知識之單片機

單片機(Single chip microcomputer)是一種集成電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統(tǒng)、定時器/計數(shù)器等功能(可能還包括顯示驅(qū)動電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路)集成到一塊硅片上構(gòu)成的一個小而完善的微型計算機系統(tǒng),在工業(yè)控制領(lǐng)域廣泛應用。從上世紀80年代,由當時的4位、8位單片機,發(fā)展到現(xiàn)在的300M的高速單片機。