IOT安全-固件提取
字数 2058 2025-08-22 12:23:13

STM32芯片固件提取技术详解

一、工具准备

硬件工具

  1. FT232芯片

    • 功能:USB与串口之间的桥接设备
    • 特点:
      • 内部集成USB串口引擎(USB-Serial Engine)
      • 通过USB接口与主机设备通信
      • 利用内部UART引擎与外部设备进行串口通讯
  2. 杜邦线

    • 用途:连接FT232与串口
    • 特点:
      • 无需焊接即可牢靠连接插针
      • 便于快速进行电路试验
  3. 万用表

    • 功能:测量电参数
    • 在固件提取中的用途:
      • 识别UART的四个关键引脚:VCC、GND、RX、TX
      • 测量参数:直流电压、交流电压、电阻、电流等
  4. 焊接工具

    • 焊烙:用于稳定连接芯片PIN脚和杜邦线
    • 注意事项:需要一定操作技巧,建议专业人员操作
  5. 替代焊接的方案

    • ECU探针:配合操作台进行连接
    • 芯片夹:适用于MCU等精细固定
      • 支持SOP、QFP等针脚外露的芯片
      • 不适用于QFN、BGA封装

软件工具

  1. STM32CubeProgrammer

    • 功能:STM32芯片编程工具
    • 优势:比STLink更推荐使用
    • 用途:查看和修改芯片保护状态,提取固件
  2. 参考文档

    • Datasheet数据手册:芯片引脚和电气特性
    • Reference manual参考手册:详细寄存器配置和标志位说明

二、UART引脚识别方法

四个关键引脚

  1. VCC

    • 供电引脚
    • 电压:通常为3.3V(恒定不变)
  2. GND

    • 接地引脚
    • 识别方法:使用万用表蜂鸣档测试
  3. TX

    • 发送数据引脚
    • 特点:开机时会有数据传输,电压会变化
  4. RX

    • 接收数据引脚
    • 特点:有外部数据传输时电压会变化

具体识别步骤

  1. 定位GND

    • 万用表设置:蜂鸣档
    • 方法:
      • 黑表笔接背面电源焊锡点
      • 红表笔触碰UART引脚
      • 发出蜂鸣声的即为GND
  2. 定位VCC

    • 万用表设置:直流20V档
    • 方法:
      • 黑表笔接已识别的GND
      • 红表笔测试其他引脚
      • 显示3.3V的即为VCC
  3. 定位TX

    • 方法:
      • 黑表笔接GND
      • 重启设备时用红表笔测试剩余引脚
      • 电压发生变化的即为TX
  4. 定位RX

    • 方法:排除法,剩余的一个引脚即为RX
    • 或观察有数据传输时电压变化的引脚

备选方法:当无法准确识别时,可尝试所有可能的引脚组合,通过电脑是否弹出提示来判断正确连接。

三、固件提取的三种途径

1. 从外部Flash提取

适用情况

  • Flash与RAM、CPU分别独立
  • Flash未采取保护措施

特点

  • 直接连接Flash即可尝试提取
  • 比从MCU提取更简单

操作步骤

  1. 查找芯片上的外部独立Flash位置

    • 肉眼观察或使用电子显微镜
    • 注意寻找小黑圆点作为方向标记
  2. 根据封装类型选择连接方式

    • SOP8等引脚外露封装:使用芯片夹
    • QFN、BGA等封装:需要其他方法
  3. 连接并读取Flash内容

2. 从MCU内置Flash提取

适用情况

  • 固件存储在MCU内置Flash中
  • 可能需要通过调试接口提取

操作步骤

  1. 查找调试接口

    • 参考芯片手册的"Pinouts and pin description"部分
    • 常见封装类型:
      • LQFP48:48引脚
      • LQFP64:64引脚
      • LQFP100:100引脚
  2. 连接调试接口

    • 常见接口类型:SWD、JTAG等
    • 使用芯片夹连接对应引脚
  3. 使用STM32CubeProgrammer

    • 检查读保护状态
    • 尝试提取固件

3. 读保护状态分析

通过STM32CubeProgrammer可查看三种保护级别:

  1. 级别0(0xAA)

    • 无读保护
    • 所有模式下均可读取Flash
  2. 级别1(默认BB)

    • 启用读保护
    • 限制:
      • 调试模式下不能访问Flash
      • 从RAM或系统存储器自举时不能访问Flash
    • 取消保护方法:
      • 将保护级别改为0xAA
      • 注意:会擦除整个Flash和备份SRAM
  3. 级别2(0xCC)

    • 最高保护级别
    • 额外限制:
      • 禁止从RAM或系统存储器自举
      • 禁用JTAG、SWV、ETM和边界扫描
      • 用户选项字节不可更改
    • 重要警告:
      • 一旦激活级别2,无法降级
      • 可能导致设备变成"板砖"

注意事项:修改保护级别可能导致固件擦除,操作需谨慎!

四、参考资料获取

  1. Datasheet下载

    • 官网地址:https://www.st.com/en/microcontrollers-microprocessors/stm32f302cb.html
    • 选择对应芯片型号的版本
  2. Reference Manual

    • 示例手册:RM0365 (STM32F302xBCDE和STM32F302x68)
    • 下载地址:https://www.st.com/resource/en/reference_manual/rm0365-stm32f302xbcde-and-stm32f302x68-advanced-armbased-32bit-mcus-stmicroelectronics.pdf

