记一次对STM32F103固件的提取与逆向分析

admin 2026-07-12 05:22:31 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文记录了对STM32F103固件的提取与逆向分析全过程。作者从购买开发板开始,通过串口烧录程序,使用stm32flash工具提取Flash固件,并借助大模型和Capstone库进行反汇编分析。文章展示了嵌入式安全研究的基本流程,并指出固件加密与破解的对抗关系,为相关从业者提供了实战参考。 综合评分: 81 文章分类: iot安全,逆向分析,二进制安全,安全工具,实战经验


cover_image

记一次对STM32F103固件的提取与逆向分析

原创

Shelter1234 Shelter1234

安全研究员

2026年7月11日 21:01 浙江

在小说阅读器读本章

去阅读

事情还要从即将毕业的一场面试说起,当时面试官是 某IoT 安全实验室的负责人,他抛出一个问题,问我怎么把STM32烧录进去的代码提取出来,由于当时经验尚浅,只回答了应该可以。而今大模型智能体技术的日趋成熟大幅抹平了各类技术门槛,加上我也想温习下嵌入式的基础知识(虽然从事的是安全,但对嵌入式行业依旧看好),所以有了这篇文章对技术进行下总结。

本次 我将带领大家从无开始,买一个STM32C8T6的板子进行程序的烧录,感受下正向开发,之后在进行代码的提取进行逆向分析。

物件准备

首先需要一个板子,作者也是选择了一个对初学者特别优好的板子C8T6,CH340X是进行烧录辅助用的,用杜邦线进行接线,使用串口下载助手便可以完成代码烧写。

1.STM32F103C8T6/C6T6核心开发板单片机学习板模块 CH32/GD32系统板

2.STM32/ESP32/ESP8266串口自动程序下载烧录器CH340X USB转TTL串口

3.杜邦线

收到货,不要忘了向店家要下开发板的基础资料,里面可是含一个简单的测试程序,让小灯闪烁。

接线烧录器

我们没有ST-Link 这种方便的调试器,故使用串口协议的CH340X,下面是接线参考

| CH340X 模块引脚 | 连接 -> | 你的开发板引脚 | 说明 | | — | — | — | — | | TXD (或 TX) | ➡️ | 板子的 RXD (或 RX / PA10) | 发送接接收 | | RXD (或 RX) | ➡️ | 板子的 TXD (或 TX / PA9) | 接收接发送 | | GND | ➡️ | 板子的 GND | 共地 | | 3.3V (或 VCC) | ➡️ | 板子的 3V3 (可以接在 SWD 的 VCC3V3 上) | 给板子供电(如果板子有其他电源供电,此线可不接,但GND必须接) |

那么怎么判断自己接线无误呢,将数据线与电脑连接,观察是否有com的出现,

程序烧录

是用keil4 打开测试程序编译一下

生成hex文件

之后用串口编程软件myMcu (作者也是在网上随便下了一个) 烧录程序

烧录时候注意下细节

一,选择程序文件project.hex port口选择com3 ,波特率默认的115200就行

二,还需要调整 BOOT 跳线帽(进入下载模式)

  1. BOOT0:跳线帽插在靠近 1(或 3.3V)的那一侧。
  2. BOOT1:跳线帽插在靠近 0(或 GND)的那一侧。 (注意:烧录完成后,如果要让程序运行,需要把 BOOT0 还原插回 0 侧)

三,准备好后按以下顺序操作:

  1. 鼠标点击 FlyMcu 软件上的 “开始编程(P)”
  2. 此时软件右侧会显示 开始连接...
  3. 立刻按一下 STM32 核心板上的 黑色/蓝色复位按键(RESET),然后松开。
  4. 此时软件就会检测到芯片,右侧会显示芯片信息(如 Flash 容量等)并开始百分比下载。

这样就烧录成功了,把BOOT0 置回为0 复位一下就可以看到pc13小灯的闪烁了

提取Flash

无意看到这个软件有读取flash的功能,但不能用蛤,需要与作者联系,那我们就使用开源命令行工具 stm32flash 来进行后面的操作吧,首先还是要将com调整到下载模式,之后运行程序

.\stm32flash.exe -r backup.bin COM3

直接运行报错了

 报错的原因,ai的诊断是

我们使用ai给出的解决方案再次运行

.\stm32flash.exe -r backup_new.bin -S 0x08000000:0x10000 -i rts,-dtr,,-rts,dtr COM3

这样我们就成功拿到了这个程序的固件

固件分析

代码的逆向分析,这里我不想介绍太多看似复杂实则一点也不简单的重量级反汇编工具软件。我们直接交给智能体让他分析。

大模型还是很给力的,很快就识别出了这个固件是STM32的格式

在得知本地没有现成的编译工具后,大模型主动选择了Capstone库——python的扩展库,进行反汇编操作。接下来就全交给模型来反汇编分析吧。

最终大模型出色地完成了本次的反编译分析任务

对比下这段为核心逻辑的伪代码和源程序对比还是非常符合的、

写在最后

本次带领了大家走完了一遍从嵌入式开发以及固件的逆向分析的一般流程,希望能够给从事嵌入式行业以及安全行业的人员带来一些启示。最后我还想对说,固件的提取和逆向分析并为那么顺利的,因为这个问题正向开发肯定是考虑到了,从而有一套加解密验证的解决方案,来阻止你对固件的提取和逆向分析,但也不是加了密就一定的安全。两者属于对抗关系 相辅相成吧。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:安全研究员 Shelter1234 Shelter1234《记一次对STM32F103固件的提取与逆向分析》

评论:0   参与:  0