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加密技术不是不能破解,而是破解的代价很大,即使破解后用于产品中隐患也很大,有可能加密程序里含有自毁程序,在一定时间后才能发作,到时可能导致无法想象的损失,因此用户不要贪小便宜,应该购买具有自主知识产权的产品。
通过多重MRC加密,可以大大打击盗版者和破解者的信心,达到为自主创新产品保驾护航的目的。