五、操作注意事项

  1. 焊接操作需谨慎,建议由专业人员完成
  2. 修改读保护级别可能导致数据丢失
  3. 级别2保护激活后不可逆,慎用
  4. 当遇到读保护(BB状态)时,可能需要寻找其他提取方法
  5. 不同封装类型需要不同的连接方式
  6. 操作前务必确认芯片型号并下载对应手册
STM32芯片固件提取技术详解 一、工具准备 硬件工具 FT232芯片 功能:USB与串口之间的桥接设备 特点: 内部集成USB串口引擎(USB-Serial Engine) 通过USB接口与主机设备通信 利用内部UART引擎与外部设备进行串口通讯 杜邦线 用途:连接FT232与串口 特点: 无需焊接即可牢靠连接插针 便于快速进行电路试验 万用表 功能:测量电参数 在固件提取中的用途: 识别UART的四个关键引脚:VCC、GND、RX、TX 测量参数:直流电压、交流电压、电阻、电流等 焊接工具 焊烙:用于稳定连接芯片PIN脚和杜邦线 注意事项:需要一定操作技巧,建议专业人员操作 替代焊接的方案 ECU探针:配合操作台进行连接 芯片夹:适用于MCU等精细固定 支持SOP、QFP等针脚外露的芯片 不适用于QFN、BGA封装 软件工具 STM32CubeProgrammer 功能:STM32芯片编程工具 优势:比STLink更推荐使用 用途:查看和修改芯片保护状态,提取固件 参考文档 Datasheet数据手册:芯片引脚和电气特性 Reference manual参考手册:详细寄存器配置和标志位说明 二、UART引脚识别方法 四个关键引脚 VCC 供电引脚 电压:通常为3.3V(恒定不变) GND 接地引脚 识别方法:使用万用表蜂鸣档测试 TX 发送数据引脚 特点:开机时会有数据传输,电压会变化 RX 接收数据引脚 特点:有外部数据传输时电压会变化 具体识别步骤 定位GND 万用表设置:蜂鸣档 方法: 黑表笔接背面电源焊锡点 红表笔触碰UART引脚 发出蜂鸣声的即为GND 定位VCC 万用表设置:直流20V档 方法: 黑表笔接已识别的GND 红表笔测试其他引脚 显示3.3V的即为VCC 定位TX 方法: 黑表笔接GND 重启设备时用红表笔测试剩余引脚 电压发生变化的即为TX 定位RX 方法:排除法,剩余的一个引脚即为RX 或观察有数据传输时电压变化的引脚 备选方法 :当无法准确识别时,可尝试所有可能的引脚组合,通过电脑是否弹出提示来判断正确连接。 三、固件提取的三种途径 1. 从外部Flash提取 适用情况 : Flash与RAM、CPU分别独立 Flash未采取保护措施 特点 : 直接连接Flash即可尝试提取 比从MCU提取更简单 操作步骤 : 查找芯片上的外部独立Flash位置 肉眼观察或使用电子显微镜 注意寻找小黑圆点作为方向标记 根据封装类型选择连接方式 SOP8等引脚外露封装:使用芯片夹 QFN、BGA等封装:需要其他方法 连接并读取Flash内容 2. 从MCU内置Flash提取 适用情况 : 固件存储在MCU内置Flash中 可能需要通过调试接口提取 操作步骤 : 查找调试接口 参考芯片手册的"Pinouts and pin description"部分 常见封装类型: LQFP48:48引脚 LQFP64:64引脚 LQFP100:100引脚 连接调试接口 常见接口类型:SWD、JTAG等 使用芯片夹连接对应引脚 使用STM32CubeProgrammer 检查读保护状态 尝试提取固件 3. 读保护状态分析 通过STM32CubeProgrammer可查看三种保护级别: 级别0(0xAA) 无读保护 所有模式下均可读取Flash 级别1(默认BB) 启用读保护 限制: 调试模式下不能访问Flash 从RAM或系统存储器自举时不能访问Flash 取消保护方法: 将保护级别改为0xAA 注意:会擦除整个Flash和备份SRAM 级别2(0xCC) 最高保护级别 额外限制: 禁止从RAM或系统存储器自举 禁用JTAG、SWV、ETM和边界扫描 用户选项字节不可更改 重要警告: 一旦激活级别2,无法降级 可能导致设备变成"板砖" 注意事项 :修改保护级别可能导致固件擦除,操作需谨慎! 四、参考资料获取 Datasheet下载 官网地址:https://www.st.com/en/microcontrollers-microprocessors/stm32f302cb.html 选择对应芯片型号的版本 Reference Manual 示例手册:RM0365 (STM32F302xBCDE和STM32F302x68) 下载地址:https://www.st.com/resource/en/reference_ manual/rm0365-stm32f302xbcde-and-stm32f302x68-advanced-armbased-32bit-mcus-stmicroelectronics.pdf 五、操作注意事项 焊接操作需谨慎,建议由专业人员完成 修改读保护级别可能导致数据丢失 级别2保护激活后不可逆,慎用 当遇到读保护(BB状态)时,可能需要寻找其他提取方法 不同封装类型需要不同的连接方式 操作前务必确认芯片型号并下载对应手册