摘? 要: 一種USB加密接口的開發(fā)及其反解密技術(shù)。在分析USB軟件狗安全性的基礎(chǔ)上,提出了一系列反解密措施。
????關(guān)鍵詞: USB? 軟件狗? 反解密
?????????????????????????????????????????
多年來個人計(jì)算機(jī)的串口與并口的功能和結(jié)構(gòu)并沒有什么變化。但是,串、并口不僅速度有限,而且在使用上很不方便。如傳統(tǒng)的軟件狗安裝在并口上,極易與打印機(jī)沖突。
USB軟件狗是USB接口技術(shù)與第四代軟件狗技術(shù)結(jié)合的產(chǎn)物,與其他軟件狗相比具有明顯優(yōu)勢:(1)USB的數(shù)據(jù)傳輸速度快,USB1.1協(xié)議定義的USB全速設(shè)備的速率為12Mbps,USB2.0定義的高速設(shè)備可達(dá)480Mbps。(2)USB的底層數(shù)據(jù)傳輸具有特定的打包方法和編碼格式,這樣就增加了加密數(shù)據(jù)在傳輸過程中被截獲及解密的難度。(3)USB設(shè)備的熱插拔、即插即用的特性極大地方便了用戶的使用,免除了用戶開機(jī)箱和重啟動的麻煩。
目前軟件保護(hù)方法大致可分為二類:軟加密和硬加密。軟加密是用純軟件的方式來實(shí)現(xiàn)軟件的加密,主要包括密碼方式、軟件的校驗(yàn)方式和鑰匙盤方式。硬加密則是利用硬件與軟件相結(jié)合來實(shí)現(xiàn)軟件的加密,其典型產(chǎn)品有加密卡和軟件狗等。
軟件加密狗是一種智能型加密狗,是安裝在計(jì)算機(jī)外設(shè)接口上的硬件電路。當(dāng)被保護(hù)的軟件運(yùn)行時,程序向插在計(jì)算機(jī)上的加密狗發(fā)出查詢命令,加密狗迅速計(jì)算、查詢并給出響應(yīng),正確的響應(yīng)能保證軟件順利運(yùn)行。如果沒有加密狗,程序就不能運(yùn)行。第三代軟件狗的核心芯片是E2PROM,主機(jī)通過并行口直接讀寫E2PROM以實(shí)現(xiàn)對加密信息的存取;第四代(最新)軟件加密狗內(nèi)置一個單片機(jī)芯片(又稱微狗),芯片中存有特定的算法程序,可將讀出的密鑰進(jìn)行加密變換,以對抗邏輯分析儀。
1? USB軟件狗的硬件設(shè)計(jì)
1.1 USB接口芯片
目前,USB接口芯片有許多種,但無論何種接口芯片都有2個基本功能:一是與主機(jī)通信,二是提供對外圍電路CPU的接口。也就是說,接口芯片架起了計(jì)算機(jī)與外圍設(shè)備的橋梁,使開發(fā)者不用關(guān)心復(fù)雜的USB協(xié)議是如何將數(shù)據(jù)傳送到主機(jī)的。
現(xiàn)有的支持USB協(xié)議的接口芯片可大致分為二類:一類為內(nèi)部集成了微控制器,如美國TI公司的TUSB3210芯片,它內(nèi)嵌一個兼容的805lMPU;另一類則只提供對外圍電路訪問的讀寫接口,如美國國家半導(dǎo)體公司的USBN9603芯片。在加密狗的設(shè)計(jì)中,建議采用第2種類型的接口芯片(因?yàn)閷τ谳^復(fù)雜的加密算法,使用計(jì)算能力較強(qiáng)的805lMPU或?qū)S眉用芴幚砥魈幚砥饋砀奖阋恍?。下面以本系統(tǒng)采用的USBN9603為例介紹接口芯片的使用。
USBN9603其微處理芯片采用的是Philips公司的可基于系統(tǒng)編程的單片機(jī)P89C51RD2,它負(fù)責(zé)控制USBN9603芯片的狀態(tài)和讀寫USB節(jié)點(diǎn)的數(shù)據(jù),以及負(fù)責(zé)控制外部存儲器及其他功能設(shè)備。在系統(tǒng)中,還使用ATMEL公司的24C64作為存儲芯片,采用P89C51RD2單片機(jī)的P1口模擬I2C總線來實(shí)現(xiàn)MCU與24C64的連接。
USBN9603是一個功能較強(qiáng)的芯片,支持USB1.1協(xié)議,可以實(shí)現(xiàn)全速的USB傳輸方式,能實(shí)現(xiàn)12Mbps的高速傳輸。USBN9603提供了一系列事件寄存器(Event Register),它的每一位都代表一個事件。如Main Event Register中的TX_EV位的值為1,則代表收到了1個發(fā)給它的傳送事件。事件寄存器的各個位的值,一般由硬件根據(jù)各個事件的發(fā)生情況來設(shè)置,用戶無法干預(yù)。在中斷產(chǎn)生之后,可以通過查看這些寄存器的每一位的狀態(tài)來獲得事件發(fā)生的信息。
此外,USBN9603還提供了一系列事件屏蔽寄存器(Mask Register)。這組寄存器的每一位都對應(yīng)于事件寄存器的相應(yīng)位。把這組寄存器上相應(yīng)的位置1,就可以允許該事件觸發(fā)中斷,否則就是事件發(fā)生也不會產(chǎn)生中斷信號。如把Main Mask Register(MAMSK)中的TX_EV位的值設(shè)置為0,則USBN9603不會再報(bào)告?zhèn)魉褪录陌l(fā)生。
USBN9603使用外部晶振,同時有一個對外的時鐘輸出器產(chǎn)生對外的時鐘信號,它的輸出頻率可由軟件來控制。USBN9603的USB接口引擎由物理層和媒介通道控制器組成。物理層包括數(shù)字時鐘電路、監(jiān)視電路、位填充與清除邏輯電路等。媒介通道控制器層要完成數(shù)據(jù)包格式化、循環(huán)冗余檢測、端點(diǎn)地址偵察等任務(wù),并提供對端點(diǎn)發(fā)出的NAK、ACK和STALL回應(yīng)的控制。接口引擎還要負(fù)責(zé)偵察和報(bào)告USB總線事件,如復(fù)位、掛起和恢復(fù)。
USBN9603向開發(fā)者提供了58個可編程的寄存器,地址分布范圍為0x00~0x3F。MPU通過對寄存器的讀寫,完成對USB接口的操作。USBN9603寄存器被映射為MPU的外部RAM。MPU通過CS片選信號尋址,在ALE信號及RD、WR信號的配合下,由8位的并口寫入地址和數(shù)據(jù)。雖然USBN9603讀寫操作簡單,但各寄存器的定義及作用卻較復(fù)雜,但只要對USB協(xié)議及USBN9603功能有一定的了解,就不難理解和掌握各寄存器的使用。
1.2 電路設(shè)計(jì)
外圍控制電路的作用有2個:對USB進(jìn)行讀寫操作和對加密模塊的操作。這要求主控芯片提供基本的讀寫、中斷和地址/數(shù)據(jù)信號,同時要有一定的計(jì)算能力以適應(yīng)加密算法。在此前提下,可有多種選擇,但加密卡的制作不能一味地追求高保密性能,應(yīng)根據(jù)不同的應(yīng)用場合靈活地選用不同的方案。本文設(shè)計(jì)的USB軟件狗的硬件電路圖如圖1所示。其核心處理器件是P89C51RD2。P89C51RD2是Philips公司的CMOS高性能單片機(jī),與80C51單片機(jī)完全兼容。P89C51RD2可采用串行編程方式,且有2種形式:基于系統(tǒng)的編程和基于應(yīng)用的編程?;谙到y(tǒng)的編程方式可以有效地降低開發(fā)成本,縮短開發(fā)周期。
?
本設(shè)計(jì)中所使用的存儲器是24C64,它是帶有硬件寫保護(hù)功能的串行E2PROM,其接口兼容I2C總線規(guī)范,通過一對串行時鐘、數(shù)據(jù)線對片內(nèi)存儲單元進(jìn)行讀寫。24C64的片內(nèi)存儲器容量為64KB。
作者在實(shí)際中加密模塊所使用的方案為單片機(jī)+FPGA模式,既可方便地用單片機(jī)完成對USB口的操作,又能利用FPGA的速度快和保密性強(qiáng)等特點(diǎn)實(shí)現(xiàn)復(fù)雜的加密算法。FPGA支持眾多的加密標(biāo)準(zhǔn)(如AES、DES、三重DES),而且依靠FPGA的在線編程功能可方便地實(shí)現(xiàn)算法的更新與升級。這種組合模式符合模塊化設(shè)計(jì)思想,在一定程度上提高了開發(fā)速度。
2? USB軟件狗的軟件設(shè)計(jì)
2.1 固件程序的設(shè)計(jì)
USB軟件狗的軟件包括主機(jī)軟件和微控制器中的軟件(固件)。主機(jī)軟件和固件相配合,協(xié)同完成主機(jī)與USB軟件狗間的信息交換。其中,微控制器中的固件主要完成與主機(jī)的通信(包括參與USB總線設(shè)備枚舉、USB軟件狗的自身標(biāo)識等)、對24C64的讀寫操作、與主機(jī)程序相配合實(shí)現(xiàn)和主機(jī)程序間的數(shù)據(jù)交換等任務(wù)。
固化程序的編制完全是按照中斷驅(qū)動方式編制的。當(dāng)MPU處理其他任務(wù)時,USB數(shù)據(jù)的傳輸在中斷程序中進(jìn)行,這樣可使傳輸速度最快并且也簡化了編程和調(diào)試工作。微控制器程序的USB通信簡化軟件框圖如圖2所示。
?
24C64遵循I2C總線協(xié)議,采用SDA、SCL雙線串行傳輸數(shù)據(jù)。在89C51上模擬I2C總線的設(shè)計(jì)中,用P1口的P1^2模擬SCL信號,用P1^3模擬SDA信號(對24C64具體的讀寫程序在很多相關(guān)書籍中都有具體的實(shí)例程序,本文不再詳細(xì)敘述)。為防止24C64的內(nèi)容意外改變,在不進(jìn)行寫操作時,可使WP引腳保持為高電平。同時為保障整個系統(tǒng)的安全,存儲器24C64中的任何數(shù)據(jù)都應(yīng)采用加密的形式存放。
2.2 驅(qū)動程序的設(shè)計(jì)
驅(qū)動程序的基本功能是建立應(yīng)用程序與加密卡之間的數(shù)據(jù)通信。Window 98和Window 2000操作系統(tǒng)為USB總線提供了全面的支持,并且用WDM(Windows Device Mode)設(shè)備驅(qū)動程序模型代替了VxD設(shè)備驅(qū)動程序。WDM支持USB1.1協(xié)議,并為用戶開發(fā)自己的用戶驅(qū)動程序提供了接口USBDI(USB Driving Interface)。USB用戶驅(qū)動程序通過USBDI訪問USB設(shè)備類驅(qū)動程序。USB外設(shè)不占用任何硬件資源(端口或中斷),所有低層I/O都由USB設(shè)備類驅(qū)動程序來執(zhí)行。客戶驅(qū)動程序只關(guān)心數(shù)據(jù)傳輸類型、傳輸時序、傳輸管道以及如何處理數(shù)據(jù)等主要操作。USBDI就是為實(shí)現(xiàn)以上操作而設(shè)計(jì)的軟件接口。Windows 98和Windows 2000提供了如USB鼠標(biāo)、USB鍵盤等設(shè)備的驅(qū)動程序,但是對一些特殊的設(shè)備(如數(shù)據(jù)加密系統(tǒng)),到目前為止還沒有提供現(xiàn)成的驅(qū)動程序操作系統(tǒng),所以必須自己編制驅(qū)動程序。USB設(shè)備的驅(qū)動程序一般用WDM而不能用VxD來編寫。盡管系統(tǒng)已經(jīng)提供了很多的標(biāo)準(zhǔn)接口函數(shù),但是直接使用DDK編制USB驅(qū)動程序還是很困難的事情。不過目前很多軟件廠商提供了一些非常好用的軟件,使編制工作變得簡單。例如Compuare Numega公司的DriverWorks等。使用這些軟件可在較短的時間內(nèi)生成高質(zhì)量的驅(qū)動程序(具體步驟比較簡單,在此不做詳細(xì)的說明)。有關(guān)Windows對USB支持的更詳細(xì)的說明,請參考Microsoft提供的設(shè)備驅(qū)動程序開發(fā)包(DDK)中的說明。
3?USB軟件狗反解密技術(shù)
傳統(tǒng)的軟件狗的解密方法主要有硬件和軟件2種。
(1)軟件狗的硬件解密方法主要是仿制軟件狗的硬件電路,通過使用邏輯分析儀攔截I/O口的數(shù)據(jù),記錄下軟件狗與主機(jī)之間所傳送的數(shù)據(jù),再用硬件電路來仿真。這種方法對付早期的軟件狗很有效。但USB軟件狗內(nèi)置單片機(jī),固化的單片機(jī)軟件保證外部不可讀,但可仿制。并且由于使用USB協(xié)議,通信復(fù)雜且數(shù)據(jù)量大,因此該方法現(xiàn)在已經(jīng)不適用。
(2)目前,常用的軟件狗解密方法主要是軟件,包括軟件模擬、跟蹤分析等方法。
軟件模擬就是先啟動SOFTICE一類的I/O攔截軟件,然后在有軟件狗的情況下啟動受保護(hù)軟件,同時,SOFTICE攔截并記錄下受保護(hù)軟件與軟件狗接口之間的通信數(shù)據(jù)供以后使用。然后通過分析記錄的數(shù)據(jù),編制一個軟件狗接口的仿真程序,用以代替真正的軟件狗。完成后,只需在啟動受保護(hù)軟件前先啟動仿真軟件,由仿真軟件與受保護(hù)軟件進(jìn)行數(shù)據(jù)交互。USB軟件狗與受保護(hù)軟件之間并不直接交換任何密碼,而是由系統(tǒng)時間生成一個隨機(jī)數(shù)據(jù),由主機(jī)軟件加密后同明文一起傳送給USB軟件狗,由USB軟件狗解密密文并同明文比較。這樣,軟件模擬方法就會失效了。
在各種軟件狗的軟件解密方法中,以跟蹤分析方法最為強(qiáng)大,具體的有靜態(tài)分析和動態(tài)跟蹤等方法。
靜態(tài)分析方法是用反編譯工具軟件對受保護(hù)軟件進(jìn)行逆向分析,以求找出訪問軟件狗的代碼并進(jìn)行相應(yīng)的修改。USB軟件狗采用了API函數(shù)調(diào)用與SHELL外殼加密結(jié)合的技術(shù),可以有效地對抗靜態(tài)分析方法。即使被使用脫殼工具軟件后外殼被破壞,內(nèi)部加密函數(shù)的調(diào)用仍然能保證保護(hù)的有效性。
動態(tài)跟蹤破解法要求使用者具有豐富的破解經(jīng)驗(yàn)。該方法使用調(diào)試分析工具軟件,跟蹤控制受保護(hù)軟件的整個運(yùn)行過程,找出與軟件狗間交互部分的判斷代碼并進(jìn)行修改,以使其跳過對軟件狗的檢測或使檢測結(jié)果無效。為對付這種破解方法,USB軟件狗使用了數(shù)據(jù)交換隨機(jī)噪聲技術(shù)和迷宮技術(shù),在程序入口和出口之間包含大量無效判斷跳轉(zhuǎn)進(jìn)行干擾,動態(tài)改變執(zhí)行次序,提升抗跟蹤能力。此外,USB軟件狗內(nèi)部設(shè)有時間閘,各種操作必須在規(guī)定的時間內(nèi)完成。正常操作用時很短,跟蹤操作用時較長,超過規(guī)定時間將返回錯誤結(jié)果。
USB軟件狗除了進(jìn)行軟件合法性保護(hù)外,還包含其他很多有用的功能。它包含有8KB可讀寫的Flash存儲器,可以掉電保存軟件開發(fā)商設(shè)置的初始口令以及用于存放關(guān)鍵數(shù)據(jù)、配置參數(shù)等信息;可以從硬件上對抗共享器共享;可以更加安全穩(wěn)定地實(shí)現(xiàn)軟件試用期和使用次數(shù)控制等功能。
4? 結(jié)束語
USB軟件狗作為新一代的軟件狗為軟件保護(hù)提供了一種理想的方式,使軟件狗被破解的可能性大大降低;現(xiàn)代密碼技術(shù)的快速發(fā)展也為軟件狗技術(shù)提供了更加廣闊的發(fā)展空間。但是世界上沒有絕對安全的加密技術(shù),面對層出不窮的威脅計(jì)算機(jī)安全的行為,各種各樣的加密技術(shù)將不斷涌現(xiàn)。作為USB技術(shù)和軟件狗技術(shù)相結(jié)合的產(chǎn)物,USB軟件狗技術(shù)無疑會具有十分強(qiáng)大的生命力。
?
參考文獻(xiàn)
1? Compaq,Intel,Microsoft et al.Universal Serial Bus?Specification,Revision 1.1.1998
2? Compaq,Intel,Microsoft et al.USB Class Definitions for Communication Devices,Version 1.1.1999
3? USBN9603 DATASHEET.National Semiconductor?Corporation.2001
4? Jan Axelson著,陳逸等譯.USB大全.北京:中國電力出版社,2001
5? 張念淮,江浩.USB總線接口開發(fā)指南.北京:國防工業(yè)出版社,2001
6? 張國云,彭仕玉,禹柳飛等.基于USB接口的IC卡讀寫器的設(shè)計(jì).電子技術(shù),2002;(1)
7? 秦小龍,楊義先.USB密碼鑰及其在Kerberos系統(tǒng)中的應(yīng)用.計(jì)算機(jī)工程與應(yīng)用,2002;(5)
8? 伍云霞,孫繼平.安全認(rèn)證系統(tǒng)中嵌入U(xiǎn)SB接口技術(shù).電子技術(shù)應(yīng)用,2002;(3)
9? 徐增祥.USB軟件狗的設(shè)計(jì)及反破解技術(shù).電子技術(shù)應(yīng)用,2002;(7)
10 胡曉軍,楊正新,郜業(yè)猛等.USB軟件加密卡及其驅(qū)動程序的設(shè)計(jì)與開發(fā).電子工程師,2002;(8)