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 校验算法代码

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

test fuzz-05-模糊测试 kelinci AFL-based fuzzing for Java

拓展阅读 开源 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) 开源 Junit performance rely on junit5 and jdk8.(java 性能测试框架。性能测试。压测。测试报告生成。) test fuzz-01-模糊测试(Fuzz Testing) test fuzz-…

javacc知识点

javacc的语法描述性文件以.jj结尾,一般情况下采用 1、option{JavaCC的选项} options部分,用于放置 JavaCC 的选项,常见option包括: STATIC:用于决定JavaCC生成的所有成员及方法是否被定义为static(注意:定义…

如何在Android Glide中结合使用CenterCrop和自定义圆角变换(图片部分圆角矩形)

如何在Android Glide中结合使用CenterCrop和自定义圆角变换(图片部分圆角矩形) 在Android开发中,使用Glide加载图片时,我们经常需要对图片进行特定的处理,比如裁剪和圆角变换,特别是一些设计稿,…

FS【1】:SSP

文章目录 前言1. Abstract2. Introduction2.1. Motivation2.1.1. Few-shot Segmentation (FSS) Task2.1.2. Few-shot Segmentation (FSS) Problem 2.2. Contribution 3. Methods3.1. Motivation3.2. Overview of the architecture4.3. Self-support Prototype4.4. Adaptive Sel…

代理IP连接不上?网速过慢?自检与应对方法来了

当您使用代理时,您可能会遇到不同的代理错误代码显示代理IP连不通、访问失败、网速过慢等种种问题。 在本文中中,我们将讨论您在使用代理IP时可能遇到的常见错误、发生这些错误的原因以及解决方法。 一、常见代理服务器错误 当您尝试访问网站时&#…

用户管理第一节课,阿里生成代码包

鱼皮教程生成所用到的 一、网址 网址: Cloud Native App Initializer (aliyun.com) 二、仿照生成 2.1 Maven Project & Java 2.2 Spring Boot版本 2.3 高级选项 2.3.1 项目名称可根据需求改 注意:不要有空格 2.4 应用架构 选择:单…

彻底关闭win10的自动更新Update

停止更新服务 任务管理器中search windows update,停止服务,以及禁止恢复里面的action 停止任务计划 computer 右键 电脑管理,停止全部工作计划。

慕课热搜01

uniapp过滤器使用 创建一个过滤器: 在入口函数注册过滤器 // 注册过滤器 import * as filters from "./filters/index.js"Object.keys(filters).forEach(key>{Vue.filter(key,filters[key]) })使用过滤器: onPageScroll , uniapp监听滚动…

Web APIs知识点讲解

学习目标: 能获取DOM元素并修改元素属性具备利用定时器间歇函数制作焦点图切换的能力 一.Web API 基本认知 1.作用和分类 作用: 就是使用 JS 去操作 html 和浏览器分类:DOM (文档对象模型)、BOM(浏览器对象模型) 2.DOM DOM(Document Ob…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第六天-Linux信号(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…

GBASE南大通用 GBase 8a 产品构建数仓系统架构

l GBASE南大通用 GBase 8a 产品构建数仓应用的系统架构: 架构 技术实现特点 适用场景 独立数据仓库(集市)系统架构 一套GBase 8a物理集群 适用于数据规模较小的业务场景 适用于各业务之间数据互访较频繁的业务场景 适用于单一独立的业务…

k8s源码阅读环境配置

源码阅读环境配置 k8s代码的阅读可以让我们更加深刻的理解k8s各组件的工作原理,同时提升我们Go编程能力。 IDE使用Goland,代码阅读环境需要进行如下配置: 从github上下载代码:https://github.com/kubernetes/kubernetes在GOPATH目…

Python之文件的相关操作

文件和文件夹的移动、复制、删除、重命名 一、概述 Python中对文件和文件夹进行移动、复制、删除、重命名,主要依赖os模块和shutil模块,以下用实例集中演示文件的移动、复制、删除、重命名,用到的时候直接查询即可。 二、实例 1 #!/usr/bi…

C++11教程:C++11新特性大汇总(第六部分)

C11是2011年发布的C标准,是C的一次重大升级。 第十二部分:C多文件编程 十一、C11列表初始化(统一了初始化方式) 我们知道,在 C98/03 中的对象初始化方法有很多种,请看下面的代码: //初始化列…

C#编程-实现在文本文件中的读和写

实现在文本文件中的读和写 Stream类用于从文本文件读取数据和向文本文件写入数据。它是一个抽象类,支持向流读写字节。如果文件的数据仅是文本,那么您可以使用StreamReader类和StreamWriter类来完成相应的读和写任务。 StreamReader类 StreamReader类继承自从抽象类TextRea…

大家都在问的牛仔外套来啦

经典永不过时的牛仔外套, 绝对是衣橱里必不可少的时尚单品之一 重工水洗破洞乞丐风,个性潮流感十足 时尚帅气,男宝女宝都能穿还有妈妈款哦 经典宽松版型,不挑身材不挑人穿对身材包容性很强 怎么穿都好看,简单搭配…

手轮脉冲平滑处理笔记

这是一个求手脉倍率((Hw_Control.mult_ratio)与手脉脉冲计数延迟次数即累计过去n次的平均值(Hw_Control.lag_num)之间关系算法的计算过程笔记文档 1、已知 mult_ratio=1时 lag_num=10; mult_ratio=10时 lag_num=20; .mult_ratio==100时 lag_num=30; 以此类推 2、设lag_num…

如何实现两台Linux虚拟机ssh免密登录

实验开始前 1.准备好两台虚拟机(下载好镜像文件的) 2.实验步骤 公钥验证:(免密登陆验证方式) (1)生成非对称秘钥 [rootclient ~]# ssh-keygen -t rsa Generating public/private rsa key pai…

无线与局域网技术期末划题自制答案

简答题 1.描述5G的三大应用场景? 5G的三大应用场景包括增强型移动宽带(eMBB)、超可靠低延迟通信(URLLC)和大规模机器类型通信(mMTC)。增强型移动宽带(eMBB)主要用于支持…

数字化转型究竟是什么意思?

在这个飞速发展的数字时代,数字化转型已成为各个行业不可回避的趋势。从企业到组织,都在努力借助先进的数字技术,以迎合时代潮流,提升效率、创造价值。数字化转型不仅仅是技术的升级,更是一场全方位的变革,…