基于STM32F103的ID号对应用程序的保护方法

发布者:荒火最新更新时间:2017-02-06 来源: eefocus关键字:STM32F103  ID号  保护方法 手机看文章 扫描二维码
随时随地手机看文章

        由于现在市场激烈竞争、混乱的市场机制及已失去的市场道德,迫使在产品设计时,必需要考虑到对产品的保护,以防产品的技术被第三方所用。无论是从硬件方面来保护,还是从软件方面来保护,都无法保证产品100%的安全。由于嵌入式系统的特点就是软件、硬件相结合,才具有实际的意义,失去任何一个平台都是废品一堆,因此将系统的软件、硬件结合起来对产品进行加密保护,可靠性会大大地增加。STM32F103系列ARM处理器芯片就内置了唯一的96位ID号,同时也有以后备电池为电源的SRAM,还有入侵检测(打开机壳等)功能,以提供这方面的应用需求。

因此可以有几种产品保护的方法:

1、  将ID号写入内部Flash贮存器

如使用方法,基本思路为:程序首次运行,则检测ID号存贮区的Flash的数据,以判断是否需要将该系统的CPU的ID号更新到Flash中。当以后系统再重新启动时,就直接读取Flash中的ID号并与本机CPU的ID号进行比较。但有一点是,该存贮区的数据不能单一化存贮,最好是与系统校正、系统设置、系统参数等数据混合存放在一起,这时,系统离开这组数据,也就不会运行了。该数据在出厂时由工厂指定写入。这样一来,就算读出CPU中的程序代码,反编译后,也不清楚这组数据的目的,从而起到对应用代码的保护作用。

2、  将ID号写入SRAM,并配合电池电源及入侵检测

该方法可能相对复杂一些。基本思路为:程序首次运行后,设置好后备电源保护的RAM区,并读出CPU的ID号存贮起来,同时在应用程序中设置入侵检测功能。在系统正常运行的情况下,RAM中的ID号始终都能与本机的ID号一致,如有侵入,则可触发相应的中断,删除RAM中的ID号,但不要清除系统中运行状态,从而引导应用程序进入错误的运行状态,或触发系统内核删除代码进行“自杀”,以保证系统软件的安全。

        对于上述的两种方法中,如何判定系统为第一次启动,只能根据各自的思路来作为一个准则,非常规的方法,应该会相对好一些。而这种应用运态读入ID号的方法,不同的CPU有不同的校验,所以破解CPU的ID号也就失去了任何意义了。

应用的例子:智能液位控制器

        应用的是第一种方法:在Flash区域,我开了一个扇区,用来存贮我的标识符(厂家标识符)、系统参数、CPU-ID、系统是否是第一次运行、自定义数据的CRC代码。我的代码程序有两部份,一部份是应用程序,第二部份是除上述系统参数及CPU-ID以外的数据,而系统首次运行标识是一组特定字符。系统运行时,首先判断厂家标识符,接着判断系统是否是首次运行,如不是,更新CPU-ID,启始化系统运行参数,最后破坏掉系统首次运行标识数据,并将新的数据存贮起来。这之后系统再次运行,则在这一区域就多了很多数据(不看代码,我自己也不知道这些数据是些什么东西),每次启动,系统都会校验CPU-ID,从面每一个系统,在每一台设备上都有一个唯一的标识符。

可能的破解分析:

1、  如有人直接抄板后,读出CPU程序后,只写第一部份数据,不写入第二部份数据,则系统无法识别厂家标识符,则系统不运行。

2、  如有人直接抄板后,读出CPU全部程序数据,则第二部份数据对于新的系统无效,程序不会正常运行

3、  如有人想分析第二部份数据,也不会有任何结果。因为离开原来的系统,数据无任何意义。

4、  由于CPU-ID号是无法再重新更改的,CPU-ID无法进行复制而使其一致。

        以上的方法,仅是个人的一些思维方式而已,是否有效,还需要各位提出各自的意见,来整改修缮以达到较好的一种效果。对于如何更有效的对产品进行保护,相信不同的人、不同的应用,会有不同的处理方法。没有绝对的保护,只有更多的方法,以万变应万变了。

读取STM32F103的ID号的代码如下:

/*

    功能描述: 读取STM32F103 CPU序列号

    输入参数:无

    输出参数:返回STM32处理器96位长度的序列号

    联合嵌入式中心提供:http://www.uectr.com

*/

void Get_SerialNum(unsigned int* SerialID)

{

    SerialID[0] = *(unsigned int*)(0x1FFFF7E8);

    SerialID[1] = *(unsigned int*)(0x1FFFF7EC);

    SerialID[2] = *(unsigned int*)(0x1FFFF7F0);

}

//使用方法:

u32 Device_Serial[3];//用以存贮96位ID号

Get_SerialNum(Device_Serial);//读取ID号


关键字:STM32F103  ID号  保护方法 引用地址:基于STM32F103的ID号对应用程序的保护方法

上一篇:STM32 的加密实现
下一篇:stm32 驱动 触摸屏

推荐阅读最新更新时间:2024-03-16 15:32

