2008年,我的一個朋友因為他們的控制主板被盜抄了,損失相當巨大,他找到了我尋求加密措施,由于他們采用的是ATmega128單片機,盡管他們已經采取了加密,但還是被破解了,為此我搜索了網絡上的大部分資料,都沒有一個具體有效的方案。經過本人研究后,在這里介紹一種有效的MRC多重加密技術,已經用到了實際產品中,可以說這種加密技術是非常有效的。
本文引用地址:http://www.104case.com/article/201611/320750.htm1. 單片機程序的破解過程:
目前對于AVR單片機來講,本身有加密熔絲位,一旦熔絲被燒寫程序就不能讀出了。但這種加密技術可以通過芯片揭蓋侵入式破解,大多數破解公司都掌握了這種技術,破解費僅1000元左右。
對于這種情況已經不可避免,如果源碼沒有其他加密措施的話,把反匯編出來的程序編譯一下,換到原電路板上即可運行了。
那么如何對源碼做加密處理呢?
事實上,不管你怎么處理,都可以分析源碼,找出你的關鍵所在,并修改匯編出來的程序來破解。
而我們要做的是,將加密部分盡可能隱藏,擾亂,使得破解者只能逐一分析來破解,這樣他不但要全部了解產品的工作特點,功能,還要了解內部全部的硬件設計,以及芯片的工作原理。對于一些特殊算法他可能永遠也搞不明白,這樣使得破解的成本遠遠大于重新設計的成本。
凡是從事盜版生產的單位基本沒有開發能力,而破解者只是一些二三流工程師,真正的一流工程師對破解都不屑一顧。
2. MRC加密技術:
為啥叫MRC機密技術,因為這是香港MRC公司采用的實用加密技術,這種技術不需要增加硬件成本,主要通過以下幾個技術實現:
- 利用AVR的校準值,做身份認證,100片里面最多10片的校準值相同。
1)在頭文件里定義:
#define OSCID 0XAF //校準數值,必須設置成與MCU一致
2)在特殊程序(中斷程序,特殊算法)里
unsigned char *p;
p=(unsigned char *)0x68; //賦值,芯片為mega88,OSCID寄存器=0X66,不直接寫0X66,知道為什么嗎?
…... //賦值和恢復語句,中間有很多其他語句
p--;p--; //恢復,
if ((*p-8)==OSCID-8) //判斷,為啥這里也不直接寫為OSCID?
{
//放置正確的處理程序
}
else
{
//故意寫錯計算的程序
}
類似上述這樣的程序可以放在中斷處理程序,CRC算法,糾錯程序,編解碼程序,快速開方程序等關鍵程序里,另外長時間(幾天,幾個月)才運行一次的程序里也要放置來對付仿真器的單步跟蹤。最好每個程序里的處理都不一樣,不要寫成子程序。
#if (OSCID)%3==0 //這里利用校準值來擾動,也可利用編譯時的時間來擾動。
a++; //也可能是個函數
#endif
#if (OSCID)%3==1
a++;
b++;
#endif
#if (OSCID)%3==2
a++;
b++;
c++;
#endif
把類似這樣程序的條件編譯語句放入關鍵程序,使程序代碼浮動,避免解密者對比兩樣片的16進制代碼來尋找不同的位置。
每個芯片的變量地址在RAM或EEPROM中都是浮動的。
unsigned int IR_buff[100+(OSCID)%7]; //不同的芯片緩沖區長度不同
…… //其他變量定義在下面
由于編譯后,產生的代碼差異很大,這個措施可以對付反匯編代碼比對來尋找有差別的位置。
利用AVR的校準值與特殊器件內部的寄存器綁定。
這里用CC1101無線收發器來舉例
rfSettings.PKTCTRL1= 0x27^ (OSCID^0X55); //
halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1^(OSCID^0X55)); //寫到寄存器
……
#define CCxxx0_SRX 0x34-OSCID
halSpiStrobe(CCxxx0_SRX+OSCID); //進入接收狀態
3. 安全性評估:
如果破解者能讀出多個樣片的匯編程序。他無法通過比對16進制或匯編后的代碼來獲得這些樣片的差異。
他只有仔細閱讀匯編代碼來解除加密的代碼,對于一些特殊算法,他要搞清楚原理才能修改,否則可能埋下極大故障隱患。對于單步追蹤,由于長時間程序并沒觸發,因此不能保證都能追蹤得到,有些程序需要特定的條件才能激活,因此也不能保證一一追蹤得到,這樣要徹底破解,解密者只能在全部弄清楚設備的功能后,一一解除,一一燒錄,一一測試。這樣的工作量可能相當的大。
對于類似CC1101這樣的器件,寄存器既多又復雜,稍微錯一個地方就可能引起莫名其妙的故障。
4. 結語:
本文提出的MRC加密技術不是不能破解,而是破解的代價很大,即使破解后用于產品中隱患也很大,有可能加密程序里含有自毀程序,在一定時間后才能發作,到時可能導致無法想象的損失,因此用戶不要貪小便宜,應該購買具有自主知識產權的產品。
通過多重MRC加密,可以大大打擊盜版者和破解者的信心,達到為自主創新產品保駕護航的目的。
評論