博客最细 STM32CubeProgrammer 软件使用教程 二(学不会举报我)

news2024/9/20 15:06:13

                                       前言:编写不易,仅供学习,参考,请勿转载

        前言:本篇教程是 STM32CubeProgrammer 软件使用教程二,通过本篇你可以学习到,使用STM32CubeProgrammer读取  flash  RAM开启读写保护程序的功能,在看本篇前建议先看教程一。

#读flashRAM读写保护程序有什么用

        为什么要读flash  RAM  ?flash程序烧录位置,RAM程序运行过程中,变量数值存放位置,工程没有 保护  加密  通过支持接口(JTAG  SWD)可以进行逆向工程,得到程序,用来学习研究,读RAM可以得到里面的实时数据。

        商用源码不想被逆向怎么办?读写保护,程序加密(flash 加密  ID加密),防止对手进行逆向出程序,进行研究,而本篇教程通过 STM32CubeProgrammer 完成读flash  RAM  内容  开启读写保护   程序加密功能。

#读取flash  RAM实验

实验套件:STM32F103最小系统板,ST-linker  

#实验过程操作

安装 STM32CubeProgrammer: 从官网链接下载,并且安装,完成之后使用管理员方式打开运行这个软件。

STM32CubeProg - STM32CubeProgrammer software for all STM32 - STMicroelectronics

连接设备:通过 ST-Link将 STM32 微控制器与计算机连接。确保连接正常,并且 STM32CubeProgrammer能够识别到,同时点击连接设备。

                    

        这里完成连接之后,在 点击"Memory & File Edition" 这选项卡里面,默认选项里面就能看到地址,还有地址对应的内容,STM32  32位单片机  换算内存大小4个G  这些容量,被分为不同的地址总线,用来存储各种内容。

        这个软件是通过  flash  RAM  的地址来读取的,不同单片机flash  RAM  容量大小不同,但是起始地址都是一样的。

内存区域起始地址结束地址大小
Flash Memory0x080000000x0800FFFF64KB 
System Memory (Bootloader)0x1FFFF0000x1FFFF7FF2KB
SRAM0x200000000x20004FFF20KB 

        

       举例:读取STM32F103C8t6中 RAM地址 输入起始地址  0x20000000  读0x5000位这么多,也就是RAM整个的大小,然后点击开始读,就能读出来了。

如果你要读flash,都一样,变一下起始地址,还有读多少就行了,然后点一下开始读的选项,就能把数据读出来,同时可以将数据以bin文件或者hex文件进行保存。

                   

如果需要保存读的数据,换一下右边的选项为 Save AS....,然后点一下就能保存这些数据了,很强大的功能,有啥说啥。

        到这里小伙伴们,应该了解了读 flash RAM  的过程还有怎么去操作。

#STM32CubeProgrammer读保护功能

        上面演示了读flash RAM里面的数据,如果想让自己的程序防止未经授权的读取和篡改,同样的,也就是不让别人读flash  RAM 里面的内容,同样可以通过这个软件配置,这里配置读保护是由等级设置的。

              Level 1:启用基本的读保护,防止外部工具读取 Flash 内容。        

              Level 2:启用更高级别的读保护,进一步增强安全性,但此状态下不能通过外部接口进行任何读取或擦除操作,除非进行全芯片擦除。

        这里Level2等级的应用操作,一旦使用过后,只能通过全芯片的,擦除来解除,当擦除芯片的全部时,会导致程序还有数据全部丢失,Level1 等级读保护本身并不会导致程序丢失,通常应用Level1等级的读保护,足够满足对应的要求

        但是友友们,这个等级只有STMF4有,本次教学的STMF1只有,应用跟不应用读保护,解除之后,全部擦除数据。

        上面图就是STMF4的读保护应用介绍,给大家看看。AA  BB  CC每个选项就是不同的等级,友友们。

#操作过程

        这里使用STM32F103c8t6最小系统板,给大家写文档啊,这里使用读保护并且解除读保护进行演示,首先读一下flash里面是有数据的,这里写保护之前可以看一下,这里数据是正常的。

              下面进行写保护应用,然后读取时读不出来数据的,然后解除读保护,这个时候,芯片丢失全部数据,没有办法执行正常的功能。

        应用之后,这个时候,友友们去读flash里面的内容是读不出来的,这里提示的是 Error:Data

read faild  读不出来任何数据的。

        这里就上了读保护,然后解除一下,读保护,就能读了,但是会丢失全部的数据,跟程序,板子,这样就起到了读保护的作用。

        上面解除读保护之后,这里读一下flash里面的内容,大家可以看一下,全部都被擦掉了,接触读保护之后。

