新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機的MRC多重加密技術

        單片機的MRC多重加密技術

        作者: 時間:2016-11-24 來源:網絡 收藏
        2008年,我的一個朋友因為他們的控制主板被盜抄了,損失相當巨大,他找到了我尋求加密措施,由于他們采用的是ATmega128單片機,盡管他們已經采取了加密,但還是被破解了,為此我搜索了網絡上的大部分資料,都沒有一個具體有效的方案。經過本人研究后,在這里介紹一種有效的MRC多重加密技術,已經用到了實際產品中,可以說這種加密技術是非常有效的。

        本文引用地址:http://www.104case.com/article/201611/320750.htm

        1. 單片機程序的破解過程:

        目前對于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加密,可以大大打擊盜版者和破解者的信心,達到為自主創新產品保駕護航的目的。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 萝北县| 乐陵市| 杭锦后旗| 托克逊县| 和田市| 华容县| 嵩明县| 崇明县| 太康县| 百色市| 镇坪县| 观塘区| 临安市| 永新县| 巢湖市| 英德市| 万年县| 五大连池市| 阳朔县| 潜山县| 沧州市| 报价| 宿州市| 德令哈市| 固始县| 五寨县| 麻栗坡县| 唐河县| 扎赉特旗| 江孜县| 赣州市| 宝鸡市| 普陀区| 天门市| 千阳县| 阳城县| 新巴尔虎右旗| 肥乡县| 乌审旗| 友谊县| 乌兰浩特市|