idmadj/klipper-binary-analyzer

GitHub: idmadj/klipper-binary-analyzer

针对 Klipper 3D 打印机 MCU 固件的纯 Python 静态分析工具,能够提取配置字典、检测 bootloader 偏移量并生成独立 HTML 报告。

Stars: 0 | Forks: 0

# klipper-binary-analyzer 一个用于 [Klipper](https://github.com/Klipper3d/klipper) MCU 固件二进制文件的静态分析工具。它检查 `.bin` 文件并生成一个独立的 HTML 报告,涵盖 ARM Cortex-M 向量表、bootloader 偏移量以及嵌入的 Klipper 配置字典。 需要 Python 3.6+,无需第三方依赖,仅使用标准库(`zlib`、`struct`、`json`、`argparse`)。 ## 功能特性 - **Bootloader 偏移量检测** - 使用字典指针交叉引用技术识别固件链接的 flash 偏移量,在 GCC/binutils 版本和二进制布局(应用镜像和完整 flash 镜像)之间均可靠 - **ARM 向量表分析** - 验证 MSP 和复位向量,标记无效镜像 - **Klipper 配置字典提取** - 解码固件中嵌入的 zlib 压缩 JSON 字典,提取 MCU 型号、时钟频率、串口引脚、波特率、初始引脚、固件版本和构建工具链 - **`make menuconfig` 摘要** - 将发现结果转换为重现构建所需的设置 - **独立的 HTML 报告** - 单个文件,无外部依赖,可在任何浏览器中直接打开 ## 用法 ``` python3 klipper_analyzer.py firmware.bin ``` 在二进制文件所在位置生成 `firmware_analysis.html` 并在默认浏览器中打开。 ``` # 将报告写入指定路径 python3 klipper_analyzer.py firmware.bin --output report.html # 不打开浏览器(适用于打印机本身等 headless 系统) python3 klipper_analyzer.py firmware.bin --no-browser # 在单次调用中分析多个 binaries python3 klipper_analyzer.py noz0_*.bin mcu0_*.bin --no-browser ``` 运行 `python3 klipper_analyzer.py --help` 查看完整选项参考。 ## Bootloader 偏移量检测原理 简单地从向量表读取复位处理程序地址并四舍五入到最近的 4 KiB 页是不可靠的,编译器可以将复位处理程序放在应用程序的任何位置,不一定靠近链接基址。扫描二进制文件以查找最低的 `0x08xxxxxx` 地址同样不可靠,因为数据段中的巧合位模式可能会产生错误匹配。 本工具使用一种更稳健的方法:Klipper 固件在其 `identify` 命令处理程序中嵌入了一个指向其配置字典的指针。对于每个已知的 bootloader 偏移量,该工具计算该偏移量下字典所在的 flash 地址,然后在二进制文件中搜索该地址(作为 4 字节 little-endian 值)。只有真正的链接基址才会产生匹配。 此方法不受以下因素影响,均可正常工作: - 工具链版本(已在 GCC 9.2.1/binutils 2.34 和 GCC 12.2.1/binutils 2.40 上测试) - 二进制布局(从 bootloader 偏移量开始的应用镜像,或从 `0x08000000` 开始的完整 flash 镜像) - 复位处理程序在应用程序中的位置 ## 已知的 bootloader 偏移量 | 偏移量 | 大小 | 典型用途 | |--------|------|-------------| | `0x0000` | 0 KiB | 无 bootloader(直接 flash) | | `0x1000` | 4 KiB | 最小化 / 自定义 bootloader | | `0x2000` | 8 KiB | HID / stm32duino bootloader | | `0x3000` | 12 KiB | Creality K1 / K1 SE / K1 Max (GD32F303) | | `0x5000` | 20 KiB | DFU 20 KiB | | `0x7000` | 28 KiB | Creality / Klipper 定制 28 KiB bootloader | | `0x8000` | 32 KiB | DFU 32 KiB 标准 | ## 背景 在 Creality K1 上更新 Klipper MCU 固件时开发,该打印机使用主线 Klipper 不支持的 GD32F303 MCU。GD32 支持需要 [CrealityOfficial/K1_Series_Klipper](https://github.com/CrealityOfficial/K1_Series_Klipper) fork 或合并其板级支持文件。在打印机上构建(MIPS 主机,GCC 12.2.1/binutils 2.40)生成的二进制文件布局与在 x86 上构建(GCC 9.2.1/binutils 2.34)不同,这正是构建可靠的跨平台偏移检测工具的动力。 ## 许可证 MIT
标签:3D打印, ARM Cortex-M, Bootloader检测, HTML报告生成, Klipper, Klipper固件, MCU固件, Python, 二进制分析, 二进制发布, 云安全监控, 云安全运维, 云资产清单, 向量表分析, 固件分析, 固件解析, 多模态安全, 嵌入式系统, 开源工具, 无后门, 无第三方依赖, 硬件安全, 逆向工程, 配置提取, 静态分析