Flash型單片機(jī)破解/解密技術(shù)分析
來(lái)源:IC解密,并著重討論使用密碼加解密的方法以及相應(yīng)的用戶接口程序設(shè)計(jì)思路。廠商利用單片機(jī)進(jìn)行產(chǎn)品開(kāi)發(fā)時(shí),都會(huì)關(guān)心其代碼和數(shù)據(jù)的保密性??紤]到用戶在編寫(xiě)和調(diào)試代碼時(shí)所付出的時(shí)間和精力,代碼的成本是不言而喻的。早期的單片機(jī),代碼是交給芯片制造商制成掩膜ROM。有兩種加密的機(jī)制,一是徹底破壞讀取代碼的功能,無(wú)論是開(kāi)發(fā)者還是使用者都永遠(yuǎn)無(wú)法讀取其中的內(nèi)容。從安全上來(lái)說(shuō),這種方式很徹底,但是已經(jīng)無(wú)法檢查ROM中的代碼了。另一種方法是不公開(kāi)讀取方法,廠商仍可以讀取代碼。這種方式留有檢查代碼的可能性,但是并不能算是一種真正的“加密”,被破解的可能性是存在的??陀^地講,一方面希望加密很徹底,而另外一方面又希望留有檢查代碼的可能,這是相互矛盾的要求。
Freescale公司的HCS12單片機(jī)采用的加解密思路有一定的典型性,我們對(duì)此作了一些研究,現(xiàn)以MC9S12DP256單片機(jī)為例,介紹Flash型單片機(jī)的加密解密方法。
BDM程序調(diào)試接口
Freescale公司的很多單片機(jī)都借用一種被稱為后臺(tái)調(diào)試模式(Background Debug Mode,BDM)作為下載和調(diào)試程序的接口。BDM是一種單線調(diào)試模式,芯片通過(guò)一個(gè)引腳與編程器進(jìn)行通信。在HCS12系列單片機(jī)中,內(nèi)部都置有標(biāo)準(zhǔn)的BDM調(diào)試模塊。
該模塊有三種作用:
1)對(duì)內(nèi)部存儲(chǔ)器的讀寫(xiě)。將用戶程序下載到目標(biāo)芯片中或是將存儲(chǔ)器中的數(shù)據(jù)讀出。
2)利用BDM模塊可以讀寫(xiě)內(nèi)存和CPU內(nèi)部寄存器,調(diào)試程序
3)對(duì)單片機(jī)工作方式和資源進(jìn)行配置。部分涉及到單片機(jī)工作方式和資源配置的寄存器只能在特殊模式下由編程器發(fā)送BDM命令來(lái)修改。。
在HCS12單片機(jī)未加密的狀態(tài)下,使用BDM硬件命令可以將Flash ROM中的程序讀出或?qū)⑿碌某绦驅(qū)懭?。BDM命令可以由獨(dú)立的硬件系統(tǒng)來(lái)送出,我們一般稱此類(lèi)系統(tǒng)為BDM編程器。
BDM編程器的時(shí)序協(xié)議是公開(kāi)的,任何人都可以根據(jù)協(xié)議設(shè)計(jì)硬件、編寫(xiě)程序,實(shí)現(xiàn)BDM編程器的功能。使用BDM接口,編程器可以很容易的訪問(wèn)到目標(biāo)系統(tǒng)的存儲(chǔ)器,這給程序調(diào)試和燒寫(xiě)帶來(lái)了很大的方便,然而,便利的對(duì)外接口也給盜用者留下了可乘之機(jī)。
在帶有BDM模塊的單片機(jī)中引入數(shù)據(jù)保密機(jī)制并非HCS12系列的首創(chuàng),先前的HC12系列單片機(jī)的D家族中,就已經(jīng)引入了屏蔽Lockout BDM讀寫(xiě)的機(jī)制,可惜,該機(jī)制在單片機(jī)的擴(kuò)展工作模式下存在著漏洞。相比之下,HCS12系列單片機(jī)中的保密機(jī)制更加完善,無(wú)論在BDM模式下或是擴(kuò)展模式下,都可以屏蔽外部對(duì)Flash ROM的讀寫(xiě)。
兩種加密解密方法
在HCS12系列單片機(jī)中,加密可以分成兩種方法:完全加密和使用密碼的加密。這兩種加密的方法根據(jù)用戶的需求,使用的場(chǎng)合也有所不同。
完全加密
所謂完全加密,就是將芯片徹底的保護(hù)起來(lái),屏蔽對(duì)芯片的所有讀操作。在MC9S12DP256單片機(jī)中,加密是通過(guò)對(duì)某一Flash單元($FF0F)編程來(lái)實(shí)現(xiàn)的。加密后的芯片,BDM編程器對(duì)Flash的讀操作就被禁止了。采用完全加密,讀取ROM代碼的可能性就不存在了,這是一種最為“安全”的加密方法。如果用戶想修改ROM的內(nèi)容,唯一的辦法就是將Flash的內(nèi)容全部擦除,這一操作可以通過(guò)BDM編程器來(lái)完成。使用BDM編程器擦除Flash ROM和EEPROM的過(guò)程與在普通模式下對(duì)片內(nèi)的Flash ROM擦除操作過(guò)程基本一樣,區(qū)別是對(duì)寄存器或是存儲(chǔ)單元的讀寫(xiě)要改由BDM命令來(lái)實(shí)現(xiàn)。通過(guò)BDM編程器將一連串完整的擦除指令序列送給單片機(jī),就可將Flash ROM和EEPROM的內(nèi)容全部擦除了。在全擦除操作完成后,BDM編程器將系統(tǒng)復(fù)位,系統(tǒng)會(huì)自動(dòng)檢查全擦除操作是否成功。如果成功,BDM狀態(tài)寄存器的UNSEC位會(huì)自動(dòng)置“1”,系統(tǒng)進(jìn)入解密狀態(tài)。由于系統(tǒng)靠檢查Flash ROM和EEPROM是否清空來(lái)決定系統(tǒng)是否保持加密狀態(tài),所以,如果用戶程序偶然將Flash ROM和EEPROM的內(nèi)容全部擦除,那么系統(tǒng)也將自動(dòng)解密。
使用密碼的加密
為了留有讀取ROM代碼的可能,用戶可以采用一種帶有密碼的加密方式。解密時(shí),用戶只要給出正確的密碼(稱為“后門(mén)密碼”),就可以讀寫(xiě)ROM,而不破壞其內(nèi)容了。使用這種方法,用戶需要在加密之前,設(shè)定4個(gè)字長(zhǎng)的密碼,并將其存放在Flash中,MC9S12DP256存放密碼的Flash地址是從$FF00到$FF07。設(shè)定的密碼可以隨用戶程序一起下載到芯片中。解密時(shí),接受用戶輸入的密碼并驗(yàn)證的工作只能由一個(gè)用戶接口程序來(lái)完成的,不能使用BDM編程器。接口的方式?jīng)]有限制,如SCI、SPI、IIC、MSCAN等等,只要用戶能夠?qū)⒄_的密碼輸入,任何一種接口方式都是可以的,最為典型的接口是串口。
通過(guò)研究發(fā)現(xiàn),使用帶有密碼的加密方式,看似給破解代碼留有了可能性,但因?yàn)榻邮芎万?yàn)證密碼都需要由用戶程序完成,只要用戶程序設(shè)計(jì)的可靠,這種可能性是很小的。