如何读取STM32的唯一ID

如何读取STM32的唯一ID,第1张

1,如果板子上有外部存储器,可以先编写一个程序,利用算法把id计算得到一些值存入外部存储器,然后再烧写真正的程序,真正的程序去校验外部存储器的数据是否合法即可

2,利用板子上按键组合,或是上电按住某些键,程序在这个时候利用算法把id计算得到一些值存入程序区(stm8为EE区),程序运行时去验证程序区数据是否正确

3,轩微编程器有软件加密的功能,编程器会读芯片id,根据算法直接改写缓冲区,达到软件加密的作用

4,读出的id通过一定算法,例如异或加上一个数,得到的数据存入flash(只运行一次,运行后标志位也存入flash),下次读到这个标志位,就不运行这个程序。

四、做软件加密时注意
1,不要在程序中直接出现id地址,例如STM32:1FFFF7E8 1FFFF7EC 1FFFF7F0 STM8: 0x4865~0x4870
2, 利用校验和或是crc对程序区进行校验,防止改程序

每个型号的地址不一样的,但做软件加密时不要直接地址,不然很容易被破解
#define SOC_STM32F0_ID_ADDR 0x1FFFF7AC
#define SOC_STM32F1_ID_ADDR 0x1FFFF7E8
#define SOC_STM32F2_ID_ADDR 0x1FFF7A10
#define SOC_STM32F3_ID_ADDR 0x1FFFF7AC
#define SOC_STM32F4_ID_ADDR 0x1FFF7A10
#define SOC_STM32F7_ID_ADDR 0x1FF0F420
#define SOC_STM32L0_ID_ADDR 0x1FF80050
#define SOC_STM32L1_ID_ADDR 0x1FF80050
#define SOC_STM32L4_ID_ADDR 0x1FFF7590
#define SOC_STM32H7_ID_ADDR 0x1FF0F420
1,不要在程序中直接出现id地址,例如STM32:1FFFF7E8 1FFFF7EC 1FFFF7F0 STM8: 0x4865~0x4870
2, 利用校验和或是crc对程序区进行校验,防止改程序

简单看了下,你说的情况基本不可能。
1、ID是出厂烧死的,源头工厂就那么几个,空ID的很容易追查出是哪个厂,所以这个可能性不大。
2、防伪是通过“硬件ID”+“根据硬件ID算出来的防伪数据”组合实现的,你可以读取硬件ID,也可以读取防伪数据,但你不掌握加密算法的话不能根据硬件ID算出防伪数据,意味着你要1对1复制,掌握多少个正品的NFC就决定了你能造假多少个不重复的仿冒品。你还得想办法写入,一般是无法写入的。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13365963.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-22
下一篇 2023-07-22

发表评论

登录后才能评论

评论列表(0条)

保存