单片机
返回首页

GD32开发实战指南(基础篇) 第19章 程序加密

2024-11-04 来源:elecfans

开发环境:

MDK:Keil 5.30

开发板:GD32F207I-EVAL

MCU:GD32F207IK


1 程序加密工作原理

GD32通过读取芯片唯一ID号来实现程序的保护,防止被抄袭。96位的产品唯一身份标识所提供的参考号码对任意一个GD32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。按照用户不同的用法,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。在这里要提醒读者, 要注意大端小端模式 。


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 function

    param[in]  none

    param[out] none

    retval     none

*/

int main(void)

{

    uint8_t Sys_ID[12],i;


    //systick init

    sysTick_init();


    //usart init 115200 8-N-1

    com_init(COM1, 115200, 0, 1);

    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 36

    if(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);

    }

}


3 实验现象

将程序编译完成后下载到板子中,可以看到打印出来的唯一ID,该程序是通过现读取ID在通过ID判断,才会打印出ID后面的“通过”字样。

1684499601688xjzva5bru7

当然啦,每个芯片的ID是不一样。


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 如何调制IC555振荡器

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章