單片機(jī)應(yīng)用系統(tǒng)加密
單片機(jī)應(yīng)用系統(tǒng)加密是保護(hù)知識(shí)產(chǎn)權(quán)不受侵犯的關(guān)鍵技術(shù),如何簡(jiǎn)單有效的對(duì)系統(tǒng)加密,一直以來就是我們?cè)谘芯刻剿鞯膯栴},但總的來講加密技術(shù)可以分為兩大類:即硬件加密和軟件加密。下面我們就對(duì)常用的方法加以探究,以饗食讀者。
一、軟件加密
軟件加密就是通過對(duì)指令的運(yùn)用來實(shí)現(xiàn)加密的,不需要增加硬件電路,而因不需要增加成本,簡(jiǎn)單易行。
1、軟件加密方法
(1)在程序模塊之間插入加密字節(jié)
加密字節(jié)一般位于下一模塊之前的1個(gè)或2個(gè)字節(jié)。
采用這種方法,一般的反匯編程序得到的是一些錯(cuò)誤的程序代碼,無法匯編出系統(tǒng)的實(shí)際運(yùn)行程序。比如在GMR1和GMR2個(gè)模塊之間插入1個(gè)加密字節(jié)75H(在51系列單片機(jī)中是一條立即數(shù)傳送指令)。

對(duì)上面2兩個(gè)摸塊程序用一般的反匯編方法可得到如下的程序段:

可見,GMR1后面的指令已經(jīng)得不到GMR2的結(jié)果了,即匯編結(jié)果與實(shí)際代碼不符,可以實(shí)現(xiàn)原代碼的保護(hù)作用。
(2)采用某些單片機(jī)特有的指令對(duì)軟件進(jìn)行加密
在MCS-51系列單片機(jī)中,使用JMP@A+DPTR指令代替AJMP、LJMP、SJMP等指令,如未加密的程序?yàn)椋?/p>

加密修改后為(即把指令替換為):

(3)其他方法
例如使某些字節(jié)為兩個(gè)模塊共同使用的方法,即在編程時(shí)使某些字節(jié)為兩個(gè)模塊共同使用,使得反匯編程序匯編時(shí)得出的不是實(shí)際的程序代碼;用返回指令代替跳轉(zhuǎn)指令的方法等加密。
2、軟件加密方法分析
當(dāng)然這些加密方法無非是在未使用的程序存儲(chǔ)器區(qū)域中全部都加上無用的程序代碼,并把這些程序代碼偽裝的巧妙一些,或者是將數(shù)據(jù)進(jìn)行模糊處理方法,并進(jìn)行真假數(shù)據(jù)地址的交叉混疊,或者是采用數(shù)據(jù)與密鑰進(jìn)行邏輯異或等方法進(jìn)行加密,以進(jìn)一步增加破譯程序的難度,這些都屬于靜態(tài)加密技術(shù),靜態(tài)加密的程序代碼最終還是要以明文的方式在單片機(jī)中運(yùn)行,解密者可通過調(diào)試跟蹤和監(jiān)視程序的執(zhí)行過程及運(yùn)行狀態(tài)來分析和破解程序,這些方法對(duì)解密高手來說都沒有太大難度。因此,對(duì)單片機(jī)應(yīng)用程序的加密還應(yīng)考慮動(dòng)態(tài)反跟蹤的問題,即程序的動(dòng)態(tài)加密處理。
3、軟件加密的應(yīng)對(duì)策略
動(dòng)態(tài)解碼是指程序運(yùn)行時(shí),由一段程序?qū)iT對(duì)某一區(qū)域的加密指令或數(shù)據(jù)代碼進(jìn)行解密,當(dāng)解密后的代碼使用完畢,再將其重新加密,使存儲(chǔ)器中不存在完整的程序代碼。程序動(dòng)態(tài)解碼不僅對(duì)防程序的靜態(tài)分析很有效,因?yàn)閺募用艹绦虻那鍐紊虾茈y看出程序的真實(shí)目的;而且在程序的反跟蹤方面又有獨(dú)到之處,在阻止帶斷點(diǎn)調(diào)試跟蹤時(shí),由于程序在執(zhí)行之前是以密文形式出現(xiàn)的,解密者很難確定斷點(diǎn)設(shè)置的位置,稍有不慎就會(huì)導(dǎo)致解密失敗。
軟件加密的方法有很多,不管采用何種方法,只能增加破譯者的難度,不能完全阻止破解,是硬件加密的一種補(bǔ)充措施。
二、硬件加密
硬件加密常用的方法有以下幾種:
1、總線技術(shù)加密法
總線技術(shù)加密法就是將單片機(jī)的地址總線或數(shù)據(jù)總線中的某些線進(jìn)行交叉換位來改變某些線原有的邏輯關(guān)系,也就是采用改變總線接線即亂置法對(duì)其中的程序傳輸進(jìn)行加密,特別是在單片機(jī)外部擴(kuò)展程序存儲(chǔ)器時(shí),當(dāng)固化到程序存儲(chǔ)器的程序再?gòu)某绦虼鎯?chǔ)器中讀出時(shí),由于總線的亂置原因,使得數(shù)據(jù)經(jīng)過反匯編后,改變了源程序從而達(dá)到加密的目的。
實(shí)際上通過改變接線關(guān)系還可以派生出很多機(jī)密方法:數(shù)據(jù)總線中某些線換位或求反(如圖所示D7數(shù)據(jù)線);地址總線中某些線換位或求反;總線經(jīng)過簡(jiǎn)單的邏輯門來改變?cè)嘘P(guān)系。

