找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1616|回复: 12
打印 上一主题 下一主题
收起左侧

32位单片机,固件有没有加密和限制烧录次数的办法

  [复制链接]
跳转到指定楼层
楼主
客户离的远,上门调试不方便,客户希望自己调试。固件要给到客户,有没有什么限制客户使用这个固件烧录次数的办法。

加密应该需要做个定制的软件,我们这边用软件对固件进行加密,发给客户,客户那边导入软件后自动解密,解密后内容对客户不可见。

但是限制烧录次数怎么弄呢,是不是还得定制个烧录器。。。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123289 发表于 2023-9-8 17:05 | 只看该作者
只要是软件给到客户,保密方式就不必了。
即使用你的想法实现了。
客户也可以用其它硬件做。
回复

使用道具 举报

板凳
ID:1085441 发表于 2023-9-8 21:48 | 只看该作者
如果是STC单片机,可以用发布下载程序(加ID号),这样每次的升级程序,只能给对应序列号的MCU下载升级。

111.png (55.07 KB, 下载次数: 41)

111.png
回复

使用道具 举报

地板
ID:77589 发表于 2023-9-12 15:23 | 只看该作者
想法不错,希望能看到最终解决方法!顶!!!!!!!
回复

使用道具 举报

5#
ID:69038 发表于 2023-9-12 15:54 | 只看该作者
你这个方法很难实现,
这几个是比较常用的做法:
1、做一个调试软件,可以调整固件运行时的主要参数、指标==,然后把这些值返回方案商,再固化到新的固件中,下载到芯片,再寄到客户手中替换旧芯片。。如果换芯片有困难,只能寄机器回来更换。
2、要不就是用硬件ID的方法,一一对应升级固件。----你要记录每一个售出的芯片ID
3、还有就是做一个临时的下载器,设好下载次数寄给客户。----如果有心,读下载口的数据,固件一样会漏出。

但貌似都不是好方法。最好的方法是能寄机器回来。
回复

使用道具 举报

6#
ID:1088185 发表于 2023-9-12 16:28 | 只看该作者
做个解密+IAP的固件,第一次给的芯片是烧录好后通过快递给客人的, 之后就可以通过网络把加密了的更新代码发给客人更新。
回复

使用道具 举报

7#
ID:190832 发表于 2023-9-12 18:09 | 只看该作者
1600277881 发表于 2023-9-12 16:28
做个解密+IAP的固件,第一次给的芯片是烧录好后通过快递给客人的, 之后就可以通过网络把加密了的更新代码 ...

正解,BOOT部分负责解密,用户拿不到BOOT程序只拿到加密的APP部分没用。
回复

使用道具 举报

8#
ID:146878 发表于 2023-9-17 23:37 | 只看该作者
因为不擅长做PC软件,最终还是用bin文件加密的方式加自制烧录器的方式解决。可以电脑简单的写个bin
文件加密算法,让后编译生成后调用。加密的bin文件包含烧录次数限制信息,烧录器做成可以虚拟u盘,客户直接拖进我给的加密文件进行烧录就行。
回复

使用道具 举报

9#
ID:744809 发表于 2023-9-18 08:43 | 只看该作者
1600277881 发表于 2023-9-12 16:28
做个解密+IAP的固件,第一次给的芯片是烧录好后通过快递给客人的, 之后就可以通过网络把加密了的更新代码 ...

我目前就是这么实现的,可单独设定设备可更新的版本,方便管理
回复

使用道具 举报

10#
ID:1065084 发表于 2023-9-18 09:28 | 只看该作者
有人回答对了,但是不全面。bootloder负责控制烧录次数和固件检查  ,但是假如我写一个读取你bootloder文件并发送到串口的代码阁下将如何应对呢?  所以bootloder里面要有基本环境验证和代码验证。 基本流程大致如下  1.bootloder首先检查自身代码完整性,比如在代码预留一个位置存储代码的crc,写好之后计算crc之后进行对比  2.固件写入,通信时将固件解包,并写入到产品中,但此时并不运行  3.固件验证,对固件完整性进行检查  4.恶意代码检查,对于MOVC指令重点检查,防止其越界工作  5 固件运行  注意,我这里仅仅简单提到了而已,并没有详细说,每一个步骤的代码和思考量并不少
回复

