Encrypting bootloader (程序BIN文件加密及在线升级)
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序)。
在上一个博客随笔,我介绍了为PIC16,PIC18, PIC24/dsPIC, PIC32的学习板或最小系统板做的Xmodem bootloader。今天给大家介绍在我的Xmodem bootloader 的基础上开发的Encrypting bootloader。今年的国庆节,我哪都没去,就宅在家里把Encrypting bootloader完成。虽然我叫它Encrypting bootloader, 实际上加密(encrypting)的是应用程序BIN文件,加密过的BIN文件传送给单片机,单片机的boot程序先(decrypting)解密然后烧写数据到单片机ROM的对应的地址上。所以整个Encrypting bootloader工程分为两部分,一部分是PC端的工程,完成将Hex文件转换为BIN文件, 然后将BIN文件加密生成.ecd文件(采用XTEA的加密方式),最后作为Xmodem的发送端将.ecd文件按照XMODEM协议发送到单片机;另一部分是单片机端的工程(Decrypting boot),做为Xmodem接收端接收从PC端发送过来加密过的数据,解密并完成烧写。
XTEA
XTEA (Extended Tiny Encryption Algorihtm)是TEA的一个变种版本。XTEA采用对称加密,将明文分成多个等长的组,并用相同的密码算法和密钥对每组分别进行加密和解密。密钥长度为128位,加密块为64位。XTEA算法是David Wheeler and Roger Needham于1997年发布的,并附带有C语言的实现源代码。
#include <stdint.h>
/* take 64 bits of data in v[0] and v[1] and 128 bits of key[0] - key[3] */
], uint32_t ]) {
unsigned int i;
uint32_t v0=v[], v1=v[], sum=, delta=0x9E3779B9;
; i < num_rounds; i++) {
v0 += (((v1 << ) ^ (v1 >> )) + v1) ^ (sum + key[sum & ]);
sum += delta;
v1 += (((v0 << ) ^ (v0 >> )) + v0) ^ (sum + key[(sum>>) & ]);
}
v[]=v0; v[]=v1;
}
], uint32_t ]) {
unsigned int i;
uint32_t v0=v[], v1=v[], delta=0x9E3779B9, sum=delta*num_rounds;
; i < num_rounds; i++) {
v1 -= (((v0 << ) ^ (v0 >> )) + v0) ^ (sum + key[(sum>>) & ]);
sum -= delta;
v0 -= (((v1 << ) ^ (v1 >> )) + v1) ^ (sum + key[sum & ]);
}
v[]=v0; v[]=v1;
}
在我的Encrypting bootloader工程里面,XTEA是用C#通过扩展.NET SymmetricAlgorithm Class实现的,有用户交互界面,并支持一键式随机生成加密密钥(不过要记住哦,因为解密需要同样的密钥)。下面贴上图片介绍下加密过程。
加密过程
1. 用MPLAB X v3.30生成的PIC hex文件。

2. 用C#写的工具将Hex转换为Bin,

转换成BIN后再打开是如下。

没错,Bin直接打开,是乱码的,就像我们打开.exe文件那样。Bin文件虽然不可视,但是如果直接把Bin文件发给代工厂家,或协作商,还是不安全的。它是可以通过其他工具解读出里面的内容的,并可以直接使用。所以需要加密。下面是用C#写的加密工具界面。

