gpt4 book ai didi

embedded - 通过 OpenOCD 的 STM32 读出保护

转载 作者:行者123 更新时间:2023-12-04 09:59:06 29 4
gpt4 key购买 nike

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

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

如果可能,请给出一个对整个 STM32 系列都有效的答案。

最佳答案

RDP 级别

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

  • RDP 级别 1:此级别是可逆的。一旦禁用它,系统内存将被大量删除,您可以重新编程
  • RDP 级别 2:此级别不可逆,完全禁用调试接口(interface)。更新固件的唯一方法是通过一些引导加载程序机制。

  • 通常您要激活 RDP 级别 1。为了避免肯定会使微 Controller 变砖的错误,我不会在此答案中展示如何启用 RDP 级别 2。有关详细信息,请参阅引用手册。

    使用 OpenOCD 激活它

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

    典型的 OpenOCD 配置文件如下所示(您需要在运行之前刷入正确的固件):
    # Set RDP to level 1
    init
    reset halt
    stm32f1x lock 0
    reset halt
    exit

    请注意,只有在微 Controller 复位或断电后,读出保护才会生效(这就是为什么在命令序列中有第二次复位)。

    一个典型的 OpenOCD 调用可能如下所示:
    openocd -d0  -f stlink-v2.cfg -f ocd-stm32f0.cfg -f ocd-lock.cfg

    在哪里 ocd-lock.cfg包含上面显示的命令序列。

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

    停用 RDP

    停用它同样简单:只需使用 stm32f1x unlock (或 stm32f2x unlock 对于 F2/F4 设备)像这样:
    # Set RDP to level 0
    init
    reset halt
    stm32f1x unlock 0
    reset halt
    exit

    它有多安全?

    这是一个棘手的问题,如果没有额外的信息就无法真正回答。我可以给出的一个总结性答案是,如果您假设保护没有固有的错误并且有人只使用软件工具,那么它是非常安全的。

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

    关于embedded - 通过 OpenOCD 的 STM32 读出保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32509747/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com