《嵌入式 – GD32开发实战指南》第19章 程序加密
开发环境:
MDK:Keil 5.30
开发板:GD32F207I-EVAL
MCU:GD32F207IK
19.1程序加密工作原理
GD32通过读取芯片唯一ID号来实现程序的保护,防止被抄袭。96位的产品唯一身份标识所提供的参考号码对任意一个GD32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。按照用户不同的用法,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。在这里要提醒读者,要注意大端小端模式。
19.2程序加密具体代码实现
其实读取ID很简单,如果存储ID的变量为8位。则需要读取12次,如下所示。
uint8_t Sys_ID[12],i;
for(i=0;i<12;i++)
{Sys_ID[i]=*( uint8_t*)(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单片机的存储方式为小端模式。
【注】大小端
地址从小到大,先放低字节,再放高字节:小端模式
地址从小到大,先放高字节,再放低字节:大端模式
主函数代码如下:
/*brief main functionparam[in] noneparam[out] noneretval none
*/
int main(void)
{uint8_t Sys_ID[12],i;//systick initsysTick_init();//usart init 115200 8-N-1com_init(COM1);for(i=0;i<12;i++){Sys_ID[i]=*(uint8_t*)(0x1FFFF7E8+i);printf(" %0.2X",Sys_ID[i]);}//ID 48 1D 35 54 33 34 34 08 33 31 35 36if(Sys_ID[0]==0x48 && Sys_ID[1]==0x1D && Sys_ID[2]==0x35 &&Sys_ID[3]==0x54 && Sys_ID[4]==0x33 && Sys_ID[5]==0x34 &&Sys_ID[6]==0x34 && Sys_ID[7]==0x08 && Sys_ID[8]==0x33 &&Sys_ID[9]==0x31 && Sys_ID[10]==0x35 && Sys_ID[11]==0x36){printf("\r\nPass\r\n");}else{printf("\r\nFail\r\n");}while(1){ delay_ms(1000);}
}
19.3实验现象
将程序编译完成后下载到板子中,可以看到打印出来的唯一ID,该程序是通过现读取ID在通过ID判断,才会打印出ID后面的“通过”字样。
当然啦,每个芯片的ID是不一样。
欢迎访问我的网站
BruceOu的哔哩哔哩
BruceOu的主页
BruceOu的博客
BruceOu的CSDN博客
BruceOu的简书
BruceOu的知乎
资源获取方式
1.关注公众号[嵌入式实验楼]
2.在公众号回复关键词[GD32开发实战指南]获取资料提取码
《嵌入式 – GD32开发实战指南》第19章 程序加密相关推荐
- 《嵌入式 – GD32开发实战指南》第12章 ADC
开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK 12.1 ADC工作原理 GD32F2系列有 3 个逐次逼近型的ADC,精度为 12 位,有 ...
- 《嵌入式 – GD32开发实战指南》第3章 GPIO流水灯的前世今生
开发环境: MDK:Keil 5.30 MCU:GD32F207IK 上一章通过控制GPIO的高低电平实现了流水灯,但只是告诉了大家怎么做,如何实现流水灯,本文将深入剖析的GPIO流水灯的前生今世,深 ...
- 《嵌入式 – GD32开发实战指南》第18章 CRC
开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK 18.1 CRC的校验原理 循环冗余校验(CRC)计算单元是根据固定的生成多项式得到任一32 ...
- 《嵌入式 – GD32开发实战指南》第17章 看门狗
开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK GD32 有两个看门狗,一个是独立看门狗,另外一个是窗口看门狗,独立看门狗号称宠物狗,窗口看 ...
- 《嵌入式 – GD32开发实战指南》第6章 按键
开发环境: MDK:Keil 5.30 MCU:GD32F207IK 6.1普通方式 6.1.1普通方式工作原理 按键 GPIO 端口有两个方案可以选择,一是采用上拉输入模式,因为按键在没按下的时候, ...
- 《嵌入式 – GD32开发实战指南》第14章 内部温度传感器
开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK 14.1内部温度传感器工作原理 GD32 有一个内部的温度传感器,可以用来测量 CPU 及周 ...
- 《嵌入式 – GD32开发实战指南》第2章 初识GPIO流水灯
开发环境: MDK:Keil 5.30 MCU:GD32F207IK 2.1 GPIO工作原理 熟悉单片机的朋友都知道,学习的第一个例程就是流水灯,要想实现流水灯,首先必须了解GPIO的工作原理.GP ...
- 《嵌入式 – GD32开发实战指南》第20章 GD32的存储结构
开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK 20.1 GD32存储结构的工作原理 20.1.1 Cortex-M内核的存储器映射 存储器 ...
- 《嵌入式 – GD32开发实战指南》第21章 I2C
开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK 21.1 I2C工作原理 21.1.1 I2C串行总线概述 I2C总线是PHLIPS公司推出 ...
最新文章
- Python3 websocket server与client
- 【个人总结】知识晶体的前中后台
- maven(三)最详细的profile的使用
- 实现根据id查询房源数据的GraphQL服务
- 几何级数 函数 matlab,matlab 实验05数据的统计分析
- IDEA写sql语句的时候没有提示信息的处理办法
- (47)VHDL实现8位奇偶校验电路(for loop语句)
- 共享代码库,为何总被程序员弃用?
- 查询SQL最近一次启动时间
- 招聘PHP聚合系统,Thinkphp5开发OA办公系统之招聘申请
- 原型工具Axure:常用效果制作(选中、淘宝网导航、轮播图、toast效果、呼出键盘、省市二级联动、步进器、订单详情案例、中继器)
- JAVA里面一加到一百等于多少_从1加到100等于多少 【求和算法汇总】
- 从表征到行动---意向性的自然主义进路(续五)
- 【突发】Telsa致命车祸细节报告:人为设定超速15%(下载)
- 什么是视频内容推荐引擎?
- linux防火墙之firewalld
- 基于CAN的网络管理NM(network management)
- 编译问题追踪 :高通驱动移植 <utils/Log.h>问题
- [转] 心中永远是晴天
- linux 删除卸载软件