案例DS28E01典型應(yīng)用及破解方法

一直以來對于DS28E01系列的芯片解密經(jīng)常被客戶咨詢,對此我們公司工程技術(shù)部把DS28E01芯片解密,作為典型案例來向廣大客戶進行詳細解讀。
目前我公司專業(yè)提供
1、各類軟件狗破解 如: 并口加密狗,USB加密狗,license破解; 
2、無源碼修改軟件功能、破解后軟件二次加密,并重新包裝; 
3、注冊碼破解,一次破解終身享用;
4、提供加密鎖改版服務(wù);
5、PCB抄板、生產(chǎn)、加工一條龍服務(wù)。
 
 
DS28E01一般應(yīng)用在加密保護,防止產(chǎn)品被輕易copy盜版。
 
第一種最流行的就是反匯編了,將主控芯片的代碼反編譯,然后找到加密驗證的代碼,直接跳過去,或者給修改內(nèi)存RAM強制驗證合法,這種方法很有效但是很復雜,要求破解人員對各種單片機和控制器的匯編指令,芯片構(gòu)架,加密芯片的使用方法,開發(fā)工具都很精通,還有一個就是從商業(yè)角度考慮可操作性不高,因為沒有完成破解之前誰都無法保證能不能破解,但是先要拿到解密的機器碼,客戶要拿到機器碼就需要先出破解芯片的費用,最后不管成功與否客戶的解密費用都花掉了。第二種方法就是模擬驗證時候的通信波形,慢速的可以用單片機模擬,高速的通信協(xié)議就只能用CPLD了,但是在時候這種方法之前就要做一個工作就是要讓主控芯片每次都產(chǎn)生相同的隨機數(shù)。
 
 
簡單介紹DS28E01:
DS28E01通過1條單總線與MCU通信,單總線不多說了,要求時間非常嚴格,精確到us級別。
DS28E01有四個存儲區(qū):
數(shù)據(jù)存儲器(EEPROM)(共分4頁,每頁32個字節(jié))
密鑰存儲器(secret)(8字節(jié))
含有特定功能和用戶字節(jié)的寄存器頁(register page)
易失性暫存器(scratchpad)(8字節(jié))
 
MCU通過單總線只能讀寫暫存器,而不能直接讀寫其它存儲區(qū)。
向數(shù)據(jù)存儲器寫數(shù)據(jù)、載入初始密鑰或者向寄存器頁寫數(shù)據(jù)時,先把數(shù)據(jù)寫入暫存器,然后通過相應(yīng)的命令,讓芯片自行從暫存器拷貝數(shù)據(jù)至目的地址。
 
工作原理:
芯片內(nèi)部有一個SHA-160加密模塊,參與SHA算法的為55字節(jié)特定格式的數(shù)據(jù),
這些數(shù)據(jù)包含8字節(jié)密鑰,5字節(jié)用戶指定的隨機數(shù),32字節(jié)EEPROM內(nèi)容,7字節(jié)ROMID,2字節(jié)固定數(shù)據(jù)(0xFF)和1字節(jié)EEPROM的地址TA1。
MCU可以讀取芯片通過SHA加密后的20字節(jié)哈希值,并與MCU自己通過同樣的算法計算出的哈希值進行比對。
既然MCU要進行同樣的加密操作,要么肯定要生成與芯片內(nèi)部完全相同的55字節(jié)消息,怎么得來的呢?
8字節(jié)密鑰是自己生成并寫進去的.               ->OK
5字節(jié)隨機數(shù)是在芯片執(zhí)行SHA之前寫進暫存器的值.   ->OK
32字節(jié)EEPROM數(shù)據(jù),在讀回20字節(jié)哈希值之前,芯片會傳回這32字節(jié)內(nèi)容。 ->OK
7字節(jié)ROMID,可以在任何時候讀到芯片的ROMID.   ->OK
2字節(jié)固定值,看手冊可以知道   ->OK
1字節(jié)TA1,自己寫進去的.   ->OK
 
典型應(yīng)用過程:
過程一:初始化DS28E01密鑰
初始化密鑰只在產(chǎn)品出產(chǎn)前在工廠進行操作,只需要操作一次即可。
程序流程:
1.讀取芯片ROMID
2.通過一定的算法生成一個唯一的64位的密鑰,保證每塊主板產(chǎn)生的密鑰各不相同。
3.將密鑰寫入芯片暫存區(qū),并讀回驗證寫入是否正確
4.執(zhí)行芯片加載密鑰命令,讓芯片將暫存區(qū)中的64位密鑰保存至密鑰存儲區(qū)
5.完成。
 
過程二:驗證DS28E01密鑰
驗證密鑰是在產(chǎn)品應(yīng)用程序中進行,每次啟動產(chǎn)品時都會驗證DS28E01密鑰是否正確,
驗證通過則正常運行,驗證不正確則通過一定手段讓產(chǎn)品工作不正常。
程序流程:
1.讀取芯片ROMID
2.通過與初始化過程中相同的算法,生成64位密鑰
3.向芯片暫存區(qū)寫入8字節(jié)隨機數(shù)(只用到其中5個字節(jié)),并讀回驗證
4.向芯片發(fā)加密認證命令,可以讀回32字節(jié)EEPROM數(shù)據(jù)和20字節(jié)哈希值
5.用上面讀到數(shù)據(jù),生成55字節(jié)摘要消息,并進行SHA1運算
6.比較自己計算出的哈希值和從芯片讀回的哈希值是否一致
 
破解方法:
從上面的應(yīng)用過程可以看出,這里的關(guān)鍵算法是SHA1,而參與SHA計算的數(shù)據(jù)有兩份,一份在芯片內(nèi)部,我們是無法讀出的,
但是另一份卻是在MCU內(nèi)部生成的,所以只要獲取到MCU內(nèi)部生成消息的過程就完成了破解。
而其中關(guān)鍵數(shù)據(jù)是8字節(jié)的密鑰,因為這8字節(jié)密鑰是一般情況是綁定的ROMID和CPUID的,
因此只要能從程序中分析出密鑰生成算法就可以達到破解的目的,這個過程只是時間問題。
 
結(jié)論:
加密芯片并沒有什么卵用,再復雜的加密算法也只是增加了破解的難度,并不能從根本上解決問題。
防止產(chǎn)品被破解和盜版的唯一方法只有一個:那就是防止從產(chǎn)品中讀取到正確二進制代碼。
可惜目前還沒有什么芯片的FLASH內(nèi)容是不能讀出來。
 
加密與解密就像矛與盾,是一對永恒的對立面,此增彼長,無窮無盡。