daedalus/hdd-toolkit
GitHub: daedalus/hdd-toolkit
一个跨厂商的 Python 硬盘固件研究工具包,集固件解析、JTAG 调试、热补丁、漏洞利用与取证检测于一体,支持 WD/Seagate/Samsung/Toshiba/NVMe 等多种平台。
Stars: 2 | Forks: 0
# HDD 固件工具包
一个全面的 Python 工具包,用于通过 ATA passthrough 和 JTAG (OpenOCD) 转储、分析、修补和热部署 HDD/SSD 固件。
支持 WD、Seagate、Samsung (840 EVO MEX)、Toshiba、NVMe、SAS 和 USB 桥接平台。
## 功能特性
- **固件解析器:** WD LZHUF、Samsung 半字节交换、Seagate .lod、Toshiba 固件镜像
- **ATA Passthrough:** Linux sg_io 和 Windows DeviceIoControl,用于直接驱动器通信
- **WD VSC 协议:** 读写 RAM,转储 overlay 模块,通过 SMART LOG 0xBE 部署热补丁
- **JTAG (OpenOCD):** 内存转储、断点、寄存器检查、GPIO/MCU 交互
- **Samsung MEX (840 EVO):** 完整的 MEX 内存映射、GPIO、NCQ、AES 密钥插槽、DMA 数据窃取、安全模式 UART、闪存通道访问
- **NVMe Admin:** Identify、SMART、固件下载/激活、擦除、厂商特定命令
- **USB 桥接检测:** 通过 INQUIRY 字符串和 VID/PID 识别 USB-SATA 桥接芯片
- **数据恢复:** 读取重试升级、坏道处理、缺陷扇区模式生成
- **HPA/DCO:** Host Protected Area 和 Device Configuration Overlay 检测与命令构建
- **NVMe 侧信道:** 时序分析、争用检测、隐蔽信道建模
- **eNVMe:** DMA 攻击描述符构建、平台兼容性、内核模块注入建模
- **NVMe-oF:** CVE-2023-5178 double-free PoC、PDU 解析、内核漏洞检查
- **固件检测:** 电流消耗分析、时序异常检测、校验和验证、完整性报告
- **固件漏洞利用:** DOWNLOAD-MICROCODE 偏移量溢出、ASM2362 XRAM 注入、Service Area 隐藏/提取
- **补丁模板:** NOP sleds、数据陷阱、数据窃取钩子、SMART 日志重定向
- **32 个 CLI 命令:** 所有功能均可从命令行访问
## 安装
```
# 基础安装(无可选 deps)
pip install hdd-firmware-toolkit
# 包含所有可选依赖
pip install "hdd-firmware-toolkit[all]"
# 可选依赖组
pip install "hdd-firmware-toolkit[serial]" # pyserial (SAFE mode UART)
pip install "hdd-firmware-toolkit[asm]" # keystone-engine (Thumb-2 assembly)
pip install "hdd-firmware-toolkit[disasm]" # capstone (disassembly)
pip install "hdd-firmware-toolkit[yaml]" # PyYAML (hot-patch config)
```
## 快速开始
```
# 解析 WD 固件镜像
hdd-firmware-toolkit parse-firmware firmware.bin --format wd
# 解码 Samsung nibble-swap 混淆
hdd-firmware-toolkit decode-samsung firmware.bin -o decoded.bin
# 扫描 ASCII 字符串
hdd-firmware-toolkit scan-strings firmware.bin
# 检查 NVMe-oF 内核漏洞
hdd-firmware-toolkit nvmeof-check-kernel --kernel 6.7
```
## CLI 命令
| 命令 | 描述 |
|---------|-------------|
| `parse-firmware` | 解析并提取固件段 |
| `decode-samsung` | 移除 Samsung 半字节交换混淆 |
| `scan-strings` | 查找固件中的 ASCII 字符串 |
| `scan-fptables` | 启发式 ARM 函数指针表扫描 |
| `diff` | 对两个固件镜像进行字节级差异对比 |
| `list-vscs` | 从 WD 驱动器请求 VSC 列表 |
| `read-ram` | 通过 WD VSC 读取驱动器 RAM |
| `write-ram` | 通过 WD VSC 将文件写入驱动器 RAM |
| `hot-patch` | 向活动驱动器 RAM 部署延迟钩子 |
| `benchmark` | 计时读取基准测试 |
| `dump_overlay` | 转储 WD 服务区 overlay 模块 |
| `dump-all-overlays` | 将所有 overlay 模块转储到目录 |
| `jtag-shell` | 交互式 OpenOCD shell |
| `jtag-dump` | 通过 JTAG 转储内存 |
| `jtag-bp` | 通过 JTAG 设置硬件断点 |
| `jtag-regs` | 通过 JTAG 读取 CPU 寄存器 |
| `samsung-memory-map` | 打印 MEX 内存映射 |
| `samsung-fw-history` | 打印固件版本历史 |
| `samsung-gpio` | 通过 JTAG 读取 GPIO 状态 |
| `samsung-ncq` | 通过 JTAG 转储 NCQ 缓冲区 |
| `samsung-aes-info` | 通过 JTAG 读取 AES-XTS 密钥插槽 |
| `samsung-dma-dump` | 通过 DMA 将 RAM 传输至 SATA |
| `samsung-ftl-preload` | 预加载 FTL 映射 |
| `samsung-safe-shell` | 交互式安全模式 UART shell |
| `samsung-safe-read` | 通过安全模式 UART 读取 |
| `samsung-safe-write` | 通过安全模式 UART 写入 |
| `parse-seagate` | 解析 Seagate .lod 固件 |
| `sa-probe` | 探测 Service Area 大小 |
| `sa-dump` | 完整 Service Area 转储 |
| `sa-hide` | 在 SA 模块中隐藏数据 |
| `sa-extract` | 从 SA 模块提取隐藏数据 |
| `fwexploit-send` | 通过偏移量溢出注入固件 |
| `fwexploit-activate` | 激活注入的固件 |
| `nvme-bridge-sanitize` | 通过 ASM2362 XRAM 注入 Sanitize |
| `patch-template` | 生成预构建的 patch shellcode |
| `toshiba-parse` | 解析 Toshiba 固件镜像 |
| `toshiba-nand` | 显示 Toshiba NAND 配置 |
| `sat-cdb` | 构建 SCSI-ATA Translation CDB |
| `patcher-apply` | 应用补丁并修复校验和 |
| `patcher-fix` | 自动修复固件校验和 |
| `ata-sec-status` | 检查 ATA 安全状态 |
| `nvme-identify` | NVMe Identify Controller |
| `nvme-smart` | NVMe SMART / Health 日志 |
| `nvme-fw-download` | NVMe 固件下载 |
| `nvme-fw-activate` | NVMe 固件激活 |
| `nvme-vendor` | NVMe 厂商特定命令 |
| `usb-identify` | 识别 USB-SATA 桥接芯片 |
| `usb-list` | 列出已知的 USB-SATA 桥接芯片 |
| `dr-smart` | SMART 快速测试 (数据恢复) |
| `dr-identify` | 识别设备参数 |
| `dr-native-max` | 读取 Native Max Address |
| `dr-pattern` | 生成缺陷扇区模式 |
| `hpa-detect` | 从 IDENTIFY 数据检测 HPA |
| `hpa-build-cmd` | 构建 HPA/DCO ATA 命令 |
| `hpa-parse-dco` | 解析 DCO 功能集描述符 |
| `nvme-timing-baseline` | NVMe 读取延迟基线 |
| `nvme-timing-detect` | 检测 NVMe 时序争用 |
| `nvme-timing-gc` | 分析 NVMe GC 事件 |
| `envme-dma` | 构建 eNVMe DMA 攻击描述符 |
| `envme-scan` | 建模主机内存扫描 |
| `envme-compat` | 检查 eNVMe 兼容性 |
| `nvmeof-check-kernel` | 检查 CVE-2023-5178 漏洞 |
| `nvmeof-build-icreq` | 构建 NVMe-oF TCP ICReq PDU |
| `nvmeof-poc` | 生成 double-free PoC PDU |
| `fwdetect-current` | 通过电流消耗检测固件 |
| `fwdetect-timing` | 通过时序分析检测固件 |
| `fwdetect-verify` | 验证固件校验和 |
| `fwdetect-report` | 综合完整性报告 |
## 环境要求
- **Python** >= 3.11
- **可选:** pyserial、keystone-engine、capstone、PyYAML
### 特定平台
- **Linux:** 通过 sg_io 的 ATA passthrough 需要 root 权限 + `/dev/sdX` 或 `/dev/sgX`
- **Windows:** ATA passthrough 需要管理员权限
## 开发
```
pip install -e ".[all]"
pre-commit install
pytest
ruff check src/
```
## 许可证
MIT
标签:ATA直通, C++, CISA项目, CVE-2023-5178, DMA攻击, Google搜索, HDD工具包, HPA/DCO, HTTP工具, JTAG调试, NVMe, OpenOCD, Python, Samsung, Seagate, SMART监测, SSD固件, Toshiba, WD, 云资产清单, 侧信道攻击, 固件分析, 固件提取, 固件漏洞, 固件补丁, 固件解析, 坏道处理, 底层硬件交互, 恶意代码分类, 数据恢复, 数据擦除, 无后门, 硬件安全, 硬盘固件, 硬盘维修, 逆向工具, 逆向工程, 隐蔽通道