Skip to main content

ECU binary analysis and patching toolkit — diff, validate, and apply tuning recipes to automotive ECU binaries.

Project description

OpenRemap

CI PyPI License: MIT Python 3.14+ uv

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


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 workflow first — 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 tuned confirms 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openremap-0.3.0.tar.gz (208.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

openremap-0.3.0-py3-none-any.whl (172.3 kB view details)

Uploaded Python 3

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

Hashes for openremap-0.3.0.tar.gz
Algorithm Hash digest
SHA256 0ac6d48f0b5adc765a33997a198b1017eb71271a0b75a9569ffc63d0d8da770e
MD5 997fb77a50e447b2005691e9d1b43a7f
BLAKE2b-256 97799e1527261089e280afb7f2ba3ac490e5f5b0e9a66cc97645a5afb116ae3b

See more details on using hashes here.

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

Hashes for openremap-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 214c6e22ef499457ef48e655d67b338111e74ff0e1f592b23ca48075fbc1e842
MD5 98e282c925af6422f01a399215ee4887
BLAKE2b-256 922537129fc00786c82619d16cd542a68d1a148735fd54263890c7fb54c1de06

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page