×
嵌入式 > 技术百科 > 详情

单片机的MRC多重加密技术

发布时间:2020-06-20 发布时间:
|
2008年,我的一个朋友因为他们的控制主板被盗抄了,损失相当巨大,他找到了我寻求加密措施,由于他们采用的是ATmega128单片机,尽管他们已经采取了加密,但还是被破解了,为此我搜索了网络上的大部分资料,都没有一个具体有效的方案。经过本人研究后,在这里介绍一种有效的MRC多重加密技术,已经用到了实际产品中,可以说这种加密技术是非常有效的。

 

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加密技术不是不能破解,而是破解的代价很大,即使破解后用于产品中隐患也很大,有可能加密程序里含有自毁程序,在一定时间后才能发作,到时可能导致无法想象的损失,因此用户不要贪小便宜,应该购买具有自主知识产权的产品。 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
分布式光纤温度传感器(DTS)系统的应用