TI-DSP程序加密收集分享

2019-07-15 00:27发布

目前,最常用的TI DSP有C2000、C5000和C6000三大系列。
C2000是TI的入门级DSP,主要用在工业控制领域,如电机控制(变频调速)、数字电源等,以及计算机外设,如打印机、扫描仪等;
C5000是TI高性价比、低功耗DSP,应用范围广,特别在通信领域,如路由器、交换机、嵌入式WEB服务器等;
C6000是TI高性能DSP,主要用在各种高档数字信号处理领域,如数字图像处理(编码压缩)、频谱分析(FFT)、数字滤波器(FIR)等。
1、C2000DSP的F24xxA和F28xx系列使用片内Flash作为程序存储器,自带加密机制,128位密钥,要实现程序加密就很简单了,有两种加密方法:
(1) "显式“密钥法,使用TI提供的Flash在线编程工具(On-chip Flash Programmer)时,在“Code Security Password”区域设置好128位密钥,然后点击“Program Password”确定密钥设置。在设置密钥的时候,注意不要将Key0-Key8全设置为0,如果全为0,则芯片将会永久“Lock”!
这种方式在产品批量生产时除设计者知道密钥外,生产时的编程写入人员也知道。
(2) ”隐式“密钥法,设计者将128位密钥用汇编代码方式嵌入源程序中,并在连接配置文件(命令文件)*.CMD中将其定位到DSP密钥存储区,最后编译生成.out文件一起写入Flash中。这种方式就只有设计者本人知道密钥了。
2、C5000和C6000均使用外部Flash,程序无法加密。这时可以采用内置大容量Flash、可加密的单片机(如性价比高的STC51系列单片机)来完成加密工作,具体做法是:
将DSP程序写入单片机的片内Flash中,单片机通过模拟SPI口将程序加载到DSP片内RAM中运行。这种方法程序被解密复制的可能性有2种:一是单片机被解密,唯一防解密的途径是采用最新型号(或版本)的单片机,增加破解难度和时间;二是用逻辑分析仪监视SPI总线上的加载数据流,但这种破解方法难度较大,一般人不易掌握,特别是DSP的C语言源程序编译后都比较大。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
zhangmangui
2019-07-15 17:08
本帖最后由 zhangmangui 于 2014-11-30 21:09 编辑

TI C2000 DSP程序加密2种方法(显性和隐性)显性和隐性 不可同时使用1.显性法



选中Tools-F28xx On-chip Flash Programmer进入Flash编程界面(如下图所示),如上图所示,或者点击此图标。
Flash编程界面


在“Code Security Password”区域设置好程序密码,然后按“Program Password”确定密码设置。在设置密码的时候,注意不要将Key0-Key8全设置为0,如果全为0,则芯片将会永久“Lock”!如果采用这种显性方法设置密码,在生产产品的时候,你需要将密码告诉生产线上的Flash烧写人员,以至除了公司核心的人员外,还会有更多的人知道你的程序密码,给保密性带来不利!
2.隐性法
为了避免上述情况的发生,让更少的人知道程序的密码,甚至只让一个人知道程序的密码,可以将密码嵌入到程序中,与其他程序一起编译好后,生成.out文件,这个时候,你只需要将.out文件给FLASH烧写人员就可以,不需要再让FLASH烧写人员自己设置密码,我们把这种方法叫做隐性法,在使用串口烧写FLASH的时候,也需要采用这种方法进行程序加密。
将下面的程序保存为.asm文件,添加到工程中,与其他文件一起编译。

.sect "csmpasswds"
.int 0xFFFF ;PWL0 (LSW of 128-bit password)
.int 0xFFFF ;PWL1
.int 0xFFFF ;PWL2
.int 0xFFFF ;PWL3
.int 0xFFFF ;PWL4
.int 0xFFFF ;PWL5
.int 0xFFFF ;PWL6
.int 0xFFFF ;PWL7 (MSW of 128-bit password

.sect "csm_rsvd"
.loop (3F7FF5h - 3F7F80h + 1)
.int 0x0000
.endloop

将下面的语句写入CMD中,

MEMORY
{

CSM_RSVD : origin = 0x3F7F80, length = 0x000076

CSM_PWL : origin = 0x3F7FF8, length = 0x000008

}
SECTIONS
{

csmpasswds : > CSM_PWL PAGE = 0

csm_rsvd : > CSM_RSVD PAGE = 0

}
按照上面的方法编译好后,你的程序已经加密好了,你只需要将生成的.out交给Flash烧写人员就可以了!

一周热门 更多>