前言:编写不易,仅供学习,参考,请勿转载
前言:本篇教程是 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 Memory | 0x08000000 | 0x0800FFFF | 64KB |
System Memory (Bootloader) | 0x1FFFF000 | 0x1FFFF7FF | 2KB |
SRAM | 0x20000000 | 0x20004FFF | 20KB |
举例:读取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 开发环境中,程序加密通常指的是:
-
加密固件数据:将程序代码或数据在编译后进行加密,然后在运行时通过微控制器上的解密功能进行解密。这种加密通常是应用层级的,由用户在代码中实现。
-
加密算法的实现:用户需要在代码中实现加密算法,通常是对代码或数据进行加密,并在运行时通过解密功能解密这些数据。这可以通过使用加密库(如 AES、DES)或自定义加密算法实现。
使用 STM32CubeProgrammer 的限制
STM32CubeProgrammer 是用于配置 STM32 微控制器的编程工具,它支持对微控制器进行烧录、调试、以及设置硬件保护选项(如读保护、写保护),但它不支持解密通过代码层实现的固件加密。
STM32CubeProgrammer 能做的:
-
读取和写入 Flash:通过 STM32CubeProgrammer,你可以读取和写入 Flash 存储器中的数据,但如果数据在存储时已被加密,STM32CubeProgrammer 不能自动解密这些数据。
-
管理保护设置:你可以使用 STM32CubeProgrammer 设置或解除硬件保护(如读保护、写保护),这些操作通常不会影响应用层加密的内容,但会影响如何访问和修改 Flash 数据。
解除应用层加密
应用层加密(即在 Keil 中进行的加密)是由应用程序代码本身管理的。这种加密机制无法通过 STM32CubeProgrammer 直接解除。要解除应用层加密,你通常需要:
-
获取加密密钥:你需要在程序中嵌入用于解密的密钥。加密和解密的逻辑由你的应用代码实现。
-
编写解密逻辑:在代码中实现解密逻辑,以便在程序运行时解密 Flash 中存储的数据。
-
配置程序:确保加密和解密机制在程序启动时正确配置,以保证程序能够正常运行。
欢迎指正,希望对你,有所帮助!!!
给个三连吧,友友,求求了,都看到这里了,求求了。