STM32 进阶教程 14 - 程序加密之FLASH读写保护

2023-11-18

前言

在嵌入式应用开发中,应用开发完成后往往需要对芯片中的程序进行加密处理,用以保护程序安全(不至被竞争对手从芯片把程序固件考走),本节将给大学介绍一个如何实现程序自动给芯片加密功能。学完本节内容,你也可以开发不容易初别人破解的程序了。

 

示例详解

基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。

 

 

本示例所用的最小系统板原理图:

 

    1. 关于CUBEMX工具及KEIL工具的操作将不再细讲,如果还有不熟悉的可以查看之前的教程文档。下面直接介绍工程配置:
      1. 系统时钟树

      1. 定时器配置

      1. 引脚配置

      1. 中断配置(保持默认)

 

 

    1. 工程代码

 

      1. 在main.c中加入如下代码

 

    1. 编译工程无错误后,下载程序,程序正常运行,LED灯正常闪烁(500ms交替亮灭),但是无法仿真了,说明flash读保护成功!!

用JFLASH配合JLINK工具来看看能否从芯片中读取固件,连接上MCU后按下图所示操作进行芯片固件读取(当然也可以用该工具对芯片进行加密):

提示读取失败,说明加密代码功能OK,起到保护芯片固件的作用。

接下来我们再回去看看不加密时的表现:

可以正常仿真:

也可以顺利从芯片中读取出固件:

OK,本期实验完成!下期见!同时如果大家有什么疑问或是有想了解的其它内容,也欢迎大家留言!!最后喜欢这个公众号的同学们记得加关注了,会有不定期技术干货推出!!

文中源码资料下载,在公众号里给十三发消息:

下载|STM32进阶教程 14

 

