numbpill3d/spi_flash_auto_unlocker
GitHub: numbpill3d/spi_flash_auto_unlocker
该工具通过自动化转储、分析和修补 SPI Flash 固件中的 UEFI 变量,帮助用户一键移除笔记本及嵌入式设备的 BIOS/UEFI 密码。
Stars: 12 | Forks: 1
# SPI Flash 自动解锁工具
一款 Python 实用工具,用于自动转储、分析和修改笔记本电脑及嵌入式固件,以移除 BIOS/UEFI 密码。
## 🚀 开发动机
现代笔记本电脑通常将管理员和用户密码存储在 UEFI 固件中,该固件位于包含 BIOS 其余部分的同一块 SPI flash 芯片上。在许多情况下,这些密码保存在 AMI 固件中一个名为 `AMITSESetup` 的非易失性变量中。研究还表明,某些供应商(如 Lenovo)会在专有的 GUID 命名空间内使用 `cE!` 等特殊变量来控制写保护。清除或删除这些变量可以有效重置密码并禁用锁定机制。无需手动转储 flash、使用十六进制编辑器编辑镜像以及重新刷写,Auto-Unlocker 只需一条命令即可自动化整个工作流程。
## 🛠️ 工作原理
1. **硬件连接**:将 SOIC-8 测试夹连接到系统的 SPI ROM 芯片上,并将其连接到兼容的 USB 编程器(CH341A 或 FT2232H)。
2. **Flash 转储**:脚本调用外部 `flashrom` 实用程序读取 SPI flash 的全部内容,并将其写入备份文件。
3. **变量枚举**:扫描转储的镜像以查找 UEFI 变量头。解析器会搜索已知的 GUID(例如 AMI 的 `AMITSESetup` GUID),并重建变量名、属性和数据结构。
4. **密码移除**:对于每个被识别为包含密码的变量,该工具可以将其数据区域清零,或者将该变量标记为已删除。将状态的删除位(`0x3F` -> `0x3D`)进行设置,遵循 UEFI 规范中变量删除的生命周期。
5. **重新刷写**:最后,使用 `flashrom` 将修补后的镜像写回 SPI 芯片,从而恢复一个没有旧密码的系统。
## 📋 使用说明
首先安装 `flashrom`、Python 3 以及其他所有依赖项。然后使用适当的选项运行该工具:
```
python3 spi_flash_auto_unlocker.py \
--reader ch341a_spi \
--chip W25Q128FV \
--dump backup.bin \
--patch patched.bin \
--delete
```
### 选项
- `--reader`:Flashrom 编程器驱动名称(必填:`ch341a_spi` 或 `ft2232_spi`)
- `--chip`:可选的 flash 芯片名称(例如:`W25Q128FV`)
- `--dump`:保存转储的固件镜像的路径(默认:`flash_backup.bin`)
- `--patch`:保存修补后的固件镜像的路径(默认:`flash_patched.bin`)
- `--delete`:将密码变量标记为已删除,而不是将数据清零(或在其基础上附加此操作)
- `--no-flash`:不自动重新刷写(安全的试运行)
- `--list`:列出所有发现的变量并退出,不进行任何更改
## ⚠️ 安全警告
刷写修改过的固件可能会导致设备变砖。使用本软件的风险由您自行承担,且请仅在自己拥有的硬件上使用。请务必保留原始转储文件,以防出现意外情况。
## 📄 许可证
本项目基于 **MIT License** 发布。有关详情,请参阅 `LICENSE` 文件。
标签:Python, SPI闪存, UEFI/BIOS, 固件分析, 底层安全, 无后门, 硬件工具, 系统恢复, 逆向工具