ConnorHowell/medc17-checksum-tool

GitHub: ConnorHowell/medc17-checksum-tool

博世 MED17/EDC17 ECU 固件校验和(CRC32/ADD32/ADD16)的分析与校正工具,利用 GF(2) 矩阵代数实现即时 CRC32 求解,并支持 CVN 修复和 Bleichenbacher 签名生成。

Stars: 39 | Forks: 17

# MEDC17 Checksum 工具 用于 Bosch MED17/EDC17 ECU 固件二进制文件的 Checksum 分析与校正工具。 ## 概述 分析与校正 Bosch MED17 和 EDC17 ECU 固件文件中的 checksum。支持 CRC32、ADD32 和 ADD16 算法。 ## 功能 - ✅ **自动 block 检测** - 识别二进制文件中的所有 checksum block - ✅ **三种算法** - 支持 CRC32、ADD32 和 ADD16 - ✅ **即时 CRC32 求解** - 基于 GF(2) 矩阵代数 - ✅ **RSA 签名伪造** - 生成有效的 Bleichenbacher 签名 - ✅ **CVN 校正** - 修复 Calibration Verification Number 以匹配原始文件 - ✅ **安全操作** - 绝不覆盖原始文件
[](https://howellsystems.co.uk)
## 环境要求 Python 3.7+ 及 `rich` 包: ``` pip install rich ``` ## 用法 ### 分析 checksum(只读) ``` python main.py firmware.bin ``` ### 校正 checksum ``` python main.py firmware.bin --correct --output firmware_corrected.bin ``` ### 校正 checksum 和 CVN ``` python main.py modified.bin --correct --fix-cvn original.bin --output fixed.bin ``` ### 选项 ``` -h, --help Show help -c, --correct Correct invalid checksums -o OUTPUT, --output Output file path for corrected binary --fix-cvn ORIGINAL Fix CVN to match the CVN from ORIGINAL file ``` ## 工作原理 ### Checksum Block 结构 ECU 固件包含多个 Bosch block,其 checksum 用于保护不同的区域: - **绝对常量** (0xC0) - **Customer Block** (0x30) - **应用软件** (0x40) - **Dataset** (0x60) - **Startup Block** (0x10) ### 两阶段校正 1. **阶段 1 (ADD32/ADD16)**:使用简单的算术运算修改 checksum 区域的最后 4 个字节 2. **阶段 2 (CRC32)**:使用 GF(2) 矩阵代数即时求出精确的 dCSAdjust 值 ### CRC32 数学求解 传统方法需要暴力破解数十亿个值。本工具将 CRC32 建模为 GF(2) 上的 32 个线性方程,构建一个 32×32 的矩阵,并使用高斯消元法进行求解。 ### CVN (Calibration Verification Number) CVN 是特定内存区域上的 CRC32 checksum,OBD-II 诊断会报告该值以验证 calibration 的完整性。修改 calibration 数据时,CVN 会发生改变,并且不再与经销商的记录匹配。 **CVN 校正的工作原理:** 本工具没有为每个 ECU 变体硬编码区域,而是直接从二进制文件中动态发现 CVN 配置结构: 1. **结构发现** - 通过扫描特征码来定位 CVN 配置(我们始终知道 DS0 会出现在主结构中) 2. **区域提取** - 从结构中读取实际的内存区域(通常是 ASW + Dataset 区域,但这可能因 ECU 而异) 3. **Patch 定位** - 在 CVN 范围内但处于 checksum 关键区域之外,计算最佳的 patch 点 4. **GF(2) 求解** - 使用矩阵代数找到一个能产生目标 CVN 的 4 字节 patch 值 此方法适用于不同的 MED17/EDC17 变体,无需针对特定变体进行配置。 **未来增强:** 建立一个包含软件版本号及其对应 CVN 值的 CSV 数据库,可以完全免除对原始二进制文件的需求。 ## 技术细节 | 算法 | 初始值 | 预期结果 | 方法 | |-----------|---------------|-----------------|---------| | **CRC32** | 0xFADECAFE | 0x35015001 | IEEE 802.3 (0xEDB88320) 位反转多项式 | | **ADD32** | 0xFADECAFE | 0xCAFEAFFE | 32 位 dword 求和(忽略溢出) | | **ADD16** | 0xFADECAFE | 0xCAFEAFFE | 32 位 dword 中 16 位 word 的求和 | ## 待办事项 计划中的未来增强功能: - [ ] **Sync block** - WinOLS 引用了这些内容,它们是什么?? - [ ] **ECM/代码监控 checksum** - 确保所有监控 checksum 都已校正 - [ ] **变体 Dataset 校正** - 即使仅修改了 calibration,WinOLS 也会对 VDS block epilog(如果存在)进行更改,需要进一步调查 - [ ] **扩展测试** - 对超出 calibration 更改范围的代码段修改进行验证 欢迎贡献! ## 许可证 MIT 许可证 - 详见 [LICENSE](LICENSE) ## 致谢 版权所有 (c) 2025 Connor Howell ## 免责声明
标签:Bosch MED17, ECU固件, Python, 云资产清单, 无后门, 校验和, 汽车电子, 逆向工具, 逆向工程