← 返回目录课程:《工业控制单片机固件逆向工程案例实战教程》
03

03 GD32VF103 RISC-V 固件 Dump:SPI Flash 离线读取与校验

形成热风枪拆焊、SPI Flash编程器离线读取及固件完整性校验方法
章节导航 难度:入门类型:概念框架
操作落点

把目标平台VF103 RISC-V 固件 Dump落到离线读取的触发条件、可观察状态和复查材料上,先判断问题从哪里收窄。

术语边界
接口配置流程状态日志
完成标志
架构图代码片段排障表检查清单

离线固件提取:从拆焊到完整校验的工程闭环

异常线索复盘

触发目标平台VF103 RISC-V 固件 Dump首次出现问题的条件

记录输入、环境、时序或操作动作,先保留现场证据。

信号离线读取暴露出的状态变化

优先保留日志、返回码、状态位或波形片段。

定位Verilog片段

把命令、配置和日志放到同一时间窗口,再只调整一个会改变链路状态的条件。

复查状态记录记录

把返回码、计数器和吞吐变化分开留存,避免把一次偶然恢复当成结论。

检查路径目标平台VF103 RISC-V 固件 Dump:SPI Flash 离线读取与校验
✓离线读取定位
✓代码定位
✓命令校验
✓配置复测

概念块:目标平台VF103 RISC-V 固件 Dump

目标平台VF103 RISC-V 固件 Dump用离线读取、掌握热风枪拆焊、Flash编程器离线读取连接到离线读取的调试、验证和交付动作。

  • 离线读取
  • 掌握热风枪拆焊
  • Flash编程器离线读取
  • 固件完整性校验方法

在工业控制场景中,对 目标平台VF103 这类基于 RISC-V 内核的微控制器进行固件逆向,第一步也是最关键的一步,是获得一份完整且未被篡改的固件镜像。本节聚焦于通过热风枪拆焊、SPI Flash 编程器离线读取以及固件完整性校验,构建一个从物理层到数据层的可信提取流程。核心判断是:只有经过“物理隔离读取 + 多轮校验”的固件,才能作为后续逆向分析的可靠输入。我们将重点说明数据来源(SPI Flash 芯片)、处理节点(编程器离线读取)和校验闭环(哈希与结构验证)如何协同工作

关键判断

不要依赖 JTAG/SWD 在线读取——目标设备可能开启读保护(RDP)或处于非正常供电状态。离线读取 SPI Flash 是绕过软件锁、获取完整固件镜像的最可靠工程手段

拆焊与离线读取:物理层的数据来源与处理节点

目标平台VF103 RISC-V 固件 Dump:SPI Flash 离线读取与校验
离线读取具象图RISC-V 与 Flash…观察对象参数变化验证记录Flash工业控制单片机固…目标平台VF103RISC-VSPIRACI固件ACIR固件CIRAR 负责 / A 审批…

热风枪拆焊操作要点

目标是将板载 SPI Flash 芯片(常见封装如 SOP-8)从 PCB 上安全取下。操作时,使用 350°C 左右的热风,配合助焊剂,待焊锡熔化后用镊子轻轻取下。注意避免相邻元件移位或焊盘脱落。拆下的芯片冷却后,放入编程器适配座

SPI Flash 编程器离线读取

使用支持 SPI 协议的通用编程器(如 CH341A、TL866 系列),选择对应的 Flash 型号(例如 Winbond W25Q64JV)。读取前,务必确认编程器与芯片的引脚接触良好。读取操作生成一个二进制文件(.bin),该文件即为固件的原始镜像。一个典型的读取命令流程如下:

# 以 flashrom 工具为例,读取 SPI Flash 并保存为固件镜像
flashrom -p ch341a_spi -r 目标平台vf103_firmware_dump.bin
# 读取完成后,建议立即执行一次校验读取:
flashrom -p ch341a_spi -v 目标平台vf103_firmware_dump.bin

这段命令属于“问题代码/原始配置”,核对参数、目标设备和返回信息,并用状态记录确认动作是否真正生效。

上述命令中,-r 参数执行读取操作,-v 参数执行校验操作,确保读取的数据与芯片内部数据一致。这是第一个校验闭环:读取即校验,避免因接触不良导致数据损坏

实操步骤

读取完成后,立即对同一芯片进行第二次读取,并使用 diff 或 md5sum 比较两次输出的二进制文件。若完全一致,则证明物理读取过程可靠

固件完整性校验:构建数据可信的校验闭环

获取原始镜像后,需要从多个维度验证其完整性,确保它确实是目标设备上运行的、未被损坏或篡改的固件。校验闭环包含以下三个层次:

离线读取 相关检查
检查项标准是否通过
哈希一致性两次独立读取的镜像 SHA-256 值完全一致只做一次读取,未做交叉验证
结构完整性镜像头部包含有效的向量表(如 0x00000000 处…忽略向量表有效性,直接分析数据段
分区边界验证镜像大小与 Flash 芯片容量匹配,且关键分区(如主…未检查分区边界,导致后续反汇编时地址错位

其中,RISC-V 完整性校验方法 特别关注向量表的合法性。对于 目标平台VF103,其复位向量必须指向有效的可执行代码区域。我们可以使用二进制查看器(如 HxD、010 Editor)检查镜像开头 16 字节:前 4 字节应为栈顶地址(通常位于 SRAM 区域),后 4 字节应为复位入口地址(通常位于 Flash 区域)

常见误区

认为“能读取出来”就等于“数据正确”。实际上,接触不良、编程器驱动问题或 Flash 芯片的坏块都可能导致读取数据出现比特翻转。必须通过哈希校验和结构校验双重确认

操作核对

操作结束时离线读取:入口、参数或对象是否选对;再看掌握热风枪拆焊是否能让别人复现同一个结果。若离线固件提取发生变化,不要继续追加动作,先用离线读取确认状态,再决定是重跑、回退还是保留当前记录。迁移到新环境时,把配置来源、输入材料、套用条件和输出结果放在一起核对,尤其要确认从拆焊到完整校验的工程闭环没有改变本节的适用边界。如果后续章节复用本节判断,先问离线读取是否还成立,再看命令核对是否改变掌握热风枪拆焊的解释范围。第03节留下的风险提示是离线读取不要脱离现场判断单独判断,否则容易把现象误当成原因。