【单片机】唯一设备ID UID固件加密
admin
2024-01-18 04:36:46

简单就是说相当于芯片的身份证,可以区分每一个芯片

唯一设备标识符最适合:
● 用作序列号(例如 USB 字符串序列号或其它终端应用程序)
● 在对内部 Flash 进行编程前将唯一 ID 与软件加密原语和协议结合使用时用作安全密钥以
提高 Flash 中代码的安全性
● 激活安全自举过程等
96 位的唯一设备标识符提供了一个对于任何设备和任何上下文都唯一的参考号码。用户永远
不能改变这些位。
96 位的唯一设备标识符也可以以单字节/ 半字 / 字等不同方式读取,然后使用自定义算法连接
起来。

芯片固件加密破解:

基本上任何固件加密都是可以被破解的,当然使用uid只是会增大破解的难度,如果当我们使破解的难度几乎等同于重新写代码的难度的时候,这个时候就算是加密的成功了。

代码思路:

第一次进入芯片,将芯片身份证固件uid读到静态区flash中

第二次进入芯片,就会将读取芯片uid,如果当前固件被读出到其他芯片中,会判断之前的uid

之前不一样,就会报错

#define uid1            (0x1FFF7A10)
#define uid2            (0x1FFF7A14)
#define uid3            (0x1FFF7A18)static const int id1 = 0xffffffff;
static const int id2 = 0xffffffff;
static const int id3 = 0xffffffff;
static const int id4 = 0xffffffff;
static const int id5 = 0xffffffff;
static const int id6 = 0xffffffff;/* 第一次进入,初始化uid */
if ((0xffffffff == id1) && (0xffffffff == id2) && (0xffffffff == id3) &&(0xffffffff == id4) && (0xffffffff == id5) && (0xffffffff == id6))
{id1 = *(uint32_t*)(0x1FFFF7E8);id2 = *(uint32_t*)(0x1FFFF7E8 + 4);id3 = *(uint32_t*)(0x1FFFF7E8 + 8);id4 = 0x11111111;id5 = 0x22222222;id6 = 0x33333333;return success;
}
/* 判断是否是该芯片 */
else if((*(uint32_t*)(0x1FFFF7E8) == id1) && (*(uint32_t*)(0x1FFFF7E8 + 4) == id2) && (*(uint32_t*)(0x1FFFF7E8 + 8) == id3) &&(0x11111111 == id4) && (id5 == 0x22222222) && (0x33333333 == id6))
{return success;
}
else
{return error;
}

相关内容

热门资讯

山水皆有情!丽江两山一江的千年... 去过丽江、走过虎跳峡的人,大概率都听过哈巴雪山和金沙江的传说。很多人站在峡谷之下,望着奔腾不息的金沙...
活力中国调研行丨“殷”你而来 ... 9月12日,游客在殷墟博物馆“甲骨文展厅”内参观。位于河南省安阳市的殷墟博物馆新馆是首个全景式展现商...
浦江之夜赴美好相逢,第37届上... 9月12日晚,黄浦江畔灯火璀璨,第37届上海旅游节大巡游在外滩中山东一路上演。不少观众早早便来到外滩...
美丽中国丨秋韵紫鹊界 梯田入画... 这是9月11日拍摄的紫鹊界梯田(无人机照片)。 金秋九月,湖南省娄底市新化县紫鹊界梯田稻谷渐次成熟。...
中国之巅奏响《共同的节日》,千... 千吨阻尼器,“迎世赛、游上海旅游节”。9月13日,由上海市文化和旅游局指导推出上海旅游·会客│巅峰之...