微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机加密问题

单片机加密问题

时间:10-02 整理:3721RD 点击:
单片机加密问题

STC15F2K60S2,研究一下加密的方法。

STC15F2K60S2单片机程序,是无法通过仿真器将其二进制源码读出的(非侵入式);但是,侵入式破解单片机还是可行的。因此,通过程序自身的加密还是必须的,能够大大增大破解的难度(即使成功获取bin源码,也无法有效使用)。

以下方法均基于MCU的ID,参考STC官网的方法。

方法1:使用两个程序,先下载和运行第一个程序(下一次不擦出EEPROM),通过对ID号进行数学校验(使用自己的加密算法),生成相应的秘钥并写入到EEPROM。第二次下载正式的程序(下一次擦出EEPROM),对比计算出来的秘钥与EEPROM中保存的秘钥是否相等,否则显示异常。

方法2:使用STC的ISP提供的功能,使用STC-ISP的ID加密功能

ID号加密是根据用户所设定的算法对ID号的7个字节进行分别运算,每种加密算法最多可以进行4次不同的运算,运算符不分优先级,从前到后依次进行4次运算,对于同一个加密算法,ID号的7个字节是分别使用此算法进行运算,运算完成后会得到加密后的7个字节,在下载用户代码时,加密后的7个字节会自动写入到用户所指定的FLASH中

例如:

  当前芯片内部的ID号为 : 01H 02H 03H 04H 05H 06H 07H

  选择的加密算法为 :   <<1, +2, *3, ^4

  设定的存储地址为 : 0x1000

  经加密运算后的ID号为

      08H 16H 1CH 1AH 20H 2EH 34H

  下载程序过程中,加密的ID号会被写入到 FLASH的0x1000~0x1006地址中

  08H写入到0x1000

  16H写入到0x1001

  1CH写入到0x1002

  1AH写入到0x1003

  20H写入到0x1004

  2EH写入到0x1005

  34H写入到0x1006

以上两种方法都是基于单片机的“全球唯一ID”,解密者即使获得了二进制源码,也无法使用程序(程序与ID号绑定了)。这种方法也不是无懈可击,只要使解密成本大于开发成本,即可让解密者无利可图。另外可以在程序中留下相应的LOGO或者标志,如果遇到二进制源码被窃取,可以以此作为法律证据。

变频伺服驱动及PLC&HMI产品生产企业技术方案提供商

深圳市伊瑞软件技术有限公司   

Shenzhen Erik Software Technology Co., Ltd



我仅限和你讨论一下,你说的那个是放加密芯片的方法么?你的意思是可以通过绕过加密芯片进行下载文件,然后反汇编。为了防止这个,你给这个程序加个壳,算法只有你自己知道,但是壳会影响芯片的存储空间,还有自己程序的运算速度啊,而且为了让程序能被执行,肯定要有解密算法,而这个算法通常都是放在壳的最前端,一般是先运行解密程序,然后将解密程序解开的代码送入内存,最终逐项运行,如果能将整个程序都能扣出来,剥这个壳也不是太难的事情了。毕竟自己想一个壳的算法要很多功底,用现成的就会有现成的剥壳方法,这个根据壳的特征就可看出是个什么壳。

魔高一尺,道高一丈啊!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top