17 KiB
Xhorse Multi-PROG Script Development Resources
Generated: 2026-08-29
Official Documentation
Multi-PROG Script Function Manual (PDF)
https://www.xhorsevvdi.com/upload/pro/24040217120425363837.pdf
Notes:
- Official JavaScript scripting manual
- Local Scripts and Released Features
- Script publishing (.mjs)
- Built-in functions window
- Uint8Array examples
- Device/file/interface APIs
Multi-PROG User Manual (PDF)
https://www.xhorsevvdi.com/upload/pro/23122817038226585731.pdf
Notes:
- EEPROM workflows
- MCU workflows
- ECU/TCU workflows
- Third-party script support
Script Development Guides
How to Make First Script with Xhorse Multi-Prog
https://blog.xhorsetool.com/how-to-make-first-script-with-xhorse-multi-prog/
Notes:
- JavaScript-based scripting
- Importing scripts
- Publishing scripts
- Volkswagen MED9.5.10 example
- Script toolbar buttons
BMW CAS4+ KM Script Example
https://blog.xhorsevvdi.com/xhorse-multi-prog-bmw-cas4-km-repair-script-test/
Notes:
- Demonstrates importing and running a released script
- Shows script toolbar integration
Official Product and Support Pages
Multi-Prog Main Product Page
https://www.xhorsevvdi.com/wholesale/vvdi-multi-prog.html
Multi-Prog Support Portal
https://www.xhorsevvdi.com/service/how-to-use-xhorse-multi-prog-programmer.html
Multi-Prog Category Archive
https://blog.xhorsevvdi.com/category/multi-prog/
Useful for:
- New examples
- ECU clone articles
- Connection diagrams
- User-reported solutions
Multi-PROG Script Workspace Structure
Recommended workspace:
Multi-PROG/ ├── Documentation/ ├── Scripts/ │ ├── Libraries/ │ ├── Templates/ │ ├── Examples/ │ └── Released/ ├── TestData/ └── Backups/
Keep exported .mjs files in Scripts/Released, use only copies in TestData, and retain
verified original reads in Backups. The setup script creates this layout under
P:\PortableApps\Automotive\Xhorse\Multi-PROG when P: is available, with a local C: fallback.
Its created directories are Documentation, Scripts/Libraries, Scripts/Templates,
Scripts/Examples, Scripts/Released, TestData, and Backups.
Official Software Installers (opt-in)
Running the setup script with -InstallXhorseSoftware downloads these installers directly from
Xhorse's own download servers to the shared P:\Install\Xhorse\... folders and launches each one
interactively. Nothing is installed silently: complete the license terms, installation path, and
dongle pairing prompts yourself, and connect the hardware only when the installer asks for it.
Multi-PROG software installer
https://dl.xhorse.com/product/multiProg/Multi-PROG.exe
VVDI-MLB software installer
http://dl.xhorse.net.cn/product/vvdimlb/VVDI-MLB.exe
MVCI PRO (J2534 pass-thru) software installer
http://dl.xhorse.com/product/mvci/MVCI_PRO-J2534.exe
Notes:
- Xhorse's MVCI PRO CDN returns HTTP 403 over HTTPS, so this asset is fetched over plain HTTP. Verify the downloaded file (e.g. digital signature, vendor-published hash if published) before running it on a production machine.
- MVCI PRO user manual: http://dl.xhorse.com/p/vd06/userManual.pdf
JavaScript References
MDN JavaScript
https://developer.mozilla.org/en-US/docs/Web/JavaScript
Uint8Array Reference
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array
ArrayBuffer Reference
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer
DataView Reference
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView
Portable VS Code Extensions
The workstation setup installs these extensions into the portable VS Code instance after Code.exe
is available. They support offline analysis and development; they do not program or communicate
with a vehicle module unless a user explicitly configures separate, authorized hardware tooling.
- Hex Editor (
ms-vscode.hexeditor): inspect EEPROM, flash, and binary files without altering the source file. - Serial Monitor (
ms-vscode.vscode-serial-monitor): observe authorized bench serial output. - Python (
ms-python.python), C/C++ (ms-vscode.cpptools), CMake Tools (ms-vscode.cmake-tools), and Makefile Tools (ms-vscode.makefile-tools): build offline parsers, diff tools, and documented test utilities. - PowerShell (
ms-vscode.powershell): maintain the Windows automation scripts. - YAML (
redhat.vscode-yaml), XML (redhat.vscode-xml), and Even Better TOML (tamasfe.even-better-toml): inspect structured configuration and metadata files.
Extension installs use VS Code's --install-extension <publisher.extension> command with --force
to update an existing extension. Individual extension failures are logged and do not stop the rest
of the workstation setup.
Reverse-Engineering Workspace
The setup creates C:\Automotive\Projects\ReverseEngineering with Originals, WorkingCopies,
Disassembly, Decompiled, Signatures, Scripts, and Reports subdirectories, plus a Desktop
and Start Menu shortcut. Preserve source reads in Originals, perform analysis only on duplicates
in WorkingCopies, and save derived artifacts separately. The workstation does not add routines
for vehicle-module programming, erase, or write operations.
Useful Open Source Libraries
CyberChef
https://github.com/gchq/CyberChef
ImHex
https://github.com/WerWolv/ImHex
jq
yq
https://github.com/mikefarah/yq
Research and Binary Analysis Tools
Ghidra
https://github.com/NationalSecurityAgency/ghidra
Binwalk
https://github.com/ReFirmLabs/binwalk
Kaitai Struct
https://github.com/kaitai-io/kaitai_struct
Frhed
Suggested Safe Starter Scripts
- Buffer Compare
- EEPROM Inspector
- VIN Finder
- DTC Pattern Search
- Header Decoder
- Generic XOR Checksum Tester
- Generic Additive Checksum Tester
- File Structure Analyzer
- Binary Diff Report Generator
- Backup Verification Utility
Recommended Development Workflow
- Create script in Local Scripts.
- Use read-only functions first.
- Test against sample files.
- Save original backups.
- Use Debug > Test.
- Review Messages window.
- Publish to .mjs.
- Import into Released Features.
- Run on test data.
- Version-control all scripts.
GitHub Multi-PROG Script Repositories
CarKeyGuyNL / Multi-Prog-Scripts
https://github.com/CarKeyGuyNL/Multi-Prog-Scripts
Repository contents currently include an Xhorse Multi-PROG .mjs example and import instructions. Treat third-party scripts as untrusted until reviewed offline. Do not run scripts that alter security, keys, odometer, airbag, or module data without explicit authorization and a verified backup.
The repository's currently listed example is an EWS code calculator. It is intentionally not included in the generated workspace: do not import or run code-generation, key, security, or module-write scripts unless they are authorized, version-matched, independently reviewed, and tested on non-production data.
MHH Auto Forum
MHH Auto can be useful for locating discussion and compatibility reports, but access and content vary by forum section. Treat every attachment and script as untrusted: verify authorship and license, scan it offline, inspect all device and file-write paths, and never use forum material as the sole source for pinout, voltage, checksum, or security-data decisions.
Included Read-Only Script Pack
The setup script creates these JavaScript files under Scripts/Examples. They are self-contained,
use only standard JavaScript and Uint8Array, and do not call Multi-PROG device, erase, write,
security, key, or odometer APIs.
ReadOnlyBinaryAnalysis.js
- Finds exact byte sequences in a supplied buffer.
- Lists printable ASCII runs with their offsets.
- Produces a bounded hexadecimal preview.
ChecksumTestVectors.js
- Verifies generic modulo-256 additive and byte-wise XOR helper logic against known values.
- Does not identify, validate, or correct an ECU checksum.
SafeBufferUtilities.js
- Provides bounded range copies, byte comparisons, hexadecimal formatting, and generic checksum helpers.
- Keeps all operations read-only and leaves device/file acquisition to documented version-specific APIs.
GitHub repository search: Xhorse Multi-PROG
https://github.com/search?q=%22Multi-PROG%22+Xhorse&type=repositories
GitHub code search: Multi-PROG .mjs
https://github.com/search?q=%22Multi-PROG%22+extension%3Amjs&type=code
GitHub topic: ECU
Use topic results for research only. A project mentioning checksums or flashing is not automatically compatible with Multi-PROG.
Automotive Checksum References
VancePeterson / checksum-finder
https://github.com/VancePeterson/checksum-finder
Python toolkit for analyzing automotive diagnostic data and testing candidate checksum algorithms. Review the repository before use because it also contains security-analysis utilities unrelated to ordinary checksum validation.
OpenRemap
https://pypi.org/project/openremap/
Offline ECU binary identification and health-checking toolkit with checksum detection coverage for several ECU families. Use detection results as supporting evidence, not as a reason to write a file automatically.
ME7Sum
https://github.com/nyetwurk/ME7Sum
Reference implementation for checking and correcting checksums in specific Bosch Motronic ME7 firmware families. It is not a generic ECU checksum engine.
VW Flash
https://github.com/bri3d/VW_Flash
Research reference containing checksum implementations for supported Volkswagen control-unit families. Applicability must be confirmed by exact ECU family and software version.
CRC Catalogue and Calculator
https://reveng.sourceforge.io/crc-catalogue/ https://reveng.sourceforge.io/
Useful for identifying standard CRC parameter sets. ECU checksums are often family-specific and may not match a standard catalogue entry.
JavaScript CRC-32 reference implementation
https://gist.github.com/diachedelic/582ac8fab84b7f2c34ff358ac5cc7cfa
Small Uint8Array-oriented CRC-32 implementation. Review and test against known vectors before adapting it to Multi-PROG.
JavaScript Binary and Helper Libraries
MDN Uint8Array
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array
MDN ArrayBuffer
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer
MDN DataView
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView
SheetJS CRC-32
https://github.com/SheetJS/js-crc32
General JavaScript CRC-32 implementation. Multi-PROG compatibility depends on its embedded JavaScript runtime and supported syntax.
easy-crc
https://github.com/jaehaklee/easy-crc
JavaScript/TypeScript CRC library covering multiple CRC parameter combinations. Use it as an algorithm reference if the Multi-PROG runtime cannot load Node packages directly.
js-checksum
https://github.com/btnguyen2k/js-checksum
Configurable JavaScript hash/checksum library supporting typed arrays, ArrayBuffer, and DataView. This is mainly useful for development outside Multi-PROG or for porting individual pure functions.
BrowserCheckSum
https://github.com/Samuel-Hinchliffe/BrowserCheckSum
Browser-oriented cryptographic hash helper for files and ArrayBuffer data. It is more suitable for backup-integrity verification than ECU-family checksum correction.
Kaitai Struct
https://github.com/kaitai-io/kaitai_struct https://ide.kaitai.io/
Declarative binary-format tooling useful for documenting repeatable EEPROM and firmware structures before implementing a read-only Multi-PROG parser.
ImHex Patterns
https://github.com/WerWolv/ImHex-Patterns
Community binary-format patterns for ImHex. Patterns must be reviewed and matched to the exact target format before use.
Recommended Library Adoption Pattern
- Keep upstream references in
Documentation/References. - Copy only small, reviewed, license-compatible pure functions into
Scripts/Libraries. - Record source URL, commit/tag, license, and retrieval date in each adapted file.
- Avoid Node-only features such as
require, npm resolution, filesystem modules, or browser APIs unless Multi-PROG explicitly supports them. - Prefer
var, ordinary functions,Uint8Array, bounded loops, and explicit range validation. - Validate checksum code with published test vectors and at least two known-good binaries.
- Keep checksum detection separate from correction.
- Never write a corrected file until the exact ECU family, software version, covered ranges, stored checksum locations, byte order, and algorithm parameters are independently verified.
- Never auto-run a downloaded
.mjs; inspect it first and test only against duplicate offline data.
Additional GitHub Repositories
MEDC17 Checksum Tool
https://github.com/ConnorHowell/medc17-checksum-tool
Family-specific Bosch MED17/EDC17 checksum analyzer. Use its read-only analysis mode first and do not assume it supports every software variant or code-section change.
EasyTuner
https://github.com/RKDimitrov/easytuner
Research-oriented ECU firmware analysis and map-recognition platform. Useful for studying project structure, annotations, and non-destructive analysis workflows.
romHEX14 Community
https://github.com/ctabuyo/romHEX14-community
Open-source calibration editor with checksum-plugin architecture and tests. Its plugin interfaces are useful references for separating detection, analysis, correction, and verification.
Awesome Binary Parsing
https://github.com/dloss/binary-parsing
Curated directory of binary parsing libraries, including JavaScript projects such as binary-parser, jBinary, Binpat, and restructure.
binary-parser
https://github.com/keichi/binary-parser
Declarative JavaScript parser for integers, strings, arrays, bitfields, choices, and pointers. It expects a Node/module environment, so port only small pure ideas to Multi-PROG unless module loading is documented.
jBinary
https://jdataview.github.io/jBinary/
Declarative read/write binary-data library built on jDataView. Useful as a design reference for endian-aware field readers.
Expanded Checksum Library Usage
Required parameters
Before calling a checksum implementation, document:
- Algorithm family and width
- Covered start/end offsets
- Included and excluded blocks
- Byte or word processing order
- Little-endian or big-endian interpretation
- Initial accumulator or CRC seed
- CRC polynomial
- Input/output reflection
- Final XOR, complement, or negation
- Stored-checksum offset and width
- Whether the stored field is zeroed, skipped, or included during calculation
- Whether a descriptor table defines multiple protected blocks
Detection versus correction
Detection is read-only: calculate candidate values and compare them with stored values. Correction writes new checksum bytes. Keep these as separate functions and make correction require explicit, validated metadata.
Minimum validation set
- Run the algorithm against an untouched known-good file.
- Confirm every expected stored checksum.
- Change one non-checksum byte in a copy.
- Confirm that detection reports an error.
- Correct a new output copy, never the input.
- Confirm only expected checksum storage bytes changed besides the deliberate edit.
- Re-run the detector against the output.
- Cross-check with a second independent implementation.
- Retain hashes and binary-diff reports for input and output.
Library roles
- ME7Sum is specific to supported Motronic ME7 images.
- MEDC17 tools are specific to supported Bosch MED17/EDC17 structures and variants.
- RevEng helps identify standard CRC parameter sets, but does not establish ECU applicability.
- Generic JavaScript CRC libraries implement math, not ECU block discovery or metadata validation.
- Cryptographic SHA/MD5 libraries are useful for file identity and backup verification, not as replacements for ECU checksums.
JavaScript Helper Function Explanations
Range validation
A helper should reject negative offsets, negative lengths, arithmetic overflow, and any range extending beyond the Uint8Array. Perform validation before every parse or checksum operation. Reuse one validateRange helper so copy and checksum functions enforce the same boundary rules.
Endian readers
Create explicit helpers such as readU16LE, readU16BE, readU32LE, and readU32BE. Explicit names prevent a parser from silently applying the wrong byte order.
Hex formatting
toHexByte and bytesToHex should format values without changing the underlying buffer. Formatting functions should never be mixed with write logic.
Binary comparison
compareBytes should return offsets and both values. Use it to verify repeated reads and to prove that a transformation touched only expected locations.
Checksums
additiveChecksum8 and xorChecksum8 are generic teaching helpers. Their output has meaning only when the exact algorithm and range are independently known.
Runtime constraints
Multi-PROG documents JavaScript and Uint8Array support, but this does not imply Node.js or browser compatibility. Avoid require, npm imports, Buffer, DOM APIs, network calls, dynamic evaluation, and unsupported modern syntax. Prefer self-contained pure functions.