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内部通道采样异常原因

推荐阅读最新更新时间:2026-03-25 11:25

GD32开发实战指南(基础篇) 第19章 程序加密
开发环境: 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 ,i; for(i=0;i 12
[单片机]
GD32开发实战指南(基础篇) 第18章 CRC校验
开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK 1 CRC的校验原理 __循环冗余校验(CRC)计算单元是根据固定的生成多项式得到任一32位全字的CRC计算结果。__在其他的应用中, CRC技术主要应用于核实数据传输或者数据存储的正确性和完整性。标准EN/IEC 60335-1即提供了一种核实闪存存储器完整性的方法。 CRC计算单元可以在程序运行时计算出软件的标识,之后与在连接时生成的参考标识比较,然后存放在指定的存储器空间。那么首先来看看CRC校验原理。 1.1基本原理 CRC检验原理实际上就是在一个p位二进制数据序列之后附加一个r位二进制检验码(序列),从而构
[单片机]
GD32开发实战指南(基础篇) 第4章 GD32启动流程详解(Keil版)
开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK 对于我们常用的桌面操作系统而言,我们在开发应用时,并不关心系统的初始化,绝大多数应用程序是在操作系统运行后才开始运行的,操作系统已经提供了一个合适的运行环境,然而对于嵌入式设备而言,在设备上电后,所有的一切都需要由开发者来设置,这里处理器是没有堆栈,没有中断,更没有外围设备,这些工作是需要软件来指定的,而且不同的CPU类型、不同大小的内存和不同种类的外设,其初始化工作都是不同的。本文将以GD32F207IK (基于Cortex-M3)为例进行讲解。 在开始正式讲解之前,你需要了解ARM寄存器、汇编以及反编译相关的知识
[单片机]
西门子PLC动态加密计时程序设计
这个时候点击HMI上的生成解锁码按钮,生成解锁码(解锁码是在动态验证码中挑选8位生成的,在此基础上还可以扩展出随机生成的解锁码..........)。 然后客户把解锁码告诉给调试人员,调试人员根据解锁码计算出解密密码告诉给客户解密(调试人员是需要知道这个解密算法)。 加密计时模块 程序块数据结构 程序完成步骤 1、首先调用RD_LOC_T读取日期时间存入到FB块本地临时变量中,读取秒数,根据秒数计算天数 2、调用西门子官方随机数生成块,并将随机数加上索引。 3、将随机数按照索引的顺序,放入相应的寄存器,并转成字符并显示在HMI上,可以看到动态的字符变化的炫酷效果 4、生成解锁码显示在HMI,客户把这个
[嵌入式]
西门子PLC动态<font color='red'>加密</font>计时<font color='red'>程序</font>设计
MYD-LR3576 AMP非对称多核开发实战:从配置到深度优化
一、什么是AMP?为什么重要? AMP(Asymmetric Multi-Processing)非对称多处理架构,允许单个芯片的不同核心运行不同的或裸机程序。相比传统的SMP(对称多处理),AMP具有独特优势。 核心特性: 异构运算:不同核心运行最适合的操作系统,如处理复杂应用,保障实时任务; 资源隔离:各核心拥有独立内存空间,避免资源冲突; 灵活:通过共享内存、RPMSG等方式实现高效核间通信; 商业价值: 成本优化:单芯片替代多芯片方案,减少面积和数量; 开发灵活:支持Linux、RT-Thread、裸机程序的自由组合; 系统可靠:故障隔离,关键任务永不掉线;
[嵌入式]
MYD-LR3576 AMP非对称多核<font color='red'>开发</font><font color='red'>实战</font>:从配置到深度优化
赋能欧标充电桩市场:OCPP协议实战开发指南
随着全球电动汽车产业的迅猛发展,充电基础设施的智能化与标准化已成为行业迫切需求。OCPP(Open Charge Point Protocol即开放充电点协议)作为连接充电桩与中央管理系统的 通用语言 ,正成为解决设备互联互通难题的关键技术。 一、OCPP:为何是出海欧标的必选项? OCPP是一个开放、标准的通信协议,它确保了不同制造商生产的充电桩能够与任何兼容的后台管理系统进行无缝通信。集成OCPP协议意味着为产品赋予“标准通信接口”,其核心价值在于: 打破互联壁垒:使充电桩能接入任何符合OCPP标准的第三方运营平台,提升产品适配性; 满足法规要求:满足欧盟对充电设施互操作性的强制法规,是市场准入的前提; 解
[嵌入式]
赋能欧标充电桩市场:OCPP协议<font color='red'>实战</font><font color='red'>开发</font>指南
基于迅为iTOP-3568开发板的Linux驱动开发实战:menuconfig图形化配置实验
选择迅为iTOP-3568开发板,您将获得完整的驱动开发套件与工业级稳定性保障;该套件提供从基础教程到进阶实战的全套代码示例,能助您快速掌握核心驱动开发技巧。 menuconfig图形化配置实验 学习把驱动编译进内核之前需要先掌握menuconfig图形化配置界面的知识。menuconfig 是一套图形化的配置工具,在内核源码顶层目录下输入make menuconfig命令可以打开 图形化配置界面。 6.1 图形化界面的操作 图形化配置界面主要有以下四种。 make config(基于文本的最为传统的配置界面,不推荐使用) make menuconfig(基于文本菜单的配置界面) make xconfig(要
[嵌入式]
基于迅为iTOP-3568<font color='red'>开发</font>板的Linux驱动<font color='red'>开发</font><font color='red'>实战</font>:menuconfig图形化配置实验
STM32外设开发的五个常见陷阱与实战技巧
STM32作为嵌入式开发领域的热门微控制器,功能丰富,几乎能够胜任所有常见控制任务:GPIO、ADC、PWM等外设一应俱全。然而,正因其功能强大,开发中遇到陷阱的机会也随之增多。许多初学者甚至经验丰富的开发者,常在外设配置上浪费大量时间,调试许久仍无法定位问题。本文总结了5个STM32外设使用中最易踩坑的技巧,助你少走弯路,提升开发效率。 1. GPIO 配置别忘了上拉/下拉 很多初学者在读取按键、外部或中断输入时,会发现输入状态总是不稳定,甚至出现抖动或误触发。这通常是因为 GPIO 输入口浮空造成的。 常见坑: 输入引脚未配置上拉/下拉,导致状态随机波动。 上拉/下拉和外部电路冲突,影响可靠性。 输入
[嵌入式]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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