STM32通过读取芯片唯一ID号来实现程序的保护,防止被抄袭( 二 )


STM32通过读取芯片唯一ID号来实现程序的保护,防止被抄袭

文章插图
芯片唯一ID码:32 FF DA 05 43 41 38 36 30 71 02 43 96位
复制代码
方法二:通过得到ID码 。
1、打开STM32 ST-LINK,确保与硬件连接正常 。
2、在中输入“”芯片ID码的首地址 。输入完成后,自动读取ID码 。
STM32通过读取芯片唯一ID号来实现程序的保护,防止被抄袭

文章插图
3、确定后,自动读取ID码
STM32通过读取芯片唯一ID号来实现程序的保护,防止被抄袭

文章插图
但是,用读出来的只有64位,少了32位,这个“”地址中读取失败,我也不知道是什么原因,可能是厂家不允许下载器访问 。
地址
ID数据
05 DA FF 32
36 38 41 43
空(不允许读)
我们把上面ID码整理一下:32 FF DA 05 43 41 38 36,由于在内存中是小端存储方式 。所以是这样的 。
通过两种方法,把我们想要的ID码得到后 。就可以进行最关键的一步,修改HEX文件 。
二.修改HEX文件加密
1、打开STM32 ST-LINK,打开HEX文件 。
STM32通过读取芯片唯一ID号来实现程序的保护,防止被抄袭

文章插图
[12] = {0xee,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11};//预置ID号,在HEX文中修改 。
复制代码
现在就打HEX文件打开后 。找到上面定义的数组,这个是关键所在,我花了一个下午时间,才搞清楚 。
[size=9.]2、找到自定义ID在地址的位置后,开始修改 。
STM32通过读取芯片唯一ID号来实现程序的保护,防止被抄袭

文章插图
3、把数组“aa[12]” 里面的内容改成与芯片的实际ID码一致 。如果程序被读出来,在另外一片相同的芯片上面也运行不起来 。因为设置的ID与芯片实际ID不一致 。
STM32通过读取芯片唯一ID号来实现程序的保护,防止被抄袭

文章插图
4、现在如果下载,会提示你文件被修改,需要保存 。我们保存成HEX文件到桌面 。
STM32通过读取芯片唯一ID号来实现程序的保护,防止被抄袭

文章插图
5、重新打开刚才保存的HEX文件 。现在可以看到,修改的ID已经在HEX文件里面了 。
STM32通过读取芯片唯一ID号来实现程序的保护,防止被抄袭

文章插图
6、下载程序到单片机 。
STM32通过读取芯片唯一ID号来实现程序的保护,防止被抄袭

文章插图
7、完成下载 。到这儿就基本完成了 。
8、看到这儿,有的人会问,为什么不在编译时直接放在数组里,还要在HEX文件中修改,这样做的目的是方便批量生产 。
STM32通过读取芯片唯一ID号来实现程序的保护,防止被抄袭

文章插图
在程序中,我做了一个简单的判断 。如下();//先读出芯片实际IDfor(i=0;i{if(temp == aa) //判断设置的ID与实际ID是不是一致 。如果一致 。LED灯不亮{;}else{(GPIOF, );}}
【STM32通过读取芯片唯一ID号来实现程序的保护,防止被抄袭】复制代码