Hex2Bin转换软件、Bootloader 、OTA加密升级 、STM32程序加密、其他MCU同样适用

说明:这个工具可以将 Hex 文件 转换为 Bin 格式文件,软件是按自己开发 STM32 OAT 功能需求开发的一款辅助 上位机软件。

文中的介绍时 bootloader = boot 

文档在补充完善中...

有兴趣的朋友可留言探讨。

1. 软件功能:

1.生成 bin:将 Hex 格式文件转换为 Bin 格式。

2.boot 打包为 bin:可以生成指定大小的 bin 格式文件,文件多余的空余位置填充随机数。可在生成的Bin文件指定位置填充加密后的指定数据,用于程序加密使用。

3.app 打包为 bin :可生成整个程序加密后的 Bin 文件,可用于 OTA 中的 APP 文件加密,防止APP泄漏。

2. Bootload 加密思路

bootloader文件的构成: 

bootloader 编译文件 + flash加密数据区域 = 烧录用 bootloader;

例如:假设app的开始区域为 0x800A000 ,那boot的文件区域为 0x8000000 ~  0x800A000

1. Flash加密数据区域:

        假设取 0x8009800 ~ 0x800A000 共2kb区域作为加密数据的存储区域,简单说按app的前一个扇区作为加密数据存储区域,因为有的MCU一个扇区大小 2k ,有的 1k ,视具体型号而定,取app的上一个扇区即可。

2. boot 编译文件大小:

        调整Flash分区的大小,boot 的数据不要到 Flash加密数据区域,避免交叉导致 boot 被意外擦除。

3. Flash加密数据区域数据结构:

typedef struct
{uint32_t  app_state;            /* app 状态,无APP,有APP */uint32_t  mark[4];              /* 初始状态数据 */uint32_t  id_mark[4];           /* ID加密数据 */...                             /* 根据需求自定义 */
}APP_t;

4. boot文件打包:

4.1.设定指定大小:

        使用专用 上位机软件导入 boot 程序后,按设定的大小输出输出 bin 文件,多余的地方填充随机数。例如:boot编译文件为 32k, 设定输出大小为40 k,那空余的 8k 全部填充随机数,这样混淆后即便读出boot程序也不知道boot程序具体多大。

4.2.插入加密数据:

        在预留的加密扇区内指定的位置插入加密数据。

        如:数据 mark[4] 是boot第一次运行时会检测的数据,检测这个数据和预期的相符才执行 boot 的加密工作,加密完成后再 修改或删除 mark[4] 数据,确保 boot 的加密工作只做一次。

        id_mark[4] 是加密数据,通过读取 MCU 的 ID ,再通过AES加密算法,加密后存储到 id_mark[4] 。 

uint32_t  mark[4];              /* 初始状态数据 */
uint32_t  id_mark[4];           /* ID加密数据 */

3. APP 加密思路

        1. app 按16字节凑整,即app的大小是 16 的整数倍,这样方便 AES 加密,加密前在app文件末尾插入app文件的 CRC16 校验值,这样boot可以校验app的完整性。在凑整和添加CRC16值后再AES加密文件,最终得到的bin文件作为 boot 升级用。

        2.app校验ID的有效性,app通过读取 boot 加密区域的 ID 加密数据,解密后与读取的MCU ID 做对比,判断程序的有效性。

4. boot 启动流程

5. App 启动流程

        app通过读取 boot 加密区域的 ID 加密数据,解密后与读取的 MCU ID 做对比,判断程序的有效性。

6. AES 加密算法代码

7. CRC16 校验算法代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/610406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于模块自定义扩展字段的后端逻辑实现(二)

