masax
Mitsubishi After Sales Application (ASA) parts catalogue
About
Reverse-engineering the Mitsubishi After Sales Application — the electronic parts catalogue for Mitsubishi vehicles — so its data can be read without the original Windows application. In the spirit of dialogysx, which does the same for Renault/Dacia.
Status
The container format, the schema, the illustrations, the update packages and their checksum are all decoded.
$ masax verify <media>/M60
9495097 records decode exactly, 1889570 of them reachable through an indexThat is every record of every dataset on the original media, each checked to consume exactly its declared payload length, plus three structural invariants: the sequential walk ends exactly at the end of the file, every index offset lands on a record boundary, and the declared run keys match the data.
The gap between the two numbers is the point: the .pnt index covers only about a fifth of the records. It points at the first record of a run, and later records in a run inherit the fields they omit.
Every parts drawing decodes — 10,694 of 10,694 on disc B and 17,977 across both, none failing. They are stored as *.tif but are not TIFFs until de-obfuscated, and the Group 4 decoder is pixel-identical to a reference decoder on every drawing tested.
Joins are proven, not assumed
Walking VIN → model → group → plate → parts on catalogue B6037609A yields real, correctly described parts — 42 parts across 30 part-name codes on one plate, with two part numbers for the same PNC in the same date window separated by classification, which is what applicability is. The drawing for that plate carries exactly those callout numbers — an independent check on both the joins and the image decode.
Getting the data in
Mount the ISOs and point masax at the mount points. Nothing is extracted, nothing is converted, and the catalogue is read where it lies.
hdiutil attach -readonly MMC_ASA_EUR_A.iso # /Volumes/MMC-A
hdiutil attach -readonly MMC_ASA_EUR_B.iso # /Volumes/MMC ASA 2
masax survey /Volumes/MMC-A "/Volumes/MMC ASA 2"
masax verify /Volumes/MMC-A "/Volumes/MMC ASA 2"Neither disc is complete — disc A carries 30 of the 52 catalogues and one half of the vehicle index, disc B the rest — so the mount points are overlaid rather than chosen between.
The app
A Svelte 5 client, 47 kB gzipped, no backend and no data server.
- Choosing a folder is the primary path —
File.slice()is a range read, so a mounted disc is read in place and a 76 MBVIN.BINnever leaves it - The car sits in a toolbar across the top — VIN, catalogue, model — so "which car am I looking at" stays on screen
- English and Polish, light and dark, each with a third state that follows the system. The interface language is separate from the catalogue's own
- Installs as a progressive web app with a hand-written service worker — a worker that answered a
Rangerequest from cache would return the wrong bytes at every offset and nothing downstream would notice - A parts bin that prints as a pick list or exports as CSV, and notes that attach your own words to a part number and follow it everywhere it appears
Stack: TypeScript, Svelte 5, i18next, pnpm + Turborepo