#STM32CubeProgrammer写保护功能

        这个功能是用于保护微控制器(MCU)的 Flash 存储区,防止未经授权的写操作,从而确保固件和数据的完整性。说人话就是,开启这个功能,你就不能使用ST-linker进行烧录程序了,只有解除写保护,单片机才能烧录程序

        在 "Option Bytes" 界面中,找到 "Write Protection" 选项。选择要保护的 Flash 扇区。STM32 的 Flash 通常分为多个扇区,可以选择要保护的扇区范围。 设置完成后,点击 "Apply" 按钮应用配置。这里如果不知道保护那个扇区,就全选就好了。

                        

        这里不打钩才能有效,友友们,不要搞错了。

              

        这里应用之后,咱们去跑去KEIL5里面下载程序,友友们,这里提示flash下载失败,也就是写保护应用成功了,这里ST-Linker连接显示是正常的,可以看一下,解除读保护之后,程序并不会被擦除掉。

        这里避免浪费友友们的时间,就不演示怎么解除了,还是这个页面,然后全部勾选,在应用,就能正产下载程序了。

#STM32CubeProgrammer程序加密功能

在 STM32 微控制器中,通过代码进行程序加密的机制通常涉及将程序数据加密存储在 Flash 中,确保在运行时这些数据会被解密并用于执行。然而,这种加密通常是自定义实现的,与硬件级别的读保护(Read Out Protection, RDP)和写保护不同

在 Keil MDK-ARM 中进行程序加密

在 Keil MDK-ARM 开发环境中,程序加密通常指的是:

  1. 加密固件数据将程序代码或数据在编译后进行加密,然后在运行时通过微控制器上的解密功能进行解密。这种加密通常是应用层级的,由用户在代码中实现

  2. 加密算法的实现用户需要在代码中实现加密算法,通常是对代码或数据进行加密,并在运行时通过解密功能解密这些数据。这可以通过使用加密库(如 AES、DES)或自定义加密算法实现。

使用 STM32CubeProgrammer 的限制

STM32CubeProgrammer 是用于配置 STM32 微控制器的编程工具,它支持对微控制器进行烧录、调试、以及设置硬件保护选项(如读保护、写保护),但它不支持解密通过代码层实现的固件加密

STM32CubeProgrammer 能做的:
  1. 读取和写入 Flash通过 STM32CubeProgrammer,你可以读取和写入 Flash 存储器中的数据,但如果数据在存储时已被加密,STM32CubeProgrammer 不能自动解密这些数据

  2. 管理保护设置你可以使用 STM32CubeProgrammer 设置或解除硬件保护(如读保护、写保护),这些操作通常不会影响应用层加密的内容,但会影响如何访问和修改 Flash 数据。

解除应用层加密

应用层加密(即在 Keil 中进行的加密)是由应用程序代码本身管理的。这种加密机制无法通过 STM32CubeProgrammer 直接解除。要解除应用层加密,你通常需要:

  1. 获取加密密钥你需要在程序中嵌入用于解密的密钥。加密和解密的逻辑由你的应用代码实现。

  2. 编写解密逻辑在代码中实现解密逻辑,以便在程序运行时解密 Flash 中存储的数据。

  3. 配置程序确保加密和解密机制在程序启动时正确配置,以保证程序能够正常运行。

                                欢迎指正,希望对你,有所帮助!!!

给个三连吧,友友,求求了,都看到这里了,求求了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1936084.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

科普文:TaobaoVM信息收集

网上关于TaobaoVM的信息很少,只有一个简介,就没有其他信息。毕竟这是别人企业自己的jvm,不可能公开。 Taobao VM 由AliJVM团队发布。阿里,国内使用Java最强大的公司,覆盖云计算、金融、物流、电商等众多领域&#xf…

Python和C++行人轨迹预推算和空间机器人多传感融合双图算法模型

🎯要点 🎯双图神经网络模型:最大后验推理和线性纠错码解码器 | 🎯重复结构和过约束问题超图推理模型 | 🎯无向图模型变量概率计算、和积消息传播图结构计算、隐马尔可夫模型图结构计算、矩阵图结构计算、图结构学习 |…

数据库MySQL学习第一天|了解数据库、数据类型、存储引擎、sql语言

文章目录 了解数据库什么是数据库数据库分类MySQL概念 数据类型整数类型小数类型日期类型文本,二进制类型 存储引擎种类引擎选择 sql主键和外键主键设计原则选取策略 外键索引 表与表的关联在语法上关联关系sql约束sql注入聚合函数常见查询关键字 了解数据库 什么是数据库 概…

网络安全协议系列

目录 一、安全协议的引入 1.TCP/IP协议族中普通协议的安全缺陷 1.信息泄露 2.信息篡改 3.身份伪装 4.行为否认 2.网络安全需求 二、网络安全协议的定义 三、构建网络安全协议所需的组件 1.加密与解密 2.消息摘要 3.消息验证码 4.数字签名 5.密钥管理 1.建立共享…

关于C#多个文本框输入的问题

🏆本文收录于《CSDN问答解答》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&…

堆排序基本思想以及代码实现

1、基本思想 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(n*logn),它也是不稳定排序。 堆是具有以下性质的完全二叉树:每个结点的值都大于或…

Vue3路由如何携带 # 路由模式选择

