欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第二部分 基础篇 - 第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后面的“通过”字样。

第二部分 基础篇 - 第15章 程序加密

图15-1

【注】关于STM32 ID 的读取还可以使用STlink读取,请有兴趣的朋友自行查找吧。

本章参考代码

IAR版本完整代码
KEIL版本完整代码

【注】由于ID是唯一的,不折碰有要想在自己的板子上运行成功,要注意更改ID额。

相关标签: STM32 ID