Skip to content
sprytnykPublic

About

VIN and ISN management tool for BMW MS4X engine control units. Convert VIN, replace VIN, and copy ISN in binary DME files.

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Repository files navigation

MSCoder

⚠️ DISCLAIMER: Modifying firmware carries risks, including the potential to brick your DME. Always create a backup of your original firmware before making any modifications. Use this tool at your own risk. I am not responsible for any damage.

Supported languages: 🇬🇧 English | 🇺🇦 Українська
Supported platforms: Linux | macOS | Windows

This tool helps you work with VIN & ISN data for BMW MS4X engine control units. It can convert VIN strings to their hexadecimal representation, find/replace VINs in binary DME files, copy ISN between DME files, and apply IMMO bypass patches.

Features

  • VIN Replacer (Alt+1): Replace VIN in MS41, MS42, and MS43 binary DME files Replacer
  • VIN Converter (Alt+2): Convert between VIN string and hex bytes Converter
  • ISN Copier (Alt+3): Copy ISN (Immobilizer Sequence Number) between MS42 and MS43 firmware files, with optional IMMO bypass functionality Copier
  • About (Alt+4): Application information and credits

Compatibility

Supported Operations

  • VIN Editing: MS41, MS42, MS43 DME binary files
  • ISN Copying with IMMO Bypass: MS42, MS43 DME binary files

Supported ECU Versions

IMMO bypass is supported for:

  • MS42 version 0110C6
  • MS43 version 430069

File Requirements

Only 512KB (MS42, MS43) or 256KB (MS41) firmware binary files should be used.

Flashing Requirements

VIN + ISN flashing:

  • For MS42 and MS43: Requires boot mode activation (see How to Connect)
  • Does NOT require checksum correction in MS4X Flasher
  • After flashing, VIN + ISN must be synced with EWS using INPA

Updated VIN

Example of sync for MS43:

Connect OBD2 cable, turn ignition to the 2nd position, and open INPA: INPA

Press Shift + F7, then choose "Engine > MS 43.0 for M54" MS43

You'll see the main menu: Tab

Press Shift + F6: EWS

Press F2, then click Ok: Reset

Press F1, then click Ok: Sync

IMMO bypass flashing:

  • Can be flashed without boot mode by MS4X Flasher
  • Allows the car to start without matching VIN + EWS ISN
  • ⚠️ CRITICAL: Requires checksum correction in MS4X Flasher after using this feature. Car will not start without proper checksum correction!

Checksum Correction

Tested Configurations

This tool has been tested and proven to work on real hardware:

  • Platform: BMW E46 with MS43 430069 on M54B30 engine
  • Tested combinations:
    • VIN + ISN
    • VIN + ISN + bypass
    • ISN + bypass

Installation

Download pre-built binaries for different distributions from the Releases page.

On Linux, unpack mscoder-linux-x64.tar.gz and run ./mscoder.

On macOS, pick macos-arm64 for Apple Silicon or macos-x64 for Intel, and drag MSCoder.app into Applications. The app isn't notarized, so macOS blocks it the first time. Try to open it, then go to System Settings, open Privacy & Security and click Open Anyway. Or run xattr -dr com.apple.quarantine /Applications/MSCoder.app.

Or run from source with uv. It picks Python 3.14 from .python-version:

uv sync
uv run python -m mscoder

Run the tests with make test. To run ruff and the tests before each commit, install the hooks once with uvx pre-commit install.

References

This project wouldn't exist without:

And it was inspired by E46 Temperature Gauge Hex Generator v1.0

License

MIT License - see LICENSE file for details.

The app icon, assets/icon.svg, is "Bmw" by Garuda Technology from SVG Repo, under its own MIT License; see assets/ICON-LICENSE.txt. BMW and the BMW logo are trademarks of BMW AG. MSCoder isn't made or endorsed by BMW.

The dropdown arrows and the check mark in assets/icons are from Phosphor Icons, under the MIT License; see assets/icons/LICENSE.txt.

About

VIN and ISN management tool for BMW MS4X engine control units. Convert VIN, replace VIN, and copy ISN in binary DME files.

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages