STM32--程序加密

原创 2016年08月29日 16:08:07

       所有STM32的芯片都提供对Flash的保护,防止对Flash的非法访问 - 写保护和读保护。读保护即大家通常说的“加密”,是作用于整个Flash存储区域。一旦设置了Flash的读保护,内置的Flash存储区只能通过程序的正常执行才能读出,而不能通过这两种方式中的任何一种方式读出:通过调试器(JTAG或SWD)和从RAM中启动并执行的程序。我们这里程序加密的目的是防止板子中的程序被其他人读出使用,这里有两种方法可供使用:

       1.禁止读出Flash存储器内容;
       2.STM32用ID加密程序;

这里我们分别对这两种方法进行介绍。

        一.禁止读出Flash存储器内容

       这种方法主要是防止程序被读出,正如文章开头所说,一旦设置了Flash的读保护,内置的Flash存储区只能通过程序的正常执行才能读出,而不能通过这两种方式中的任何一种方式读出:通过调试器(JTAG或SWD)和从RAM中启动并执行的程序。这是也无法对flash进行烧写程序了,所以使用时需要谨慎。下面简单介绍下使用方法。

       1.在程序中包含#include "stm32f10x_flash.h"头文件 并在这条语句前面加入 这一行话:#define _FLASH_PROG;   //flash读写保护时需要加入的

       2.实现flash的读保护:

           /* 设置Flash读保护 */
           if (FLASH_GetReadOutProtectionStatus()!=SET)
           {
                /* 会擦除Flash */
                FLASH_Unlock(); //写保护时可以不用这句话,可用可不用
                FLASH_ReadOutProtection(ENABLE);
            }

       3.清除flash的读保护:

           /* 清除Flash读保护 */
            if (FLASH_GetReadOutProtectionStatus()==SET)
            {
                /* 会擦除Flash */
                FLASH_Unlock();
                FLASH_ReadOutProtection(DISABLE);
                flash_unlock_timeout=1500;
            }

       主要就是以上三步,具体如何在程序中使用,看自己的需求。

       二.STM32用ID加密程序

        每个STM32芯片都有一个全球唯一的ID,这个唯一码可以利用作软件加密,ID号是12个字节大小共96位,ID号的起始地址是0x0x1FFFF7E8。利用这个ID码程序在运行时比较ID码是否正确来判断是否往下执行程序。下面简单介绍下使用方法。

        1.读取目标板子的ID号,并修改程序将ID号保存在程序中:

              U8 sys_id[12]={0};  //存储stm32芯片的ID号的数组

               for(i=0;i<12;i++)
               {
                  sys_id[i]=*(u8*)(0x1FFFF7E8+i);  //读取STM32芯片的唯一ID
              }

        2.将修改后的程序再下载到目标板子上这时就可以使用上面读出ID来对比当前板子上ID是否一致来确定程序是否执行。

       这个方法就算程序被其他人读取也无法在其他板子上运行,因为ID不一致。麻烦的地方是每块板子的程序的ID不一样造成程序维护麻烦。

       实际怎么使用还是要看当时情况,也可能用不上这两种方法。

参考文章:

        http://www.openedv.com/posts/list/9353.htm

        http://www.cnblogs.com/hujianhua/archive/2012/07/03/2574917.html

        http://bbs.elecfans.com/jishu_388272_1_1.html

关于STm32加密【转】

摘要: 知识产权的保护,如何让自已辛勤的劳动成果不被别人抄袭,采用有效的手段对IC加密是值得每一个设计者关注的问题。 当然,有人说,没有解不了密的IC,的确,解密是一项技术,只要有人类在不断的...
  • sinat_36568888
  • sinat_36568888
  • 2016年10月31日 17:15
  • 894

对运行于STM32的嵌入式代码程序进行加密

目的:对运行于STM32的嵌入式代码程序进行加密 编译环境:IAR Embedded System for ARM5.5 一.STM32Flash组织 STM32的Flash包括主存储器(H...
  • niepangu
  • niepangu
  • 2015年06月03日 18:00
  • 2564

移植mbed到stm32L053R8 nucleo

最近一直想做mbed到stm32的移植,在网上找到一位大神的移植过程,就转载过来参考一下,链接在上面,先学习,然后自己再做一遍移植,会把自己的移植的具体细节和过程中遇到的问题分享给大家。这位大婶是做的...
  • chendi1992
  • chendi1992
  • 2015年01月06日 17:24
  • 3216

mbedTLS移植到stm32上以支持mqtt证书加密

花了两星期的时间完成移植和调bug,下面就说一下几个关键的地方 1.mbedtls_ssl_conf_authmode( &conf, MBEDTLS_SSL_VERIFY_REQUIRED );第...
  • q120742915
  • q120742915
  • 2018年01月15日 15:45
  • 164

mbedtls移植到k20简要笔记

mbedtls移植到k20简要笔记
  • ppdyhappy
  • ppdyhappy
  • 2017年03月20日 17:07
  • 3257

Mbed在自己的stm32系列平台移植适配(二)

Mbed在自己的stm32系列平台移植适配适配平台: cpu:STM32F103RCT6 外设: peripheral pin disciption LED1 PC_0 ...
  • qiuzhiqian1990
  • qiuzhiqian1990
  • 2017年02月15日 15:06
  • 3226

mbedtls安装与入门

本文讲介绍如何在Ubuntu/Debian/Raspbian主机上正确安装mbedtls
  • xukai871105
  • xukai871105
  • 2017年05月28日 22:22
  • 7214

基于stm32f030单片机的AES128bit加解密算法例程

  • 2015年12月02日 21:41
  • 1.59MB
  • 下载

STM32软件加密

摘要: 知识产权的保护,如何让自已辛勤的劳动成果不被别人抄袭,采用有效的手段对IC加密是值得每一个设计者关注的问题。 当然,有人说,没有解不了密的IC,的确,解密是一项技术,只要有人类在不...
  • Still8912
  • Still8912
  • 2015年09月02日 16:07
  • 626

利用STM32F唯一96bit序列号实现反拷贝加密的源代码公开

//--------------------------------------------------------------------------- #include #pragma arg...
  • rrxxzz
  • rrxxzz
  • 2014年08月21日 23:44
  • 2022
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STM32--程序加密
举报原因:
原因补充:

(最多只允许输入30个字)