<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)的MRC多重加密技術(shù)

          單片機(jī)的MRC多重加密技術(shù)

          作者: 時(shí)間:2016-11-24 來(lái)源:網(wǎng)絡(luò) 收藏
          2008年,我的一個(gè)朋友因?yàn)樗麄兊目刂浦靼灞槐I抄了,損失相當(dāng)巨大,他找到了我尋求加密措施,由于他們采用的是ATmega128單片機(jī),盡管他們已經(jīng)采取了加密,但還是被破解了,為此我搜索了網(wǎng)絡(luò)上的大部分資料,都沒(méi)有一個(gè)具體有效的方案。經(jīng)過(guò)本人研究后,在這里介紹一種有效的MRC多重加密技術(shù),已經(jīng)用到了實(shí)際產(chǎn)品中,可以說(shuō)這種加密技術(shù)是非常有效的。

          本文引用地址:http://www.ex-cimer.com/article/201611/320750.htm

          1. 單片機(jī)程序的破解過(guò)程:

          目前對(duì)于AVR單片機(jī)來(lái)講,本身有加密熔絲位,一旦熔絲被燒寫(xiě)程序就不能讀出了。但這種加密技術(shù)可以通過(guò)芯片揭蓋侵入式破解,大多數(shù)破解公司都掌握了這種技術(shù),破解費(fèi)僅1000元左右。

          對(duì)于這種情況已經(jīng)不可避免,如果源碼沒(méi)有其他加密措施的話,把反匯編出來(lái)的程序編譯一下,換到原電路板上即可運(yùn)行了。

          那么如何對(duì)源碼做加密處理呢?

          事實(shí)上,不管你怎么處理,都可以分析源碼,找出你的關(guān)鍵所在,并修改匯編出來(lái)的程序來(lái)破解。

          而我們要做的是,將加密部分盡可能隱藏,擾亂,使得破解者只能逐一分析來(lái)破解,這樣他不但要全部了解產(chǎn)品的工作特點(diǎn),功能,還要了解內(nèi)部全部的硬件設(shè)計(jì),以及芯片的工作原理。對(duì)于一些特殊算法他可能永遠(yuǎn)也搞不明白,這樣使得破解的成本遠(yuǎn)遠(yuǎn)大于重新設(shè)計(jì)的成本。

          凡是從事盜版生產(chǎn)的單位基本沒(méi)有開(kāi)發(fā)能力,而破解者只是一些二三流工程師,真正的一流工程師對(duì)破解都不屑一顧。

          2. MRC加密技術(shù):

          為啥叫MRC機(jī)密技術(shù),因?yàn)檫@是香港MRC公司采用的實(shí)用加密技術(shù),這種技術(shù)不需要增加硬件成本,主要通過(guò)以下幾個(gè)技術(shù)實(shí)現(xiàn):

          • 利用AVR的校準(zhǔn)值,做身份認(rèn)證,100片里面最多10片的校準(zhǔn)值相同。
            1)在頭文件里定義:

          #define OSCID 0XAF //校準(zhǔn)數(shù)值,必須設(shè)置成與MCU一致

          2)在特殊程序(中斷程序,特殊算法)里

          unsigned char *p;

          p=(unsigned char *)0x68; //賦值,芯片為mega88,OSCID寄存器=0X66,不直接寫(xiě)0X66,知道為什么嗎?

          …... //賦值和恢復(fù)語(yǔ)句,中間有很多其他語(yǔ)句

          p--;p--; //恢復(fù),

          if ((*p-8)==OSCID-8) //判斷,為啥這里也不直接寫(xiě)為OSCID?

          {

          //放置正確的處理程序

          }

          else

          {

          //故意寫(xiě)錯(cuò)計(jì)算的程序

          }

          類(lèi)似上述這樣的程序可以放在中斷處理程序,CRC算法,糾錯(cuò)程序,編解碼程序,快速開(kāi)方程序等關(guān)鍵程序里,另外長(zhǎng)時(shí)間(幾天,幾個(gè)月)才運(yùn)行一次的程序里也要放置來(lái)對(duì)付仿真器的單步跟蹤。最好每個(gè)程序里的處理都不一樣,不要寫(xiě)成子程序。

          • 利用隨機(jī)數(shù)產(chǎn)生代碼長(zhǎng)度浮動(dòng)。

          #if (OSCID)%3==0 //這里利用校準(zhǔn)值來(lái)擾動(dòng),也可利用編譯時(shí)的時(shí)間來(lái)擾動(dòng)。

          a++; //也可能是個(gè)函數(shù)

          #endif

          #if (OSCID)%3==1

          a++;

          b++;

          #endif

          #if (OSCID)%3==2

          a++;

          b++;

          c++;

          #endif

          把類(lèi)似這樣程序的條件編譯語(yǔ)句放入關(guān)鍵程序,使程序代碼浮動(dòng),避免解密者對(duì)比兩樣片的16進(jìn)制代碼來(lái)尋找不同的位置。

          • 利用隨機(jī)數(shù)使靜態(tài)變量浮動(dòng)。

          每個(gè)芯片的變量地址在RAM或EEPROM中都是浮動(dòng)的。

          unsigned int IR_buff[100+(OSCID)%7]; //不同的芯片緩沖區(qū)長(zhǎng)度不同

          …… //其他變量定義在下面

          由于編譯后,產(chǎn)生的代碼差異很大,這個(gè)措施可以對(duì)付反匯編代碼比對(duì)來(lái)尋找有差別的位置。

          利用AVR的校準(zhǔn)值與特殊器件內(nèi)部的寄存器綁定。

          這里用CC1101無(wú)線收發(fā)器來(lái)舉例

          rfSettings.PKTCTRL1= 0x27^ (OSCID^0X55); //

          halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1^(OSCID^0X55)); //寫(xiě)到寄存器

          ……


          #define CCxxx0_SRX 0x34-OSCID

          halSpiStrobe(CCxxx0_SRX+OSCID); //進(jìn)入接收狀態(tài)

          3. 安全性評(píng)估:

          如果破解者能讀出多個(gè)樣片的匯編程序。他無(wú)法通過(guò)比對(duì)16進(jìn)制或匯編后的代碼來(lái)獲得這些樣片的差異。

          他只有仔細(xì)閱讀匯編代碼來(lái)解除加密的代碼,對(duì)于一些特殊算法,他要搞清楚原理才能修改,否則可能埋下極大故障隱患。對(duì)于單步追蹤,由于長(zhǎng)時(shí)間程序并沒(méi)觸發(fā),因此不能保證都能追蹤得到,有些程序需要特定的條件才能激活,因此也不能保證一一追蹤得到,這樣要徹底破解,解密者只能在全部弄清楚設(shè)備的功能后,一一解除,一一燒錄,一一測(cè)試。這樣的工作量可能相當(dāng)?shù)拇蟆?br /> 對(duì)于類(lèi)似CC1101這樣的器件,寄存器既多又復(fù)雜,稍微錯(cuò)一個(gè)地方就可能引起莫名其妙的故障。

          4. 結(jié)語(yǔ):

          本文提出的MRC加密技術(shù)不是不能破解,而是破解的代價(jià)很大,即使破解后用于產(chǎn)品中隱患也很大,有可能加密程序里含有自毀程序,在一定時(shí)間后才能發(fā)作,到時(shí)可能導(dǎo)致無(wú)法想象的損失,因此用戶(hù)不要貪小便宜,應(yīng)該購(gòu)買(mǎi)具有自主知識(shí)產(chǎn)權(quán)的產(chǎn)品。
          通過(guò)多重MRC加密,可以大大打擊盜版者和破解者的信心,達(dá)到為自主創(chuàng)新產(chǎn)品保駕護(hù)航的目的。



          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();