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

发布者:breakthrough2最新更新时间:2024-11-04 来源: elecfans关键字:GD32  开发实战  程序加密 手机看文章 扫描二维码
随时随地手机看文章

开发环境:

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是不一样。


关键字:GD32  开发实战  程序加密 引用地址:GD32开发实战指南(基础篇) 第19章 程序加密

上一篇:GD32开发实战指南(基础篇) 第4章 GD32启动流程详解(Keil版)
下一篇:GD32 ADC内部通道采样异常原因

推荐阅读最新更新时间:2024-11-12 23:53

GD32开发实战指南(基础篇) 第1章 开发环境搭建
开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK 1 GD32F207I-EVAL开发板简介 笔者使用的开发板是兆易创新设计的GD32F207I-EVAL开发板。 GD32F207I-EVAL开发板使用 GD32F207IK作为主控制器,主频120MHz、集成3MB Flash、256KB SRAM、通用定时器10、Adv. TM2、Basic TM2、系统时钟1、看门狗2、RTC1、USART4、UART4、I2C3、SPI3、I2S1、SDIO1、CAN2.0B2、USB2.0 OTG FS1、以太网MAC1、TFT-LCD16、数字摄像头接口1、Crypro/
[单片机]
gd32和ch32的区别
GD32和CH32是两个不同的芯片系列,都是由中国厂商GigaDevice生产的。虽然这两种芯片有许多相似之处,但它们在一些关键特性的设计和性能方面存在一些区别。 1. 处理器核心 GD32系列采用的是ARM Cortex-M3和Cortex-M4核心,而CH32系列则是基于国产神州龙的Loongson 3A核心。相比之下,ARM Cortex-M系列已经被广泛认可,许多工具链和开发板都支持它,因此GD32具有更广泛的应用范围和更好的兼容性,而CH32则相对较少。 2. 性能参数 虽然CH32系列采用了国产处理器核心,但GD32系列在性能和性价比方面占据着明显的优势。举一个例子,在单片机时钟频率为108 MHz的情况下,GD32芯
[单片机]
兆易创新携GD32 MCU包揽2018年“中国IC设计成就奖”多项大奖
原标题:兆易创新携GD32 MCU再度包揽2018年“中国IC设计成就奖”多项大奖 2018年3月30日,由AspenCore旗下《电子工程专辑》、《电子技术设计》和《国际电子商情》联合举办的“2018年度中国IC领袖峰会暨中国IC设计成就奖颁奖典礼”在上海隆重举行。 经过IC产业人士,系统设计工程师以及媒体分析师团队历时6个月的层层选拔,凭借高质量的产品和杰出的市场表现, 兆易创新(GigaDevice)荣获“十大中国 IC 设计公司”奖项,GD32F330/350系列微控制器荣获“年度最佳MCU”奖项,兆易创新产品市场总监金光一先生荣获“市场营销新锐人物”奖项。赢得了业界同行的一致认可,并再度包揽多项殊荣!  
[半导体设计/制造]
GD32 MCU 入门教程】GD32 MCU 常见外设介绍(14)RTC 模块介绍
GD32 MCU内部提供了一个RTC(实时时钟)模块,通过RTC可以实现日历时钟、闹钟等功能。RTC也可以用于深度睡眠或待机模式的低功耗唤醒。不同系列的GD32 MCU在RTC设计和功能上有所区别,总体可以分为三大系列: (1)F10x、F30x、E10x系列RTC功能基本相同,后文简称0x系列。 (2)F1x0、F3x0、E23x系列RTC功能基本相同,后文简称x0系列。 (3)F405、F407、F450系列RTC功能基本相同,后文简称4xx系列。后文会对0x系列、x0系列、4xx系列的RTC模块分别进行介绍,简单介绍RTC的工作原理、配置使用方法。 14.1.GD32 RTC 外设简介 0x 系列 RTC 0x系列RTC整体
[单片机]
【<font color='red'>GD32</font> MCU 入门教程】<font color='red'>GD32</font> MCU 常见外设介绍(14)RTC 模块介绍
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved