第二部分 基础篇 - 第15章 程序加密
程序员文章站
2024-02-22 21:26:34
...
15.1程序加密工作原理
STM32通过读取芯片唯一ID号来实现程序的保护,防止被抄袭。96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。按照用户不同的用法,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。在这里要提醒读者,要注意大端小端模式。
15.2程序加密具体代码分析
其实读取ID很简单,如果存储ID的变量为8位。则需要读取12次,如下所示。
u8 Sys_ID[12],i;
for(i=0;i<12;i++)
{
Sys_ID[i]=*(u8*)(0x1FFFF7E8+i);
printf(" %0.2X",Sys_ID[i]);
}
如果存储ID的变量为32位。则需要读取3次。
u32 Sys_ID[3];
Sys_ID[2] = *(__IO u32*)(0X1FFFF7E8); // 低字节
Sys_ID[1] = *(__IO u32 *)(0X1FFFF7EC); //
Sys_ID[0] = *(__IO u32 *)(0X1FFFF7F0); // 高字节
STM32单片机的存储方式为小端模式。
【注】大小端
地址从小到大,先放低字节,再放高字节:小端模式
地址从小到大,先放高字节,再放低字节:大端模式
15.3实验现象
将程序编译完成后下载到板子中,可以看到打印出来来的唯一ID,该程序是通过现读取ID在通过ID判断,才会打印出ID后面的“通过”字样。
【注】关于STM32 ID 的读取还可以使用STlink读取,请有兴趣的朋友自行查找吧。
本章参考代码
【注】由于ID是唯一的,不折碰有要想在自己的板子上运行成功,要注意更改ID额。
推荐阅读
-
第二部分 基础篇 -第1章 GPIO
-
第二部分 基础篇 - 第15章 程序加密
-
《嵌入式-STM32开发指南》第二部分 基础篇 - 第4章 定时器(HAL库)
-
第二部分 基础篇 - 第2章 Systick系统定时器
-
第二部分 基础篇-第4章 定时器 - CC2530查询方式使用定时器T1
-
第二部分 基础篇-第4章 定时器-CC2530查询方式使用定时器T3
-
《嵌入式-STM32开发指南》第二部分 基础篇 - 第2章 Systick系统定时器(HAL)
-
第二部分 基础篇 - 第10章 低功耗
-
第二部分 基础篇-第8章 CC2530系统睡眠唤醒--定时器唤醒
-
第二部分 基础篇-第11章 CC2530随机数发生器