vue3中创建路由的时候,有两种可选模型 hash模式、HTML5模式、服务端渲染模式 createWebHashHistory(hash模式) const router createRouter({// hash模式,带 # 号history: createWebHashHistory(), //函数可携带参数,…

C++11 容器emplace方法刨析

如果是直接插入对象 push_back()和emplace_back()没有区别但如果直接传入构造函数所需参数&#xff0c;emplace_back()会直接在容器底层构造对象&#xff0c;省去了调用拷贝构造或者移动构造的过程 class Test { public:Test(int a){cout<<"Test(int)"<<…

使用Web控制端和轻量级客户端构建的开放Web应用防火墙(OpenWAF)

目录 1. 简介2. 项目结构3. Web控制端3.1. 功能概述3.2. 审计&#xff08;攻击&#xff09;日志查看3.3. 多个WAF的集中监控和操作3.4. 使用socket进行封装3.5. 日志的高效存储和检索&#xff08;Redis&#xff09; 4. 轻量级客户端4.1. 功能概述4.2. 对Web程序的防护4.3. 网络…

36.UART(通用异步收发传输器)-RS232(3)

&#xff08;1&#xff09;串口发送模块visio视图&#xff1a; &#xff08;2&#xff09;串口发送模块Verilog代码: /* 常见波特率&#xff1a; 4800、9600、14400、115200 在系统时钟为50MHz时&#xff0c;对应计数为&#xff1a; (1/4800) * 10^9 /20 -1 10416 …

鸿蒙语言基础类库:【@system.vibrator (振动)】

振动 说明&#xff1a; 本模块首批接口从API version 4开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。从API Version 8开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口[ohos.vibrator]。该功能使用需要对应硬件支持&#xff0c;仅支持…

学生信息管理系统-优化版

springbootthymeleafmybatis 记录一下闲来无事&#xff0c;将之前做的1.0页面优化。 一、【管理员】首页 1、增加了【批量删除】、【导出学生信息】、【分页】、【统计及格率、平均分、优秀率】等功能。 2、将页面样式优化了一下&#xff0c;做的好看些 原来&#xff1a; 现…

.NET C# 配置 Options

.NET C# 配置 Options 使用 options 模式可以带来许多好处&#xff0c;包括清晰的配置管理、类型安全、易于测试和灵活性。但在使用过程中&#xff0c;也需要注意配置复杂性、性能开销和依赖框架等问题。通过合理设计和使用&#xff0c;可以充分发挥 options 模式的优势&#…

【链表】算法题(二) ----- 力扣/牛客

一、链表的回文结构 思路&#xff1a; 找到链表的中间节点&#xff0c;然后逆置链表的后半部分&#xff0c;再一一遍历链表的前半部分和后半部分&#xff0c;判断是是否为回文结构。 快慢指针找到链表的中间节点 slow指针指向的就是中间节点 逆置链表后半部分 逆置链表后半部分…

【JavaScript 算法】图的遍历:理解图的结构

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、深度优先搜索&#xff08;DFS&#xff09;深度优先搜索的步骤深度优先搜索的JavaScript实现 二、广度优先搜索&#xff08;BFS&#xff09;广度优先搜索的步骤 三、应用场景四、总结 图的遍历是图论中的基本操作之一&am…

安卓 mvp 的架构的详细介绍

MVP 架构介绍 MVP&#xff08;Model-View-Presenter&#xff09;是一种软件架构模式&#xff0c;常用于构建用户界面&#xff08;UI&#xff09;。它将应用程序的逻辑划分为三个部分&#xff1a;Model、View 和 Presenter。MVP 的主要目标是分离视图和业务逻辑&#xff0c;使代…

ECU通讯:CAN总线仿真测试

01.ECU 在软件定义汽车的大背景下&#xff0c;几乎每一个汽车功能都需要依靠ECU&#xff08;Electronic Control Unit&#xff0c;电子控制单元&#xff09;来实现&#xff1a;有些功能靠ECU独立实现&#xff0c;有些功能则需要多个ECU联合实现。总体来说&#xff0c;ECU绝大多…

解决SonarQube中Vue项目中deep选择器报错的问题

1. 前言 当使用SonarQube对Vue项目进行代码质量审查时&#xff0c;可能会遭遇因Vue特有的deep选择器&#xff08;旨在实现样式深度穿透&#xff09;而触发的错误或警告。由于SonarQube默认并不识别这一Vue特有的语法&#xff0c;这些错误报告可能会成为审查过程中的干扰项。为了…

Mysql sql技巧与优化

1、解决mysql同时更新、查询问题 2、控制查询优化 hint 3、 优化 特定类型的查 优化 COUNT() 查询 使用 近似值 业务能接受近似值的话&#xff0c;使用explain拿到近似值 优化关联查询 优化子查询 4、优化group by和distinct 优化GROUP BY WITH ROLLUP 5、优化 limit分页 其他…

【MySQL-19】一文带你了解存储函数

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…