STM32F103固件库编程(2)—位带操作
与51单片机对比 STM32F103的位带操作相当于51单片机的sbit。因为STM32F103每次操作都是4个字节(32位),所以我们要把一个位变成32位,其中膨胀后的最后一位就是原来的位。 这样之后,通过赋值0或1,就能控制最后一位(即原来的位)。 STM32F103的位带区 位带区和位带别名区地址转换 一个位膨胀成四个字节,这样便于STM32以4个字节的方式操作。 1.外设位带别名区地址 所在字节的地址为 A,位序号为 n(0 =n =7) AliasAddr= =0x42000000+ ((A-0x40000000)x8+n)*4 其中 (A-0x40000000)代表着地址偏移,(A-0x40000000
[单片机]
<font color='red'>STM32F103</font>固件库编程(2)—位带操作
STM32F103C8T6 Standby低功耗模式
1. 开发环境: winXP MDK4.45 STM32 3.5固件库 2. 低功耗模式简介 刚接触PWR的内容,使用手册说的不太能让我好理解。其实当你弄懂了以后再回去看使用手册还是能找到的,只是写的过于简略,对于初学者很多地方理解不到位。 这个小总结完全从初学者角度,目的只有一个:进入/唤醒 PWR的standby模式。其实更多的是如何配置进入,唤醒基本上是配置好了后自动完成或硬件出发的,我们需要做的退出后的设计。这块内容暂不作为本次讨论内容。 NVIC 和 PWR 各寄存器状态决定三种低功耗模式: 低功耗模式一览表 PS: STM32F的NRST是异步复位脚。 当NRST输入低电平的时候,MCU处于复
[单片机]
<font color='red'>STM32F103</font>C8T6 Standby低功耗模式
STM32F103RCT6 LED灯程序设计
设计说明: 依次实现以下显示模式: (1)全亮并闪烁4次。 (2)点亮一个发光管,右循环。 (3)点亮一个发光管,左循环。 (4)单数LED与双数LED交替点亮4次。 代码如下: #include stm32f10x.h GPIO_InitTypeDef GPIO_InitStructure; void Delay(unsigned count)//延时函数 { int i,j; for(i=0;i 50000;i++) { for(j=0;j count;j++); } } void LED_GPIO_Config(void) { RCC_APB2PeriphClockCm
[单片机]
STM32F103VBT6 使用16M晶振和8M晶振 RCC设置有何不同
原来使用8M的晶振,设置如下,通讯发送数据正常 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); 现在改成16M的晶振,设置改成下面,通讯发送数据不正常 RCC_PLLConfig(RCC_PLLSource_HSE_Div2, RCC_PLLMul_9); 经分析发现,除了上面的修改外,还要在stm32f10x_conf.h 中修改如下 #define HSE_Value ((u32)16000000) 系统正常!
[单片机]
stm32f103中断系统详解学习笔记
  一、NVIC 介绍   NVIC 英文全称是 Nested Vectored Interrupt Controller,中文意思就是嵌套向量中断控制器,它属于 M3 内核的一个外设,控制着芯片的中断相关功能。由于 ARM 给 NVIC 预留了非常多的功能,但对于使用 M3 内核设计芯片的公司可能就不需要这么多功能,于是就需要在 NVIC 上裁剪。 - STM32中断系统专题讲解 - ST 公司的 STM32F103 芯片内部中断数量就是 NVIC 裁剪后的结果。上面说到 NVIC 控制着芯片的中断相关功能,那么肯定有很多对应的寄存器,在固件库 core_cm3.h 文件内定义了一个 NVIC 结构体,里面定义了相关寄存器,
[单片机]
STM32f103的电阻触摸屏的五点校正算法
由于电阻式触摸屏就是一种传感器,它利用压力感应进行控制,将矩形区域中触摸点(X,Y)的物理位置转换为代表X坐标和Y坐标的电压。这里先引入两个概念,物理坐标和逻辑坐标。物理坐标指触摸屏上点的实际位置,通常以液晶上点的个数来度量。逻辑坐标指这点被触摸时A/D转换后的坐标值。如图1,我们假定液晶最左下角为坐标轴原点A,在液晶上任取一点B(十字线交叉中心),B在X方向距离A10个点,在Y方向距离A20个点,则这点的物理坐标为(10,20)。如果我们触摸这一点时得到的X向A/D转换值为100,Y向A/D转换值为200,则这点的逻辑坐标为(100,200)。 常用的电阻式触摸屏矫正方法有两点校准法和三点校准法。本文这里介绍的是结合了不同的
[单片机]
<font color='red'>STM32f103</font>的电阻触摸屏的五点校正算法
stc单片机读片外扩展RAM,内部R/C时钟及IDC语言程序
#include reg51.h #include intrins.h sfr IAP_CONTR = 0xC7; sbit MCU_Start_LED = P1^7; //unsigned char self_command_array = {0x22,0x33,0x44,0x55}; #define Self_Define_ISP_Download_Command 0x22 //#define RELOAD_COUNT 0xfb //18.432MHz,12T,SMOD=0,9600bps #define RELOAD_COUNT 0xfd //11.0592MHz,12T,SMOD=0,9600bps voi
[单片机]
单片机应用系统断电时的数据保护方法
在测量、控制等领域的应用中,常要求单片机内部和外部RAM中的数据在电源掉电时不丢失,重新加电时,RAM中的数据能够保存完好,这就要求对单片机系统加接掉电保护电路。掉电保护通常可采用以下三种方法:一是加接不间断电源,让整个系统在掉电时继续工作,二是采用备份电源,掉电后保护系统中全部或部分数据存储单元的内容;三是采用EEPROM来保存数据。由于第一种方法体积大、成本高,对单片机系统来说,不宜采用。第二种方法是根据实际需要,掉电时保存一些必要的数据,使系统在电源恢复后,能够继续执行程序,因而经济实用,故大量采用 。EEPROM既具有ROM掉电不丢失数据的特点,又有RAM随机读写的特点。但由于其读写速度与读写次数的限制,使得EEPROM不能
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved