当前位置: 首页 > news >正文

STM32程序的加密与破解以及烧录方法

STM32程序的加密与破解,以及烧录方法。

盗取他人的PCB和烧录文件,可以节省大大开发成本,何乐而不为呢。因此,就滋生了一些协助他人盗版的公司。为了防止被盗版和复制,单片机工程师也是煞费苦心,对硬件和软件均采取了防盗版措施。

1、硬件防盗措施

1)、对重要芯片实施打磨,擦除芯片的型号,重新印制自定义型号。这样,即使盗版者获取了PCB板,也无法采购生产。

2)、对元件实施灌胶,增加拆卸的难度。

3)、增加高频电感和电容多用分立元件伪装成高频电路,利用盗版者恐惧高频的心理,使其望而却步。

4)、故意用焊锡将某些引脚短接,伪装成生产问题,误导盗版者。

5)、结构防拆功能。市面上的电器插座,电器厂家为了防止维修,故意使用特制的螺丝,也是一种保护措施。

6)、使用多层板设计,采用盲孔和埋孔,增加其复制难度和复制成本。

7)、使用磁耦合电路,比如互感器之类的,利用盗版者不熟悉磁元件,也可以使他们放弃盗窃之动机。

8)、采用多种电源供电,尤其是分立元件的开关电源,也会让盗版者犯难。

盗取硬件的目的,通常是为了盗取原理图,分析其原理,但也有的是为了直接生产。硬件防盗措施,具有局限性,应采用软硬件相结合的方式,让盗版者无从下手。

2、软件防盗措施

1)、借助第3方工具加密。比如:CPU带有读保护功能,可以使用烧录器为烧录的程序设置读保护,防止烧录代码被读取。

2)、利用CPU的唯一ID进行软件加密。这种加密需要注意,不要在FLASH中出现该CPU的ID值,其次不要在FLASH中出现ID寄存器的地址。那么如何可以做到呢?读ID时,通过计算方式,得到ID寄存器的地址,让盗窃者,找不到加密的位置。其次,将读到的ID,通过算法保存到CPU的FLASH中,或是外部其它地方。主要是让盗窃者找不到,或者即使看到了,也不认识是什么东西,就行了。这一切都是在RAM中计算完成的,盗窃者很难看到RAM中的内容,所以就很难盗取代码了。

3)、让程序带系统运行,增加其跟踪的难度。很多盗窃者获取到HEX文件后,采用反汇编工具得到其汇编代码,通过debug办法,跟踪到加密位置,然后修改判断,跳过加密位置,就可以盗取生产代码了。如果程序带有系统,就不好定位加密位置了。

4)、巧用STM32自带的读保护函数FLASH_ReadOutProtection()。大多数软件工程师都会使用这个函数,增加代码的可保护性。启用CPU的读保护功能后,盗窃者无法获取源代码,就无法进行反汇编了。

5)、编写升级软件,防止生产者泄密。升级软件是用来对客户的程序进行升级更新。它可以绕过自己的读保护程序,对设备程序进行升级或更新,特别是在远程更新中,有利于防止代码泄密。没有升级软件的代码,要想实现读保护,只能靠烧录器添加读保护,但不能保证烧录程序的人不泄密。升级软件则不同,烧写程序的人,必须使用升级软件才能更新程序。即使他有了客户程序,离开升级软件的引导,程序没法工作。即使他能写升级程序,但是不知道程序的定位位置,也是无法启动客户程序。如果此时再增加唯一ID加密,就会更难破解。

第1次接触STM32,发现它有很多种烧录方式,觉得很奇怪。比如:JTAG接口烧录,SWD接口烧录,串口烧录等,还有就是可以自己编写Boot loader升级程序。现在看来,真是太好了。其实,这些方法都是为生产服务的。

总结,堡垒很容易从内部攻破,再好的盾牌,也难以防盗。

如何使用自己的Boot loader升级程序 呢?

最常用的办法,就是通过串口通讯。一个是上位机,它负责读取CPU内部的客户程序,通过串口发送给下位机。这个下位机带有Boot loader升级程序 ,它是由烧录器烧录的。上电后会判断是否烧录了客户程序,若没有,就会通过串口接收上位机的烧录数据,写到CPU的FLASH中。若已经烧录过客户程序,就会自动跳转到客户程序执行。上位机的客户程序是由烧录器按照指定的位置,烧录到CPU的FALSH中。上位机上电后,就会根据定义好握手协议,将烧录的客户程序发送给下位机。这种烧写方法,是一个创新。网上大多数是采用专用的串口软件来读取bin文件,实现起来有点难。我们不是全才,写个单片机程序,我们很拿手,烧录我们也会,为何不写Boot loader升级程序 和串口通讯来实现烧录呢,而且,还可以实现加密,何乐而不为呢。

由于涉及到保密,不能一一举例讲解实现和破解,只能写写方法,与大家交流。

相关文章:

  • 10分钟从零开始搭建机器人管理系统(飞算AI)
  • c++ 操作数组
  • 解决redis lettuce连接池经常出现连接拒绝(Connection refused)问题
  • 【DFS/回溯算法】2016年蓝桥杯真题之路径之谜详解
  • 面试高频考点:一文吃透并发Concurrency与并行Parallelism
  • GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks
  • 解锁MacOS开发:环境配置与应用开发全攻略
  • vue3(笔记)2.0 生命周期函数.父子通信.ref以及模块引用.跨层级通信.v-model(基于defineModel)
  • STM32-HAL库初始化时钟
  • leetcode第77题组合
  • 【Spring Boot 应用开发】-05 命令行参数
  • c语言、c++怎么将string类型数据转成int,怎么将int转成string
  • MySQL忽略大小写问题
  • 京东一面:为什么 IDEA 建议去掉 StringBuilder,而要使用 “+” 拼接字符串?
  • 前端怎么排查幽灵依赖
  • doris:Iceberg
  • python二级考试中会考到的第三方库
  • 【大模型LLM面试合集】分布式训练_张量并行
  • 视觉Transformer(ViT)解析:它们比CNN更好吗?
  • [python] 类
  • 广州做网站多少钱/seo常用工具
  • wordpress导航链接/长沙seo智优营家
  • 网站建设哪家好 万维科技/开鲁网站seo不用下载
  • 做presentation的网站/免费网站推广网站短视频
  • 做移动网站快速排/2024年3月新冠高峰
  • 申请做网站编辑组长的工作设想/南昌seo招聘信息