EngineerAbdullahBinZafar/stm32-hal-fuzzer
GitHub: EngineerAbdullahBinZafar/stm32-hal-fuzzer
一个针对STM32物理硬件的HAL函数自动化边缘情况与压力测试工具,用于发现固件底层的崩溃和未定义行为。
Stars: 0 | Forks: 0

**STM32 HAL 函数自动化边缘情况与压力测试工具**

[](https://github.com/EngineerAbdullahBinZafar/stm32-hal-fuzzer/actions)
[](https://opensource.org/licenses/MIT)
[](https://st.com)
[](https://python.org)
*你的 HAL 代码在正常输入下运行良好。但在边缘情况下它能幸存吗?*
[为什么要对 STM32 进行模糊测试?](#-why-fuzz-your-stm32-hal) • [功能特性](#-features) • [快速开始](#%EF%B8%8F-quick-start) • [系统架构](#-architecture) • [输出报告](#-sample-output-report)
## 🤔 为什么要对你的 STM32 HAL 进行模糊测试?
固件崩溃并非随机发生——它们只是你没有测试到的边缘情况:
- 使用无效 GPIO 端口调用 `HAL_GPIO_WritePin` → **硬件错误 (Hard Fault)**
- 使用 `Size = 0` 调用 `HAL_UART_Transmit` → **未定义行为**
- 在未初始化的定时器上调用 `HAL_TIM_PWM_Start` → **静默失败**
手动测试永远无法覆盖无效输入的所有组合。**`stm32-hal-fuzzer` 会自动生成数千个此类边缘情况输入**,在已连接的 STM32 上运行它们,监控崩溃和挂起情况,并生成精美的诊断报告。
## ✨ 功能特性
| 功能 | 描述 |
|:---|:---|
| 🎲 **自动化边缘情况生成** | 为任何 HAL 函数生成边界值、空指针和溢出输入 |
| 📡 **实时 UART 监控** | 监控 STM32 的调试 UART,以检测崩溃特征和硬件错误处理程序 |
| ⏱️ **超时检测** | 检测函数挂起(在可配置的超时时间内无响应) |
| 📊 **HTML 诊断报告** | 为每个测试用例生成带有颜色编码的通过/失败报告 |
| 🔌 **零固件修改** | 通过一次性烧录的轻量级测试工具运行——无需改动你的 HAL 代码 |
## ⚡️ 快速开始
```
# 1. Clone fuzzer
git clone https://github.com/EngineerAbdullahBinZafar/stm32-hal-fuzzer.git
cd stm32-hal-fuzzer
pip install -r requirements.txt
# 2. Flash test harness 固件到你的 STM32
# (STM32F407 的预构建 .bin 位于 /firmware/)
# 3. 对目标 HAL 模块运行 fuzzer
python -m stm32_fuzzer.fuzz \
--port /dev/ttyACM0 \
--baud 115200 \
--target HAL_UART \
--iterations 500
# 4. 打开生成的报告
open output/report.html
```
## 📐 系统架构
```
flowchart TB
A["🐍 Fuzzer Engine\n(Python)"] -->|"Generate Edge Cases"| B["Input Corpus\n(Boundary, Null, Overflow)"]
B -->|"Serial Commands"| C["🔌 UART Bridge\n(USB-to-Serial)"]
C -->|"HAL Function Calls"| D["⚡ STM32 Target\n(Test Harness .bin)"]
D -->|"Pass / Crash / Hang"| C
C -->|"Response Monitoring"| A
A -->|"Aggregate Results"| E["📊 HTML Report\n(output/report.html)"]
```
## 📋 示例输出报告
```
==========================================
STM32 HAL Fuzzer — Run Report
Target: HAL_UART_Transmit
Iterations: 500 | Duration: 42.3s
==========================================
✅ PASS [0001] Size=1, Data=0x00 (2.1ms)
✅ PASS [0002] Size=255, Data=0xFF (2.4ms)
❌ CRASH [0047] Size=0, Data=0x00 → Hard Fault detected!
⏱️ HANG [0203] Size=256, Data=random → Timeout (5000ms)
✅ PASS [0498] Size=128, Data=random (2.2ms)
------------------------------------------
Summary: 497 Pass | 1 Crash | 1 Hang | 1 Error
Report saved to: output/report_20250506.html
==========================================
```
## 🤝 贡献指南
请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 和 [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)。
**公开赏金任务:**
- 支持对 STM32 SPI 和 I2C HAL 的模糊测试
- 集成 OpenOCD 以实现基于 JTAG 的崩溃检测
- 提供在每次固件提交时进行自动化模糊测试的 CI 模板
## 📄 许可证
MIT 许可证 — 详见 `LICENSE`。
## 👤 作者
由 **Engineer Abdullah Bin Zafar** 构建 — [GitHub](https://github.com/EngineerAbdullahBinZafar) · [LinkedIn](https://linkedin.com/in/abdullah-bin-zafar)
*如果你在崩溃进入生产环境之前将其捕获,请留下一个 ⭐!*
标签:ASM汇编, CISA项目, HAL库, MCU, Python, STM32, 压力测试, 固件测试, 固件漏洞挖掘, 多模态安全, 嵌入式安全, 微控制器, 无后门, 物联网安全, 硬件安全, 硬件安全测试, 硬件故障注入, 边界测试, 逆向工具