ECU binary analysis and patching toolkit — diff, validate, and apply tuning recipes to automotive ECU binaries.
Project description
OpenRemap
Know what any ECU binary is. Spot a modified file before it causes damage. Apply tunes with a recipe you can read in any text editor.
Identify — drop any .bin and get manufacturer, ECU family, software version, and hardware number back in under a second. Works offline, no cloud, no subscriptions.
Check originality — the confidence system reads signals straight from the binary: canonical software version, hardware part number, ident block integrity. Modified files, wiped idents, and tuned-but-relabelled dumps are flagged automatically, before you've done anything with them.
Tune with human-readable recipes — diff a stock and a modified binary into a portable JSON recipe. Validate it against any target before touching it. Apply it byte-by-byte. Verify every write landed. The full audit trail sits in a file you can open in Notepad.
Built for tuners who want to understand what they're writing to an ECU, and for developers who want an open, scriptable alternative to closed toolchains. → How it works in detail
Install
- 🪟 Windows — Step-by-step guide · written for people who rarely use a terminal
- 🍎 macOS / 🐧 Linux — One-command install
- 🛠️ Contributing / development — Clone and run from source
Supported ECU Families
15 Bosch families supported — spanning 1982 to the present, from 8 KB LH-Jetronic ROMs to 8 MB EDC17 flash dumps. The registry is designed to be extended to any manufacturer without touching existing code.
→ Full family reference — era, file sizes, vehicle applications, and notes for every supported family.
Adding a new manufacturer? → CONTRIBUTING.md
CLI Quickstart
New here? Run
openremap workflowfirst — it prints a complete plain-English guide with every step, the exact commands to type, and what to do when something goes wrong. No reading required.
Full CLI reference → docs/cli.md
# New users: print the full step-by-step workflow guide
openremap workflow
# Identify an ECU binary — family, SW version, hardware number, and confidence
openremap identify ecu.bin
# Batch-scan a folder — dry-run preview, nothing moves
openremap scan ./my_bins/
# Sort files into a manufacturer/family tree once you're happy with the preview
openremap scan ./my_bins/ --move --organize
# Save a report with confidence scores for every file in the folder
openremap scan ./my_bins/ --report report.json
# Extract the tune — diff a stock and a modified binary into a recipe
openremap cook stock.bin stage1.bin --output recipe.json
# Validate the target before touching it (run this first — always)
openremap validate strict target.bin recipe.json
# Apply the tune
openremap tune target.bin recipe.json --output target_tuned.bin
# Confirm every byte landed correctly
openremap validate tuned target_tuned.bin recipe.json
🔴 CHECKSUM VERIFICATION IS MANDATORY Before flashing any tuned binary to a vehicle, you must run it through a dedicated checksum correction tool (ECM Titanium, WinOLS, or equivalent).
openremap validate tunedconfirms the recipe was applied — it does not correct or validate ECU checksums. Flashing a binary with an incorrect checksum will brick your ECU. No exceptions.
Confidence Scoring
Every identify result and every scan line includes a confidence assessment — a quick read on how likely a binary is to be an unmodified factory file, based on signals read directly from the binary and from the filename.
── Confidence ─────────────────────────────────────
Tier HIGH
Signal + canonical SW version (1037-prefixed)
Signal + hardware number present (0261209352)
Signal + ECU variant identified (EDC17C66)
── Confidence ─────────────────────────────────────
Tier SUSPICIOUS
Signal - SW ident absent — no match key produced
Signal - tuning/modification keywords in filename
⚠ IDENT BLOCK MISSING
⚠ TUNING KEYWORDS IN FILENAME
| Tier | What it means |
|---|---|
| HIGH | All key identifiers present — looks like an unmodified factory file |
| MEDIUM | Most identifiers present, minor concerns only |
| LOW | Some identifiers missing, or a mild filename signal |
| SUSPICIOUS | Strong modification signals — inspect before use |
| UNKNOWN | No extractor matched the binary |
Signals that raise or lower confidence:
| Signal | Direction |
|---|---|
SW version present and canonical (1037-prefixed for Bosch) |
+ |
| Hardware number present | + |
| ECU variant identified | + |
| Calibration ID present | + |
| SW version absent for a family that normally stores it | - |
Tuning keywords in filename (stage, remap, tuned, disable, …) |
- |
Generic numbered filename (1.bin, 42.bin, …) |
- |
Warnings flag specific red flags:
⚠ IDENT BLOCK MISSING— software version absent for a family that always stores one; strong signal of a wiped or tampered ident block⚠ TUNING KEYWORDS IN FILENAME— filename suggests the file has been modified⚠ GENERIC FILENAME— bare numbered filename provides no identifying context
The system is manufacturer-agnostic — any extractor registered in the system gets confidence scoring automatically. The 1037 prefix check is Bosch-specific; for other manufacturers, any software version present earns the positive signal. All other signals apply equally across all families.
Use openremap identify for the full per-signal breakdown on a single file, or openremap scan --report report.json to triage an entire folder at once.
Documentation
| Document | Contents |
|---|---|
docs/install/windows.md |
Windows install — step-by-step for first-time terminal users |
docs/install/macos-linux.md |
macOS / Linux install — uv, pip, shell completion, troubleshooting |
docs/install/developers.md |
Developer setup — clone, test suite, project structure, publishing |
docs/cli.md |
Commands overview — what each command does, with links to full per-command pages |
docs/manufacturers/bosch.md |
Supported Bosch ECU families — era, file sizes, vehicle applications, confidence notes |
docs/recipe-format.md |
The recipe JSON spec — fields, structure, versioning |
CONTRIBUTING.md |
How to add a new ECU extractor, code style, submitting a PR, contributor safety notice |
DISCLAIMER.md |
Liability, intended use, professional review requirements, legal notice |
Contributing
Contributions are welcome — especially new ECU family extractors. See CONTRIBUTING.md.
License
MIT — see LICENSE.
⚠️ Research and educational use only. Any output produced by this software must be reviewed by a qualified professional before being flashed to a vehicle. The authors accept no liability for damage, loss, or legal consequences arising from its use. Read the full DISCLAIMER before proceeding.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file openremap-0.3.0.tar.gz.
File metadata
- Download URL: openremap-0.3.0.tar.gz
- Upload date:
- Size: 208.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.0 {"installer":{"name":"uv","version":"0.11.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ac6d48f0b5adc765a33997a198b1017eb71271a0b75a9569ffc63d0d8da770e
|
|
| MD5 |
997fb77a50e447b2005691e9d1b43a7f
|
|
| BLAKE2b-256 |
97799e1527261089e280afb7f2ba3ac490e5f5b0e9a66cc97645a5afb116ae3b
|
File details
Details for the file openremap-0.3.0-py3-none-any.whl.
File metadata
- Download URL: openremap-0.3.0-py3-none-any.whl
- Upload date:
- Size: 172.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.0 {"installer":{"name":"uv","version":"0.11.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
214c6e22ef499457ef48e655d67b338111e74ff0e1f592b23ca48075fbc1e842
|
|
| MD5 |
98e282c925af6422f01a399215ee4887
|
|
| BLAKE2b-256 |
922537129fc00786c82619d16cd542a68d1a148735fd54263890c7fb54c1de06
|