关于 stm32 单片机,用 id 加密,明码安全问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
stm32 提供的 id ,可以让我们进行软件加密,
这个功能挺好的,
但是我研究了一下明码加密的弱点,
贴出来,给大家研究一下,
写了一段简单的代码,如下,效验 id
程序就是输出 ok1, 来代
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
id 的明码对比,
然后我们生成 hex 文件,
这个 hex 文件,就是我们明码加密后的烧写文件,
当这个文件烧写到指定的 id 设备上,才能运行 ,我们测试是 输出 ok1;
加密过程已经 ok,
下面
我们分析一下弱点,
单片机声明的常量,
编译器会进行编译,并固化到 flash 区域,
基本上大多数单片机编译器都是这么做的,
所以就存在了安全问题,
我们用 jlink 的软件, J-Flash ARM V4.08
读取或者加载我们的 hex 文件,
我们为了便于分析,保存成 1.c 文件,
用 ue 打开分析,
很容易就找到了我们用于效验设备 id 的 对比数据:
看上面的数据,不用说了吧,
就是我们用于效验的对比数据,
所以,如果是高手, 还是要注意你的加密的算法,
明码是有其薄弱一面的,
还是谢谢大家看我的文章.
关于 stm32 单片机无法获取 96 位芯片 ID 的解决
办法
鲁班奖评选办法下载鲁班奖评选办法下载鲁班奖评选办法下载企业年金办法下载企业年金办法下载
我们会用这几句来获取 id
u32 Dev_Serial0, Dev_Serial1, Dev_Serial2;
Dev_Serial0 = *(vu32*)(0x1FFFF7E8);
Dev_Serial1 = *(vu32*)(0x1FFFF7EC);
Dev_Serial2 = *(vu32*)(0x1FFFF7F0);
我在新版本的 MDK 380a 和 IAR 5.4 中 无法获取 id ,
解决办法 1:
MDK 中,更换启动代码文件:cortexm3_macro.s
和 stm32f10x_vector.s ,
换乘 MDK 自动生成的启动文件: STM32F10x.s ,
上面的代码就可以正常运行了;
解决办法 2:
MDK 中,这样定义:
volatile unsigned char data[12] = {0};
data[0] = *(volatile unsigned char*)(0x1ffff7e8);
data[1] = *(volatile unsigned char*)(0x1ffff7e9);
data[2] = *(volatile unsigned char*)(0x1ffff7ea);
data[3] = *(volatile unsigned char*)(0x1ffff7eb);
data[4] = *(volatile unsigned char*)(0x1ffff7ec);
data[5] = *(volatile unsigned char*)(0x1ffff7ed);
data[6] = *(volatile unsigned char*)(0x1ffff7ee);
data[7] = *(volatile unsigned char*)(0x1ffff7ef);
data[8] = *(volatile unsigned char*)(0x1ffff7f0);
data[9] = *(volatile unsigned char*)(0x1ffff7f1);
data[10] = *(volatile unsigned char*)(0x1ffff7f2);
data[11] = *(volatile unsigned char*)(0x1ffff7f3);
换乘 8位的写法,就正常了,可以用了。
上面 2 种方法,那个都可以,看个人喜欢,