ConnorHowell/medc17-checksum-tool
GitHub: ConnorHowell/medc17-checksum-tool
Stars: 35 | Forks: 15
# MEDC17 Checksum Tool
Checksum analyzer and corrector for Bosch MED17/EDC17 ECU firmware binaries.
## Overview
Analyzes and corrects checksums in Bosch MED17 and EDC17 ECU firmware files. Supports CRC32, ADD32, and ADD16 algorithms.
## Features
- ✅ **Automatic block detection** - Identifies all checksum blocks in the binary
- ✅ **Three algorithms** - CRC32, ADD32, and ADD16 support
- ✅ **Instant CRC32 solving** - GF(2) matrix algebra
- ✅ **RSA signature forging** - Generates valid Bleichenbacher signatures
- ✅ **CVN correction** - Fix Calibration Verification Number to match original
- ✅ **Safe operation** - Never overwrites original files
[
](https://howellsystems.co.uk)
### Need Help with Your VW Group ECU Project?
Got a custom ECU tool you want built? Need reverse engineering work done? Working on something ambitious for VW Group control units?
**[Howell Systems Ltd](https://howellsystems.co.uk)** provides professional reverse engineering and custom embedded software development for the automotive aftermarket.
**[Get in touch →](https://howellsystems.co.uk)**
## Requirements
Python 3.7+ with `rich` package:
pip install rich
## Usage
### Analyze checksums (read-only)
python main.py firmware.bin
### Correct checksums
python main.py firmware.bin --correct --output firmware_corrected.bin
### Correct checksums and CVN
python main.py modified.bin --correct --fix-cvn original.bin --output fixed.bin
### Options
-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
## How It Works
### Checksum Block Structure
ECU firmware contains multiple Bosch blocks with checksums protecting different regions:
- **Absolute constants** (0xC0)
- **Customer Block** (0x30)
- **Application software** (0x40)
- **Dataset** (0x60)
- **Startup Block** (0x10)
### Two-Pass Correction
1. **Pass 1 (ADD32/ADD16)**: Modifies last 4 bytes of checksummed regions using simple arithmetic
2. **Pass 2 (CRC32)**: Uses GF(2) matrix algebra to solve for exact dCSAdjust value instantly
### CRC32 Mathematical Solving
Traditional methods brute-force billions of values. This tool models CRC32 as 32 linear equations over GF(2), constructs a 32×32 matrix, and solves using Gaussian elimination.
### CVN (Calibration Verification Number)
The CVN is a CRC32 checksum over specific memory regions that OBD-II diagnostics report to verify calibration integrity. When modifying calibration data, the CVN changes and will no longer match dealer records.
**How CVN correction works:**
Instead of hardcoding regions per ECU variant, this tool dynamically discovers the CVN configuration structure directly from the binary:
1. **Structure Discovery** - Locates the CVN config by scanning for patterns (we always know that DS0 will appear in the main struct)
2. **Region Extraction** - Reads the actual memory regions from the structure (typically ASW + Dataset areas, but this can vary by ECU)
3. **Patch Location** - Calculates an optimal patch point within the CVN range but outside checksum-critical areas
4. **GF(2) Solving** - Uses matrix algebra to find a 4-byte patch value that produces the target CVN
This approach works across different MED17/EDC17 variants without requiring variant-specific configuration.
**Future enhancement:** A CSV database of software version numbers and their corresponding CVN values could eliminate the need for the original binary file entirely.
## Technical Details
| Algorithm | Initial Value | Expected Result | Method |
|-----------|---------------|-----------------|---------|
| **CRC32** | 0xFADECAFE | 0x35015001 | IEEE 802.3 (0xEDB88320) bit-reversed polynomial |
| **ADD32** | 0xFADECAFE | 0xCAFEAFFE | 32-bit dword sum (overflow ignored) |
| **ADD16** | 0xFADECAFE | 0xCAFEAFFE | Sum of 16-bit words from 32-bit dwords |
## TODO
Future enhancements planned:
- [ ] **Sync blocks** - WinOLS references these, what are they??
- [ ] **ECM/Code monitoring checksums** - Make sure all monitoring checksums are corrected
- [ ] **Variant Dataset Correction** - Even with just calibration changes WinOLS will make changes to the VDS block epilog if it exists, needs investigation
- [ ] **Extended testing** - Validation with code section modifications beyond calibration changes
Contributions welcome!
## License
MIT License - see [LICENSE](LICENSE)
## Disclaimer
](https://howellsystems.co.uk)