关注十三公众号

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 进阶教程 14 - 程序加密之FLASH读写保护 的相关文章

  • 单片机毕设 基于单片机的酒精浓度检测仪 - stm32 酒驾检测 酒精检测

    文章目录 0 简介 1 项目简介 2 系统设计 3 硬件设计 3 1 MQ 3 模块 3 2 GPRS模块 4 软件设计 4 1 GPRS模块使用 常用AT指令 4 1 1 数据收发demo 5 实现效果 5 最后 0 简介 Hi 大家好
  • 冷启动与热启动的定义

    在 Android 应用程序开发中 启动应用程序时 系统可以采用两种启动方式 冷启动和热启动 冷启动 Cold start 当应用程序从未启动过或者被系统杀死后再次启动时 就是冷启动 在冷启动时 应用程序的进程会被系统创建 应用程序需要重新
  • 100天精通Python(基础篇)——第9天:字符串拼接

    文章目录 拼接符号 代码示例 拼接符号 代码示例 print LCL 全世界 最帅 最有钱的 name lcl address 特斯拉总经理办公室 tel 8888888 print 我是 name 地址 address 电话 tel
  • 附录:kafka源码启动

    本文以源码2 8为例 准备如下 idea 2019 1 4 jdk 1 8 scala 2 12 8 gradle 6 8 1 zookeeper 3 4 10 kafka2 8源码 注意 以下安装都需要装在没有空格的路径上 比如D Pro
  • 分享一个selenium jar包 的下载地址,各版本都有,包括selenium-server-standalone.jar、selenium、selenium-server

    http selenium release storage googleapis com index html
  • 不懂代码也不用怕!10款无代码网站搭建平台

    作为设计师 对网站满脑子的构思 却受限于时间和技能 比如写代码 这是何其无奈 那个在你脑中盘桓许久的网站 或许是一个博客 可能是作品展示网站 但无论是哪种 想要让想法落地成形终究是一个艰巨的任务 今天为你推荐10款网站设计 开发工具能帮你改
  • Micropython驱动ST7735显示中文(中文字体库)

    大家是不是遇到显示中文就头大了 又是取模又是怎么的 但麻烦 太繁琐了 对确定的字符显示来说还可以 但不确定的内容时就麻烦了 所以 今天还是来讲讲干货了 来使用一个方便的方式来显示中文 不用取模 直接显示你想要的中英文字体 开始之前要说一下的
  • 戴尔服务器c系列,主打云计算市场 戴尔C系列服务器大盘点

    戴尔机架 R系列 塔式 T系列 和刀片 M系列 中采用至强5600处理器的服务器 其实 还有一个系列同样采用至强5600的处理器 它就是PowerEdge C 系列 这支系列是戴尔在2010年4月推出 是面向云计算平台的全新产品线 值得关注
  • 10种进阶方法让你快速测试端口连通性

    转载连接 介绍 Ping是Windows Linux和Unix系统下的一个检查网络连通性的命令工具 对于大部分互联网用户来说很实用 很方便 但是ping有个缺点 不能指定端口 如果源地址被设置禁ping 那么ping命令就形同虚设 为了弥补
  • Mysql教程(二):DDL学习

    Mysql教程 二 DDL学习 DDL Data Definition Language 数据定义语言 用来定义数据库对象 数据库 表 字段 1 DDL数据库操作 查询 查询所有数据库 SHOW DATABASES 查询当前数据库 SELE
  • 【华为OD】华为性格测试(综合测试)高分策略

    性格测试 综合测试 注意 1 性格测试非常重要 是一次否决制 18 个月有效期 所以态度一定要认真对待 不要随便乱选 2 做题原则 正向原则 积极乐观向上 3 时间为 25 30 分钟 会频繁出现重复选项重复出现的题目注意一致性 提示 1
  • 排列数组使得偶数在奇数的前面

    Name ReorderOddEven c Author 齐保元 Version Copyright Your copyright notice Description Hello World in C Ansi style include
  • 对js运算符“

    首先出个题 如图 假设对成长速度显示规定如下 成长速度为5显示1个箭头 成长速度为10显示2个箭头 成长速度为12显示3个箭头 成长速度为15显示4个箭头 其他都显示都显示0各箭头 用代码怎么实现 差一点的if else Js代码 var
  • 100天精通Python(基础篇)——第6天:标识符

    规则1 内容限定 限定只能使用 中文 英文 数字 下划线 注 不能以数字开头 规则2 大小写敏感 可以区分大小写 规则3 不可使用关键字 for while return等
  • (简单成功详细)CentOS 安装 node.js

    个人感觉比较好用的方法 目录 方法一 方法二 安装指定版本的nodejs并配置环境变量全局模块方法 方法一 1 安装yum sudo yum install epel release 2 安装nodejs sudo yum install
  • 我的2017年度技术回顾

    我为之前浪费的大把光阴后悔不已 如今正奋起直追 不知 为时可晚 较早是从事传统软件开发 主要以交付项目为主 后来慢慢转向互联网 属先知后觉那一类 一直从事Java软件研发管理工作 时下热门的小程序 大数据 人工智能 机器学习等接触很少 一方
  • volatile保证可见性,原理是什么

    VOLATILE 只保证可见性 Java多线程内存可见性 并不保证原子性 可见性 一个线程对共享变量的修改 更够及时的被其他线程看到 原子性 即不可再分了 不能分为多步操作 比如赋值或者return 比如 a 1 和 return a 这样
  • 使用本地Windows创建密钥连接GitHub时发现你的git根目录里没有.ssh文件夹怎么办?

    首先 你在桌面右击进入Git Bash 输入如下命令查看git配置中是否有自己的GitHub账号名和邮箱 git config list 一般你自己不设置是不会有的 那就自己在本地创建一个账号名和邮箱 引号中填写你的账号名 git conf