目录 一:创建表 二:代码逻辑 上一节我们详细讲解了自定义扩展字段的逻辑实现和表的设计,这一节我们以一个具体例子演示下,如何实现一个订单模块的自定义扩展数据。 一:创建表 订单主表: CREATE TABLE t_order ( …

VSCode C/C++(gdb)调试指南

1、安装插件 2、F5开启调试 左侧侧边栏->确保打开回调栈 右键函数栈->查看反汇编 3、打印寄存器、函数反汇编等 命令: 查看main反汇编 -exec disassemble /m main 查看寄存器 -exec info r 打印某个变量 -exec print s 或者 --s 打印寄存器,如p…

如何在没有密码的情况下将 iPhone 13/14/15 恢复出厂设置

您想知道如何在没有密码的情况下将 iPhone 13/14/15 恢复出厂设置吗? 出厂重置 iPhone 13/14/15 成为所有 iPhone 机型中最简单的。大多数情况下,iPhone 13/14/15 是在 iOS 15 或更高版本的 iOS 版本上,Apple 更新了无需密码重置 iPhone 13/…

nodejs 服务端token 高效缓存验证

在前后端分离开发过程中,经常涉及权限验证的问题,一般都是采用由服务端根据前端传递的用户名和密码,验证成功后生成token,然后前端在访问服务端接口时,再附带token访问。 如果服务端高频次的解析token,进行内容验证,则会大大降低接口性能,而采用内存或者redis进行合法…

IoT 物联网 MQTT 协议 5.0 版本新特性

MQTT 是一种基于发布/订阅模式的轻量级消息传输协议,专门为设备资源有限和低带宽、高延迟的不稳定网络环境的物联网场景应用而设计,可以用极少的代码为联网设备提供实时可靠的消息服务。MQTT 协议广泛应用于智能硬件、智慧城市、智慧农业、智慧医疗、新零…

GAMES101-Assignment5

一、问题总览 在这次作业中,要实现两个部分:光线的生成和光线与三角的相交。本次代码框架的工作流程为: 从main 函数开始。我们定义场景的参数,添加物体(球体或三角形)到场景中,并设置其材质&…

项目管理:风险的来源及管理方法

项目风险是项目管理中的难点之一,虽然我们无法将其完全消除,但可以提前做好准备,将风险降至最低。 项目风险如同暗礁潜伏,你和团队需时刻保持警惕。以下几种风险需特别关注: 措施不足:成本与行动的误差&…

Python 基础(三):字符串

目录 简介2 基本操作2.1 访问2.2 单个字符编码 3 转义符4 运算符5 格式化 简介 之前我们已经提到了:字符串是 Python 的一种数据类型,它可以通过单引号 ‘、双引号 "、三引号 ‘’’ 或 “”" 来定义,本节我们来详细介绍一下。 2…

加速科技ST2500 数模混合信号测试设备累计装机量突破500台!

国产数字机,测试中国芯!新年伊始,国产半导体测试设备领军企业加速科技迎来了振奋人心的一刻,ST2500 数模混合信号测试设备累计装机量突破500台!加速科技凭借其持续的创新能力、完善的解决方案能力、专业热忱的本地化服…

软件定义存储

软件定义存储源于VMware公司于2012年提出的软件定义的数据中心(SDDC)。存储作为软件定义的数据中心不可或缺的一部分,其以虚拟化为基础,但又不仅限于虚拟化。存储虚拟化一般只能在专门的硬件设备上应用,很多设备都是经…

笔记本摄像头模拟监控推送RTSP流

使用笔记本摄像头模拟监控推送RTSP流 一、基础安装软件准备 本文使用软件下载链接:下载地址 FFmpeg软件: Download ffmpeg 选择Windows builds by BtbN 一个完整的跨平台解决方案,用于录制、转换和流式传输音频和视频。 EasyDarwin软件:Download Easy…

实习周志实习生实习报告总结定

第一周: 这是我作为前端实习生的第一周,充满了新奇和挑战。在这周里,我主要熟悉了公司的前端开发环境和项目代码结构。我参与了小组的日常会议,了解了当前项目的进展和团队成员的分工。 遇到的问题: 在初始的学习阶…

企业小文件多传输慢怎么办?怎么解决海量小文件传输慢的问题?

在当今信息时代,许多企业在文件传输过程中普遍面临一个棘手问题——小文件传输缓慢。这不仅对企业工作效率产生不良影响,还可能导致运营成本增加以及数据遗失与损坏的风险。那么,企业应该如何解决海量小文件传输缓慢的问题呢?本文…

高压MOS在适配器产品上的应用-REASUNOS瑞森半导体

一、适配器定义 电源适配器,英文Adapter通常指AC-DC(由交流输入转换为直流输出)的开关电源;一般由控制 IC、MOS管、整流肖特基管、电阻电容、磁性材料、DC 线、外壳等元器件及部件组成,通过整流、变压和稳压等转换形式…

2024系统分析师---论设计模式及其应用

摘要: 本人于2018年1月参与了中石化XX油田XX采油厂“用电管理系统”的项目建设,该系统建设目标是实现分单位、分线路、分系统评价、优化、考核,全面提升采油厂用电管理水平。在该项目组中我担任系统架构师一职,主要负责系统整体架…

第1章 引言

目录 1. 鸢尾花分类1.1 初识数据1.2 衡量模型是否成功:训练数据与测试数据1.3 要事第一:观察数据1.4 构建第一个模型:k近邻算法(KNeighborsClassifier)1.5 做出预测(predict)1.6 评估模型 1. 鸢…

【51单片机】延时函数delay的坑——关于无符号整型数据for语句“x >= 0“变成死循环

请认真看看以下延时函数是否正确,并且指出错误:(考考C语言功底) void delay_ms(unsigned int xms) //delay x ms {unsigned int x,y;for(xxms;x>0;x--)for(y124;y>0;y--); }废话少说,上正确代码: v…

C++ 数据结构

C/C 数组允许定义可存储相同类型数据项的变量,但是结构是 C 中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。 结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性&…

青少年软件编程(C/C++)等级考试试卷(二级)2023年12月

202312 青少年软件编程(C/C)等级考试试卷(二级)电子学会真题 编程题 1.统计指定范围里的数 给定一个数的序列S,以及一个区间[L, R], 求序列中介于该区间的数的个数,即序列中大于等于L且小于等于R的数的个…

linux ftp服务选择与ftp(vsftpd,Pure-FTPd)服务安装使用教程

一 linux ftp常用的服务软件 在Linux系统中,最常用的ftp有vsftpd,Pure-FTPd,ProFTPd,Wu-FTPd,glftpd,他们的特性优缺点如下对比图: 常用的5款linux ftp对比图: 软件特性优点缺点vsf…