這種方法雖然簡(jiǎn)單,但稍微對(duì)電路加以研究,就不難破解。
2、存儲(chǔ)器技術(shù)加密方法
近年推出的大多數(shù)單片機(jī)內(nèi)部都有加密鎖定位或加密字節(jié),開發(fā)者將調(diào)試好的程序固化到單片機(jī)內(nèi)部程序存儲(chǔ)器的同時(shí)將其鎖定,這樣就無法使用普通的仿真器或編程器讀出其程序代碼,這就是所謂的拷貝保護(hù)和鎖定功能,看似保險(xiǎn),其實(shí)許多單片機(jī)在此功能的設(shè)計(jì)上是有漏洞的,對(duì)付這種破解可以采用破壞單片機(jī)的加密位的加密方法,簡(jiǎn)稱OTP加密模式。
其原理是:編制一種加密算法,永久燒壞加密鎖定位(把芯片內(nèi)的硅片擊穿),而不破壞其它部分,不占用單片機(jī)任何資源。加密鎖定位被燒壞后不再具有擦除特性,單片機(jī)片內(nèi)的加密位和程序存儲(chǔ)器內(nèi)的數(shù)據(jù)就不能被再次擦除,單片機(jī)就好像變成了一次性編程的OTP型單片機(jī)一樣。
3、雙芯片加密法
該加密法的基本原理如下:
(1)選用兩片同系列的不同的單片機(jī),如AT89C51/52和AT89LV51/52,將一片型號(hào)擦去,另一片則標(biāo)以封裝相同的存儲(chǔ)器或其它芯片型號(hào)。
(2)編寫系統(tǒng)程序時(shí)首先利用其內(nèi)部的加密位進(jìn)行加密。
(3)應(yīng)用系統(tǒng)程序設(shè)計(jì)時(shí)使兩個(gè)芯片交替工作,相互備份,相互驗(yàn)證。
但是無論怎樣加密,單片機(jī)的指令最終都要在明文的方式下才能運(yùn)行,而解密者可以使用單步調(diào)試ROM中的程序達(dá)到解密的目的,為了防止用單步跟蹤方法進(jìn)行解密,還可利用單片機(jī)內(nèi)部的定時(shí)器使每一段程序內(nèi)指令的執(zhí)行時(shí)間受限,超過一定時(shí)間時(shí)甲機(jī)將改變程序代碼,使系統(tǒng)不能正常運(yùn)行。當(dāng)然還可以選用表面封裝類似或軟件兼容的其它芯片代替乙機(jī)。
三、軟件和硬件相結(jié)合加密方法
軟件和硬件相結(jié)合是目前較為理想的加密手段,硬件主要是指專用加密芯片,數(shù)據(jù)的輸入輸出通過該芯片時(shí),通過加密軟件算法來驗(yàn)證是否合法。在工作時(shí),將加密算法的明文與加密算法的密文、加密數(shù)組、解密數(shù)組、實(shí)時(shí)處理系統(tǒng)中處理信息的幾個(gè)重要參數(shù),均通過芯片的程序?qū)⑵鋵懭氲叫酒校怯锌诹畈拍苤匦聦懭霐?shù)據(jù),寫密碼不給用戶。當(dāng)系統(tǒng)運(yùn)行到密碼校驗(yàn)子程序時(shí),系統(tǒng)按照已給的不同的等長(zhǎng)度字符串作為入口參數(shù),然后通過加密子程序,如果通過校驗(yàn),則加密子程序返回重要參數(shù),系統(tǒng)擁有此參數(shù)時(shí),才得以繼續(xù)執(zhí)行。如果加密子程序沒有通過校驗(yàn),則系統(tǒng)停止工作。
采用軟件和硬件加密相結(jié)合的綜合設(shè)計(jì)方法,能廣泛的應(yīng)用于各種單片機(jī)系統(tǒng)。同時(shí),在構(gòu)造過程中只要設(shè)計(jì)合理,軟硬件開銷并不大,便能實(shí)現(xiàn)高性能的加密,高效穩(wěn)固的實(shí)現(xiàn)系統(tǒng)信息的保護(hù)。
加密的方法多種多樣,至于采取什么樣的方法,要結(jié)合實(shí)際產(chǎn)品特點(diǎn),從設(shè)計(jì)階段即對(duì)產(chǎn)品的加密方法作全盤考慮,可根據(jù)產(chǎn)品的技術(shù)含量和綜合仿制能力的難易程度,選擇力所能及的加密技術(shù),以使自己開發(fā)的新產(chǎn)品不被仿制或盡可能降低防止的可能性。
小知識(shí)之程序模塊
程序模塊(program module)即可由匯編程序、編譯程序、裝入程序或翻譯程序作為一個(gè)整體來處理的一級(jí)獨(dú)立的、可識(shí)別的程序指令。 它是大型程序指令的一個(gè)組成部分。









