SmartLock并口單片機軟件狗加密技術(shù)
由于加密給軟件開發(fā)者和用戶帶來了許多不便和麻煩,因此,全球軟件業(yè)的趨勢是開發(fā)不加密軟件,依靠版權(quán)法來保護軟件開發(fā)者的權(quán)益。但對于一些大型的工程應用軟件系統(tǒng)如:AutoCAD、Xilinx FPGA開發(fā)系統(tǒng)等,由于銷量小、成本高,不得已仍然需要使用軟件加密技術(shù)。另外,對于某些敏感行業(yè)的應用軟件也必須實行軟件加密,對程序代碼進行保護。
早期的軟件加密方法有:軟盤或硬盤加密、加密卡等,由于加密性能、兼容性能或使用不方便等方面的原因而被淘汰。目前廣為流行的是軟件狗硬件電路加密法,其中又以使用單片機的加密技術(shù)最為可靠。其硬件通常都帶有智能抗分析技術(shù),不可復制,且加密方式靈活、工作可靠、運行速度快、使用方便,不失為軟件加密的一種優(yōu)選方法。
SmartLock軟件狗加密系統(tǒng)的硬件部分外形類似火柴盒,兩頭分別帶有一個IEEE-1284并行口的公頭和母頭,串接在并行口和打印機之間。軟件狗使用的是Atmel公司的89C2051單片機,芯片從微機并行口取電,通過并口與加密軟件進行通信,系統(tǒng)主要使用代碼移植技術(shù)實現(xiàn)軟件加密。
1 Smart Lock系統(tǒng)的硬件設計
通過研究微機打印口接口電路、IEEE-1284并口通信標準和89C2051型單片機特性,設計出SmartLock加密系統(tǒng)的硬件電路如圖1所示。有89C2051單片機、3個鍺二極管、1個12MHz晶振、2個30pF瓷片電容和1個電阻共8個元件。系統(tǒng)從并行口中共引出了11根端口線,其中有8根數(shù)據(jù)線D0~D7、1根狀態(tài)線(低電平有效 ,當打印機接收完一字節(jié)數(shù)據(jù)允許微機發(fā)送下一字節(jié)數(shù)據(jù)時,發(fā)給微機信號)、1根控制線(低電平有效,打印機自動換行信號)和地線GND。
微機的標準并口并不提供+5V電源,所以只有從驅(qū)動能力較強的數(shù)據(jù)口“借電”。依據(jù)IBM PC AT/XT設計標準,并行口數(shù)據(jù)位的高電平(4.5V)輸出電流為2.5mA(舊式的TTL型)或15mA(CMOS型),而89C2051單片機的典型工作電流為5.5mA/3V,工作頻率為12MHz。所以使用D4~D6三根數(shù)據(jù)線經(jīng)鍺二極管并在一起作為單片機電源(采用鍺管的原因是因為它的壓降較小,只有0.4V)。同時為減少軟件狗硬件的功耗,電路設計得極其簡潔,除了單片機,沒有其它有源器件。
單片機復位使用的是上電自動復位電路。因此微機對并行口供電幾百毫秒之后,單片機才進入正常工作狀態(tài)。
2 并口通信協(xié)議
軟件狗使用數(shù)據(jù)口的D0~D3及D7作為微機向單片機傳送數(shù)據(jù)的前向數(shù)據(jù)通道(一次送半字節(jié)數(shù)據(jù),用D7位標志高/低半字節(jié));并口控制/狀態(tài)信號中的和平時不常用,所以這里用來作為微機向單片機傳送數(shù)據(jù)時的握手信號。信號為高電平,則表示微機已準備好待傳送數(shù)據(jù),此協(xié)議中稱為DR(data ready)信號;信號為低電平,表示單片機已準備好接收數(shù)據(jù),此協(xié)議中稱為PR(peripheral ready)信號。
軟件狗從微機接收數(shù)據(jù)的時序如圖2所示。具體步驟是:
(1)微機中的加密程序?qū)R()控制線設置為0,然后在并口的D4~D6數(shù)據(jù)線上給一個負脈沖后再置恒1,使軟件狗復位啟動;
(2)加密程序延時300ms后,設置D7為0,表示傳送的是數(shù)據(jù)的低半字節(jié);
(3)加密程序?qū)⑿枰獋魉偷臄?shù)據(jù)放到并口的D0~D3;
(4)加密程序在DR控制線上給出一個正脈沖,通知軟件狗數(shù)據(jù)已準備好;
(5)軟件狗收到DR信號后從D0~D3線上讀取數(shù)據(jù),同時,從D7位可以了解這半字節(jié)數(shù)據(jù)是低位還是高位。讀完數(shù)據(jù)后在PR()狀態(tài)線上給出負脈沖,通知微機數(shù)據(jù)已讀完,可以進行下一次傳送;
(6)加密程序收到PR信號后,即進行下一輪的數(shù)據(jù)傳送,直到最后所有數(shù)據(jù)傳送完畢或一定時間后仍沒有收到PR信號,則出錯退出。
SmartLock系統(tǒng)使用了狀態(tài)線作為單片機向微機發(fā)送“串行”數(shù)據(jù)時的數(shù)據(jù)線。同時,通過使用獨特的脈寬調(diào)制數(shù)據(jù)傳送方式,實現(xiàn)了單端口線的數(shù)據(jù)傳輸。這是由于:
(1)微機并行口的用途是由微機向外設進行單向的數(shù)據(jù)傳輸,同時沒有多余的備用端口線;
(2)并口中只有狀態(tài)線才能向微機傳送信息,其中狀態(tài)線一般不用。
軟件狗向微機發(fā)送數(shù)據(jù)的時序比較特殊,如圖3所示。具體步驟是:
(1)微機中的加密程序?qū)⒖刂茙l(fā)送完畢后開始等待軟件狗的返回數(shù)據(jù)。
(2)軟件狗計算出返回數(shù)據(jù)后,首先發(fā)送一個固定長度的標準負脈沖,然后再依據(jù)數(shù)據(jù)值發(fā)送一個數(shù)據(jù)脈沖,兩個脈沖代表一個數(shù)據(jù)值;直到所有數(shù)據(jù)發(fā)送完畢為止。
(3)加密程序通過計算數(shù)據(jù)脈沖與標準脈沖的寬度比得到數(shù)據(jù)值。
以上說明的是微機與軟件狗之間數(shù)據(jù)通信的底層協(xié)議。雙方通信時數(shù)據(jù)幀的具體格式則可以由用戶根據(jù)需要自行定義。
3 加密軟件系統(tǒng)
軟件部分目前只采用內(nèi)含式加密法。分為以下五個模塊:底層I/O操作模塊、用戶接口模塊、反跟蹤模塊、異常處理模塊和全自動操作模塊。它們之間的結(jié)構(gòu)層次關(guān)系見圖4。
3.1 底層I/O模塊
底層I/O模塊是最底層的功能函數(shù),也是整個加密軟件系統(tǒng)的核心。主要用于與軟件狗進行數(shù)據(jù)通信,向軟件狗發(fā)送數(shù)據(jù),接收軟件狗的返回值(包括對返回值的數(shù)字化轉(zhuǎn)換和求精)及向上層模塊報告通信過程中出現(xiàn)的錯誤。實際上是前面密鑰模塊在微機內(nèi)運行的接口部分。另外,各種反跟蹤技術(shù)主要也融入到此模塊中。
3.2 用戶接口模塊
用戶接口模塊有多個,分別與軟件狗的各個功能一一對應,用于對通信中數(shù)據(jù)格式的轉(zhuǎn)換及對通信過程的管理。它們將上層軟件傳來的指令翻譯為軟件狗能識別的格式后再傳給底層模塊,然后將底層模塊的返回值整理后上傳。
用戶接口函數(shù)可由待加密軟件直接調(diào)用。它們自行檢測并處理軟件被跟蹤調(diào)試時的情況,同時顯式或是隱式地向用戶軟件提供軟件狗是否合法的信息,用戶軟件可依據(jù)該信息來自行定義對軟件系統(tǒng)處于非法運行狀態(tài)時的處理措施(本軟件系統(tǒng)提供了與各種反擊方法對應的函數(shù))。這種使用模式十分有利于加密模塊與軟件系統(tǒng)的融合,能大大提高軟件系統(tǒng)的抗解密性能。
3.3 全自動操作模塊
若用戶要求軟件加密系統(tǒng)自動完成對軟件狗的檢測及對檢測結(jié)果的處理,則可使用該函數(shù)。它自行使用隨機命令調(diào)用用戶接口模塊以檢測軟件狗的合法性,然后自動對檢測結(jié)果進行判斷并處理。當然,集成度高必然導致抗解密性能下降。
3.4 反跟蹤模塊
各類反跟蹤措施(函數(shù)或程序段)用于檢測軟件系統(tǒng)目前是否處于被跟蹤的狀態(tài),或人為地制造一些障礙,阻止解密者對本加密軟件的分析。它們?nèi)诤嫌诘讓覫/O模塊、用戶接口函數(shù)及自動操作模塊中,隱蔽地檢測軟件系統(tǒng)是否運行于調(diào)試環(huán)境下并自動作出相應處理。
3.5 異常情況處理模塊
當加密軟件檢測到軟件系統(tǒng)運行在調(diào)試環(huán)境下或軟件狗非法時,就調(diào)用這一模塊正?;蚍钦5刂兄钩绦虻倪\行。一般情況下由于程序已處于被調(diào)試的狀態(tài),中止程序運行的標準方法通常會被解密者覺察出來而達不到目的。因此,只有那些違反常規(guī)的操作代碼才能有效地中止程序的運行。
4 加密軟件的使用方法
用戶軟件只需以函數(shù)調(diào)用的方式調(diào)用SmartLock加密系統(tǒng)中的用戶接口模塊,完成對軟件的加密。這樣便在用戶軟件和加密軟件之間建立了數(shù)據(jù)聯(lián)系,隱式地檢查合法軟件狗的存在。加密軟件將自動對調(diào)試軟件檢測和處理,用戶不需管理。
另一個更為可靠的使用方式是用戶定制加密軟件。SmartLock系統(tǒng)將用戶待加密軟件中的某些算法完全移植到單片機軟件狗中去,再提供相應的用戶接口模塊。這一方式下用戶軟件將受到最大限度的保護。
5 代碼移植技術(shù)
傳統(tǒng)的軟件加密的指導思想是:在軟件系統(tǒng)中加入一種特殊的信息,這種信息既是加密后的軟件系統(tǒng)在正常運行時必須引用的,又是用戶無法自行復制的。于是,加密后該軟件系統(tǒng)的運行完全依賴于售給用戶的原信息載體。這一載體在加密技術(shù)中又被稱為密鑰。
本加密系統(tǒng)使用的代碼移植技術(shù)是指將待加密軟件的某些算法、程序段、重要的運算過程改造成單片機程序放在單片機中執(zhí)行。由于單片機的程序ROM是解密者不可讀的,這樣,這段代碼就被完全地保護起來了,解密者將無法接觸到這段代碼和數(shù)據(jù)。通過接口函數(shù),軟件狗可代替用戶軟件系統(tǒng)執(zhí)行一些簡單的運算功能,以實現(xiàn)代碼移植。這一技術(shù)實際上是改造了傳統(tǒng)的加密指導思想,它把原軟件系統(tǒng)中的一部分信息取出來,封裝到解密者不可復制的軟件狗中。
按傳統(tǒng)加密思想加密后的軟件系統(tǒng)中,軟件部分實際上仍然包含有原軟件系統(tǒng)正常運行時所需要的所有信息(指令算法和數(shù)據(jù))。在經(jīng)過代碼移植技術(shù)加密的軟件系統(tǒng),系統(tǒng)的軟件部分已不完整,解密者即使歷盡千辛萬苦把軟件分析透徹了,軟件系統(tǒng)的正常運行還是離不開軟件狗的支持。
SmartLock軟件加密系統(tǒng)中使用的新穎技術(shù)主要有以下兩點,它們有力地保證了軟件狗的抗分析、反跟蹤性能。
(1)特殊的并口通信協(xié)議
脈沖形式的握手信號,可有效對抗各種跟蹤調(diào)試工具及軟件。由圖2軟件狗的數(shù)據(jù)接收時序可知,本通信協(xié)議中,微機向單片機傳送數(shù)據(jù)時是使用窄脈沖信號作為握手信號,這樣微機的CPU必須不間斷地查詢軟件狗的PR信號。而解密者在調(diào)試跟蹤本軟件時必然會因調(diào)試狀態(tài)下軟件運行時斷時續(xù)而收不到握手信號,使數(shù)據(jù)傳輸過程出錯。軟件將無法正常工作。同時,反跟蹤模塊也可由此輕易查知調(diào)試環(huán)境的存在而采取相應的對策。
通過脈寬調(diào)制信號從軟件狗向微機傳送數(shù)據(jù)是一種全新的微機打印口數(shù)據(jù)傳輸方法。由于它與通常的數(shù)字信號相差很大,所以這種形式的數(shù)據(jù)具有很強的反動態(tài)跟蹤能力。這樣既解決了標準并行口反向傳輸信道窄的問題,又可有效對抗各種調(diào)試工具軟件及端口信號分析儀。除非解密者完全了解它的工作機理,否則根本無法知道軟件狗在干什么。
(2)代碼移植技術(shù)
該技術(shù)將待加密軟件與加密系統(tǒng)緊密配合,將需要保護的軟件完全封裝在黑盒中。
實際使用時,SmartLock軟件狗系統(tǒng)還可以進行更靈活的設計以達到更強的加密效果。例如:將并行口的數(shù)據(jù)線與89C2051單片機的P1口全部對接,同時將8根數(shù)據(jù)線全部通過鍺二極管并接成單片機電源。通信過程中,將其中的5根作為數(shù)據(jù)傳輸線,3根作為電源傳輸線;而且每根數(shù)據(jù)端口線的作用可以進行動態(tài)再分配。這種方法可以讓端口分析儀幾乎失去作用,抗分析性極強。
SmartLock軟件狗可以輕易設計成一系列軟件加密狗,在實際應用中效果良好。