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