随机推荐

  • Python:Tornado框架之获取get和post的传参

    一 获取get方式传参 import tornado ioloop 导入tornado包 import tornado web class MainHandle tornado web RequestHandler def get self
  • number1(python)

    1抽 签 你的朋友提议玩一个游戏 将写有数字的 I个纸片放入口袋中 你可以从口袋中抽取 4 次纸 片 每次记下纸片上的数字后都将其放回口袋中 如果这 4 个数字的和是m 就是你赢 否 则就是你的朋友赢 你挑战了好几回 结果一次也没赢过 于是
  • 梦幻手游服务器维护摆摊公示时间,梦幻手游5月4日维护公告 摆摊交易优化

    亲爱的玩家朋友 为保证服务器的运行稳定和服务质量 梦幻西游 手游所有服务器将于2016年5月4日8 00停机 进行维护工作 预计维护时间为8 00 9 00 如果在预定时间内无法完成维护内容 开机时间也将继续顺延 请各位玩家相互转告 并提前
  • wm命令详解

    usage wm subcommand options wm size reset WxH WdpxHdp wm density reset DENSITY wm overscan reset LEFT TOP RIGHT BOTTOM w
  • Ubuntu操作系统学习笔记之安装和配置Apache2

    在Ubuntu中安装apache 安装指令 sudo apt get install apache2 安装结束后 产生的启动和停止文件是 etc init d apache2 启动 sudo apache2ctl k start 停止 su
  • C++的sort函数对于vector排序

    对于vector
  • llvm 介绍有用的网站

    LLVM笔记 7 指令的side effect LLVM笔记 7 指令的side effect Five100Miles 博客园 LLVM每日谈之十八 GEP Instruction的几点总结 LLVM每日谈之十八 GEP Instruct
  • 用docker搭建公司内部的gitlab 和 wiki

    docker run name gitlab d link gitlab postgresql postgresql link gitlab redis redisio publish 10022 22 publish 10080 80 e
  • 使用jasypt为springboot配置文件加密

    使用jasypt为配置文件加密 配置项明文可能出现的问题 先看一份典型的配置文件 配置MySQL数据库连接 spring datasource driver class name com mysql jdbc Driver spring d
  • 【为什么】C++中的#pragma once是干什么,和#include guard区别

    一 pragma once是C和C 编程语言中的一个非标准但广泛支持的预处理指令 用于使当前源文件在单次编译中只被包含一次 它与 include guards有相同的作用 但有一些优点 如 代码更少 避免名称冲突 有时可以提高编译速度 代码
  • Nim游戏

    Nim游戏 一共有N堆石子 编号从1到N 第i堆中有a i 个石子 有A和B两个人 依次拿石子 每次可以从任意堆中拿任意数量的石子 至少拿一颗 至多拿着一堆剩下的所有石子 两个人轮流行动 取光所有石子的一方获胜 最后一次拿石子的那一人获胜
  • Go语言切片详解

    文章一 Go语言切片基础 文章二 Go语言切片详解 文章三 Go Go 语言切片 Slice 文章四 Go基础 数组和切片 一个固定长度一个可变长度 文章五 Go语言自学系列 golang切片的初始化 文章六 go语言切片详解 初始化 扩容
  • 通用技术 关于线上监控的思考总结

    前言 近期和大佬们对规划 梳理新财年要做的事情 有非常重要的一项就是线上监控 对于线上监控 大家都最熟悉不过 凡是在生产环境上运行的系统 或多或少都会有监控 但是否有思考过哪些监控是有效的 监控的目的是什么 监控告警出来之后又是怎么的一轮操
  • C实现Unix时间戳和本地时间转化

    我们平常说时间都说的几点几分几秒 星期几 但是在计算机里面并不是直接使用我们所说的时间 而是使用Unix时间戳 这样不管是哪个平台 哪个系统 都可以根据自己对时间的定义进行转换 像Java PHP等都提供了接口来进行转化 C库里面也有这样的
  • MQ如何保证消息不丢失?

    MQ如何保证消息不丢失要从三个方面来考虑 1 生产者 生产者要确保消息投递到MQ服务端 可以使用手动ACK 消息确认机制 认为消息持久化到硬盘 才能够认为生产者投递成功 2 MQ服务端 需要将消息持久化到硬盘 3 消费者 消费者要确保消息消
  • 报错解决:A server error occurred. Please contact the administrator /gbk 9737

    简介 HTML网页显示如题报错 对应python终端显示的是如下错误 解决办法 1 打开报错显示的views debug py 找到如下代码 我这个是已经修改过的 只要找到这段就行 在open 中加入encoding utf 8 如下图 编
  • Linux 下Qt应用程序打包发布方法及踩过的坑

    写这篇文章主要是记录一下自己遇到的问题及解决办法 希望对遇到相同问题的你有所帮助 目的 我需要编写一份可以在服务器上运行的Qt代码 即需要在linux环境下将Qt应用程序打包将其放在服务器上运行 环境 服务器上ubantu版本20 04 1
  • C++中的Date类(日期类)

    C 中Date类用的比较多 所以通过查找参考 自己写了一个比较全面的Date类 直接上代码 头文件 h ifndef DATE H INCLUDED define DATE H INCLUDED include
  • Acticiti中startProcessInstanceByKey方法在variable表中的如何存储

    Acticiti中startProcessInstanceByKey方法在variable表中的如何存储 已知 在使用runtimeService startProcessInstanceByKey String processDefini
  • STM32 进阶教程 14 - 程序加密之FLASH读写保护

    前言 在嵌入式应用开发中 应用开发完成后往往需要对芯片中的程序进行加密处理 用以保护程序安全 不至被竞争对手从芯片把程序固件考走 本节将给大学介绍一个如何实现程序自动给芯片加密功能 学完本节内容 你也可以开发不容易初别人破解的程序了 示例详