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

2024-01-10 12:28:39

说明:这个工具可以将 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 校验算法代码

文章来源:https://blog.csdn.net/yutian0606/article/details/135403768
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。