针对ADuC7026单片机的加密方法
0赞对于应用单片机开发设计产品的技术人员来说,软件的保密是很重要的一个环节。每一个产品的面世都凝聚了开发设计者的汗水,所以为了避免产品被“山寨”,一些常用的加密方法必须要掌握。虽然目前不乏解密高手,但“锁门”总比不锁好,起码会给破解者造成一定困难,使一些人知难而退,本文介绍如何为ADI公司生产的ADuC7026单片机的加密方法。
一、最简单的加密方法:对于产量小售价昂贵的产品,最简单的方法之一就是用水砂纸把产品型号磨掉,因为很多芯片的封装都一样,所以要破解还需一定的功夫。
二、Flash/EE---软件上的加密:
用户代码基本都存储在Flash/EE中,ADuc7026的Flash/EE存储器可以由用户进行读/写保护。寄存器EEPRO/FEEHIDE的位31保护其62KB通过JTAG进行读取,在并行编程模式时也如此。寄存器的另外31位对Flash/EE空间进行写保护,每位保护四页,也就是2KB。写保护对各种访问方式均有效。
ADuc7026为用户提供三种级别的保护:
(1)通过对FEEHIDE寄存器写操作直接建立或者撤消保护,复位之后保护将不被保留。
(2)保护可以通过FEEPRO寄存器进行设定,它要在对保护命令(0×0C)进行保存或复位之后才能生效。FEEPRO寄存器通过设定密码来避免直接访问。一旦密码被设定,以后要对FEEPRO寄存器进行修改时就必须输入密码。采用整体擦除可将密码还原为0×FFFF,但是这也会擦除所有的用户代码。
(3)闪存可以通过对FEEPRO寄存器设定一组特殊的值:0xDEADDEAD来进行永久的保护。但是此时FEEPRO寄存器不允许重新输入密码对其进行修改。
写入密码的顺序是:
(1)将对应于保护页的FEEPRO寄存器中相应的位进行写入。
(2)通过设定FEEMOD的第六位(第五位必须为零)使密码生效。
(3)在FEEADR和FEEDAT中写入一个32位的密码。
(4)在FEECON中执行写入密码命令0X0C,然后通过监控FEESAT等待读取成功。
(5)器件复位。
要撤销或修改保护时,也需要类似的操作过程,但要修改FEEPRO值。如果密码的值设定为0xDEAD,那么存储保护将不能被撤销,除非对器件以非保护的方式全部擦除,但此时用户的代码也全部被擦除了。
关于密码的设定方式举例如下(对存储器的4-7页写入保护):
FEEPRO=0xFFFFFFFD; //选择4-7页保护
FEEMOD=0x48; //开启密码保护
FEEADR=0x1234; //输入16位密码
FEEDAT=0x5678; //输入16位密码
FEECON= 0x0C; //输入密码命令
如果要是对器件进行永久保护,只需按照上面的编程顺序,将FEEADR设定为0xDEAD,FEEDAT设定0xDEAD即可。
附:
FEEPRO和FEEHIDE主存寄存器的位描述
|
位 |
描述 |
|
31 0:30 |
读保护,用户置0则保护所有代码,置1则允许读取代码。 对0-3页,116-119页,120-123页进行写保护,用户置0则进行写保护,置1则允许对页进行写入。 |