这样,应用程序的BIN文件加密后,就很安全了,你可以发给供应商也可以发给客户了,没有密钥,是很难解密出里面的内容的,没有解密,是不能直接使用的。
Bin文件加密后,通过XMODEM SEND发送给单片机,单片机需要预装带XTEA decrypting(解密)功能的Xmodem bootloader(简称Decrypting Boot).
Decrypting Boot
Decrypting Boot是运行在单片机的小程序,首先它是XMODEM的接收端,接收加密过的数据,然后如同上面所贴代码中decipher()那样解密数据,所用密钥必须是加密时所用的密钥。最后将解密后的数据烧写到单片机的ROM指定的位置中去。这样就实现了可靠又安全地应用程序在线升级。如果有兴趣进一步了解和讨论我的Encrypting/Decrypting bootloader, 欢迎发送短消息或email给我,我的Q扣:1273623966。
Encrypting bootloader (程序BIN文件加密及在线升级)的更多相关文章
- Encrypted bootloader (程序BIN文件加密及在线升级)
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 在上一个博客随笔,我介 ...
- Android apk在线升级
APK 在线升级 APK 在线升级几乎是所有程序必备的功能. 在线升级功能能解决已有的问题并提供更丰富的新功能. 基本的流程是: 检测到新版本信息 弹出升级提示窗口 点击 No 不进行升级,完毕! 点 ...
- ubuntu15.10跑裸机程序跑.bin文件
1:安装tftp:#apt-get update#apt-get install tftp-hpa tftpd-hpa xinetd2:#cd /srv#mkdir tftp#chmod 777 tf ...
- 【Java】Swing+IO流实现一个简单的文件加密程序(demo版)
留着参考 EncrytService package com.my.service; import java.io.File; import java.io.FileInputStream; impo ...
- PIC32MZ 通过USB在线升级 -- USB CDC bootloader
了解bootloader 的实现,请加QQ: 1273623966 (验证填 bootloader):欢迎咨询或定制bootloader:我的博客主页www.cnblogs.com/geekygeek ...
- WebConfig配置 文件加密处理
webconfig 文件加密处理 前几日正好遇到配置文件加密解密的问题,简单记录下流程. 1.首先运行cmd然后打开Framework.cd C:\Windows\Microsoft.NET\Fr ...
- 合并BIN文件的两种方法(转)
源:http://blog.chinaunix.net/uid-20745340-id-1878803.html 合并BIN文件的两种方法 在单片机的开发过程中,经常需要将两个单独的BIN文件合并成一 ...
- 【记录】文件加密软件 Gilisoft File Lock Pro v11.0 中文注册版
---恢复内容开始--- GiliSoft File Lock Pro 是一款优秀的加密工具,用它可以隐藏或加密文件.文件夹.磁盘分区,而且被加密的文件不会因为被加密(忘记密码)而丢失,可算是很安全的 ...
- STM32学习笔记:【002】BIN文件通过ST-LINK烧录STM32芯片
以下提供2种下载方式 KEIL编译下载 KEIL 5 在开发中还算是比较强大的一种平台.在开发中通过编译再下载会显得很方便. 尽管这个是老生常谈的问题,但还是在这里补全这个设置步骤 1.点击“魔法棒” ...
随机推荐
- 网易Ubuntu镜像使用帮助(ubuntu15.10 修改源)
原文位置 以Wily(15.10)为例, 编辑/etc/apt/sources.list文件, 在文件最前面添加以下条目(操作前请做好相应备份) deb http://mirrors.163.com/ ...
- JVM 参数分配
http://stackoverflow.com/questions/41216388/java-jvm-parameter-xms-doesnt-take-effect-immediately It ...
- 一条SQL查询多个统计结果
例如以下情况,假如字段3是日期类型,按照小时分组统计字段1为空的个数,并对字段2大于5的值求和: SELECT SUM(CASE WHEN field1 IS NULL THEN 1 ELSE 0 E ...
- [2016.01.18]文本替换专家 v5.3
文本替换专家,界面简洁易用,功能强大实用.支持大小写匹配,支持多级目录.多行文本.多种文件格式的同时批量查找和批量替换.智能准确的区分ANSI.UTF-8(包括无BOM的UTF-8).Unicode. ...
- 服务 在初始化安装时发生异常:System.IO.FileNotFoundException: "file:///D:\testService"未能加载文件或程序集。系统找不到指定文件。
@echo.@if exist "%windir%\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe" goto INSTALL ...
- Managing a node remotely by using the netapp SP
Managing a node remotely by using the Service Processor The Service Processor (SP) is a remote manag ...
- NetApp常用检查命令
常用检查命令 ************************************* ******************************************************* ...
- hdu3294 girl‘s research
题目大意:有多组数据,每组数据给出一个字符和一个字符串.该字符将变成’a‘,表示字符串中的所有该字符将变成’a‘,同时其他字符也将做相同的偏移.具体来说,如果该字符为’b‘,表示字符串中的’b‘都将变 ...
- 为了体验 ILS 在Win2012R2 Hyper-V上安装Windows 2000 AdvSer
Win2012 R2 Hyper-V 的集成服务包已不支持Windows 2000 先安装SP4.IE6.更新汇总包,再来安装这个. 安装完成后,会有几个未知设备,直接禁用就可以了. 开启Window ...
- 通过开户银行账号查询客商名称 sql
select * from bd_cubasdoc where pk_cubasdoc in ( ') 查询空客商客户银行的单位名称 select b.custcode,b.custname, d.b ...