使用道具 举报

11#
ID:72649 发表于 2023-9-18 21:58 来自手机 | 只看该作者
九齐单片机可以限制次数
回复

使用道具 举报

12#
ID:1085085 发表于 2023-9-19 09:52 | 只看该作者
程序加密后传输 + 发布项目程序 + USB直接下载远程升级
===让你的客人在远方自己升级更新程序,而拿不到你的源程序,达到控制次数的目




5.3.2  程序加密后传输(防烧录时串口被监控被分析出程序
目前,所有的普通串口下载烧录编程或升级程序都是采用明码通信的(电脑和目标芯片通信时,或脱机下载板和目标芯片通信时),
问题:如果烧录环节烧录人员/或买通烧录人员的第三方通过分析下载烧录编程时串口通信的数据,高手是可以在烧录时在串口
上引2根线出来,通过分析串口通信的数据分析出实际的用户程序原始的目标代码的。
当然用STC的脱机下载板烧程序总比用电脑烧录程序强 !防止烧录人员将程序轻易从电脑盗走,如通过网络发走,如通过U盘烤走,
防不胜防,当然盗走你的电脑那就没办法那 !所以STC的脱机下载工具比电脑烧录安全,让前台文员烧录,让司机保安烧录都可以。

即使是STC全球首创的脱机下载工具要防止【不法分子在脱机烧录的过程中,通过分析串口通信数据获得实际的用户程序目标代码】
也是没有办法达到要求的,这就需要用到最新的 STC8/STC32 系列单片机所提供的程序加密后传输下载功能

程序加密后传输下载是:用户先通过新版STC-ISP V6.91Q或以上的STC-ISP软件帮你自己自动生成一套你的专用加密密钥对你的程序
进行加密,然后将加密后的代码再通过串口下载,此时下载传输的是加密文件,通过串口分析出来的是加密后的乱码,如不通过派人潜
入你公司盗窃你电脑里面的加密密钥,就无任何价值,便可起到防止在烧录程序时被烧录人员或你要防范的第三方买通你的烧录人员,
在烧录时通过 监测 [P3.0,P3.1] 串口分析出目标代码的途径。

程序加密后传输功能的使用需要如下的几个步骤:
1、生成并保存新的密钥
如下图,进入到“程序加密后传输”页面,点击“生成新密钥”按钮,即可在缓冲区显示新生成的256字节的密钥。然后点击
“保存密钥”按钮,即可将生成的新密钥保存为以“.K”为扩展名的的密钥文件(注意:这个密钥文件一定要保存好,以后
发布的代码文件都需要使用这个密钥加密,而且这个密钥的生成是非重复的,即任何时候都不可能生成两个完全相同的密钥,
所以一旦密钥文件丢失将无法重新获得)。例如我们将密钥保存为“New.k”。


2、对代码文件加密
加密文件前,需要先打开我们自己的密钥。若缓冲区中存放的已经是我们的密钥,则不要再打开。如下图,在“程序加密后传输”
页面中点击“打开密钥”按钮,打开我们之前保存的密钥文件,例如“New.k”,然后返回到“程序加密后传输”页面中点击“加密代码”
按钮,如下图所示,首先会弹出“打开源文件(未加密)”的对话框,此时选择的是原始的未加密的代码文件

点击打开按钮后,马上有会弹出一个类似的对话框,但此时是对加密后的文件进行保存的对话框。
如下图所示,点击保存按钮即可保存加密后的文件。



3、将用户密钥更新到目标芯片中
更新密钥前,需要先打开我们自己的密钥。若缓冲区中存放的已经是我们的密钥,则不要再打开。如下图,
在“自定义加密下载”页面中点击“打开密钥”按钮,打开我们之前保存的密钥文件,例如“New.k”。密钥打
开后,如下图所示,勾选上“下载用户代码前先更新用户密钥”选项和“本次下载的代码为加密代码”的选项,
然后打开我们之前加密过后的文件,打开后点击界面左下角的“下载/编程”按钮,按正常方式对目标芯片
下载完成即可更新用户密钥。


4、加密更新用户代码
密钥更新成功后,目标芯片便具有接收加密代码并还原的功能。此时若需要再次升级/更新代码,则只需要
参考第二步的方法,将目标代码进行加密,然后如下图

对于一片新的STC单片机,可将步骤3和步骤4合并完成,即将密钥更新到目标单片机的同时也可将加密后的代码
一并下载到单片机中,若已经执行过步骤3(即已经将密钥更新到目标芯片中了),则后续的代码更新就只需要
按照步骤4,只需要在“程序加密后传输”页面中选择“本次下载的代码为加密代码”的选项(“下载用户代码前先更新
用户密钥”选项不需要选了),然后打开我们之前加过密后的文件,打开后点击界面左下角的“下载/编程”按钮,
按正常方式对目标芯片下载即可完成用用户自己专用的加密文件更新用户代码的目的
(防止在烧录程序时被烧录人员通过监测串口分析出代码的目的)。
5.3.1      发布项目程序
发布项目程序功能主要是将用户的程序代码与相关的选项设置打包成为一个可以直接对目标芯片进行下载编程的用户自己界面的超级简单的可执行文件
关于界面,用户可以自己进行定制(用户可以自行修改发布项目程序的标题、按钮名称以及帮助信息),同时用户还可以指定目标电脑的硬盘号和目标
芯片的ID号,指定目标电脑的硬盘号后,便可以控制发布应用程序只能在指定的电脑上运行(防止烧录人员将程序轻易从电脑盗走,如通过网络发走,如
通过U盘烤走,防不胜防,当然盗走你的电脑那就没办法那,所以STC的脱机下载工具比电脑烧录安全,能限制可烧录芯片数量,让前台文员烧,让老板娘
烧都可以),拷贝到其它电脑,应用程序不能运行。同样的,当指定了目标芯片的ID号后,那么用户代码只能下载到具有相应ID号的目标芯片中
(对于一台设备要卖几千万的产品特别有用---坦克,可以发给客户自己升级,不需冒着生命危险跑到战火纷飞的伊拉克升级软件啦),对于ID号不一致的
其它芯片,不能进行下载编程。
发布项目程序详细的操作步骤如下:
1、首先选择目标芯片的型号
2、打开程序代码文件
3、设置好相应的硬件选项

4、试烧一下芯片,并记下目标芯片的ID号,如下图所示,该芯片的ID号即为“F784C000001364”
(如不需要对目标芯片的ID号进行校验,可跳过此步)

5、设置自动增量(如不需要自动增量,可跳过此步

6、设置RS485控制信息(如不需要RS485控制,可跳过此步)

7、点击界面上的“读取本机硬盘号”按钮,并记下目标电脑的硬盘号
(如不需要对目标电脑的硬盘号进行校验,可跳过此步)

8、点击“发布项目程序”按钮,进入发布应用程序的设置界面。
9、根据各自的需要,修改发布软件的标题、下载按钮的名称、重复下载按钮的名称、自动增量的名称以及帮助信息
10、若需要校验目标电脑的硬盘号,则需要勾选上“校验硬盘号”,并在后面的文本框内输入前面所记下的目标电脑的硬盘号
11、若需要校验目标芯片的ID号,则需要勾选上“校验芯片ID号”,并在后面的文本框内输入前面所记下的目标芯片的ID号

12、最后点击发布按钮,将项目发布程序保存,即可得到相应的可执行文件。
发布的项目程序打界面如下图

========如下梦幻的效果===================================


回复

使用道具 举报

13#
ID:1083996 发表于 2023-9-20 18:08 | 只看该作者
对于内行来说,开源的东西,加密是不存在的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表