首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过OpenOCD实现STM32读出保护

通过OpenOCD实现STM32读出保护
EN

Stack Overflow用户
提问于 2015-09-11 02:59:49
回答 2查看 15.2K关注 0票数 10

STM32系列微控制器具有读出保护功能,因此专有代码无法通过调试接口(JTAG或SWD)读出。

使用OpenOCD时,如何通过SWD/JTAG接口启用/禁用读出保护?RDP读出保护的安全性如何?

如果可能,请给出适用于整个STM32系列的答案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-11 02:59:49

RDP级别

首先,您必须知道要设置的读出保护级别(例如,参考STM32F4 reference manual的3.7.3节):

  • RDP1级:此级别是可逆的。一旦将其禁用,系统内存将被批量擦除,您可以对
  • RDP level 2进行重新编程:此级别是不可逆的,会完全禁用调试接口。更新固件的唯一方法是通过某种引导加载程序机制。

通常您想要激活RDP级别1。为了避免肯定会对微控制器造成影响的错误,我不会在此答案中说明如何启用RDP级别2。请参阅参考手册了解详细信息。

使用OpenOCD激活它

激活功能实际上是使用lock命令内置到OpenOCD中的。就像执行program命令来刷新固件一样,您可以使用stm32f1x lock命令(对于STM32F2/F4,使用stm32f2x lock )来激活它。

典型的OpenOCD配置文件如下所示(在运行此配置文件之前,您需要刷新正确的固件):

代码语言:javascript
复制
# Set RDP to level 1
init
reset halt
stm32f1x lock 0
reset halt
exit

请注意,只有在微控制器复位或断电时,读出保护才会生效(这就是命令序列中有第二次复位的原因)。

典型的OpenOCD调用可能如下所示:

代码语言:javascript
复制
openocd -d0  -f stlink-v2.cfg -f ocd-stm32f0.cfg -f ocd-lock.cfg

其中ocd-lock.cfg包含上面所示的命令序列。

激活后,您可以通过尝试使用通常的编程命令序列刷新MCU来验证RDP是否处于活动状态

停用RDP

停用它也很简单:只需使用stm32f1x unlock (或F2/F4设备的stm32f2x unlock ),如下所示:

代码语言:javascript
复制
# Set RDP to level 0
init
reset halt
stm32f1x unlock 0
reset halt
exit

它有多安全?

这是一个很难回答的问题,如果没有额外的信息就不能真正回答。我可以给出的一个总结答案是,如果你假设保护没有固有的bug,并且有人只使用软件工具,那么它是相当安全的。

要在不大量擦除闪存的情况下重置RDP位,最流行的方法之一是disable the RDP with a laser。鉴于STM32系列不是具有特定对策的专用安全微控制器系列,如果您在该领域拥有正确的设备和足够的经验,这将是相当容易的。甚至一些特定的安全MCU也有一些安全问题,参见Security from the IC backside talk。然而,大多数低级攻击者通常会避免这样做的成本。

票数 23
EN

Stack Overflow用户

发布于 2019-12-25 06:09:16

另一种解决方案是将Segger Jlink 6.60c (或更高版本,如果可用)与J-Link unlock STM32软件一起使用。只需运行它,它将通知以下内容:“如果启用了设备的读保护,重置选项字节将导致批量擦除”。单击OK。它将要求提供设备系列。输入设备系列(对于STM32L4R9ZI,我的选择是12 ),然后按Enter。

如果一切正常,输出将如下所示:

代码语言:javascript
复制
Please select the correct device family: 12
Connecting to J-Link via USB...O.K.
Using SWD as target interface.
Target interface speed: 1000 kHz.
VTarget = 3.396V
Reset target...O.K.
Reset option bytes to factory settings...
Resetting FLASH_OPTR...
Reset target...O.K.
Reset target...O.K.
Resetting Write protection (WRP) and PCROP...O.K.
Reset target...O.K.
Option bytes reset to factory settings.
Press any key to exit.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32509747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档