yanniwang

针对ADuC7026单片机的加密方法

0
阅读(3848)

对于应用单片机开发设计产品的技术人员来说,软件的保密是很重要的一个环节。每一个产品的面世都凝聚了开发设计者的汗水,所以为了避免产品被“山寨”,一些常用的加密方法必须要掌握。虽然目前不乏解密高手,但“锁门”总比不锁好,起码会给破解者造成一定困难,使一些人知难而退,本文介绍如何为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则允许对页进行写入。