
Python-Dumper/Explorer für MCD Runtime-Projekte, die von ODIS verwendet werden
Nefarious Motorsports Forum-Thread: http://nefariousmotorsports.com/forum/index.php?topic=23836.0
Dieses Python-Projekt dient dazu, die in MCD Runtime Projects gespeicherten Daten zu entpacken (und zu nutzen) (umgangssprachlich als "*.db and .key files" bekannt).
Normalerweise werden diese Dateien vom MCD-Kernel verwendet, der dann von ODIS oder iDEX oder ähnlichem genutzt wird.
Mit jeder ODIS-Installation wird eine App MCD-Kernel/VWMCDClient.exe bereitgestellt, mit der man auf einer viel niedrigeren Ebene mit den Projekten herumspielen kann.
Um diese Daten zu nutzen, würde man normalerweise die Bibliotheken aus Include_Libs und MCD-Kernel verwenden, um eine eigene C++/Java-App zu schreiben, die die Objekte parst.
Es gibt jedoch einige Probleme mit diesem Ansatz:
Mit diesem Tool können Sie die Datenbanken von der niedrigstmöglichen Ebene aus angehen. Ich hoffe, es ist für das Studium von ODX, J2534, UDS und was auch immer sonst nützlich.
[!NOTE] Es werden niemals Projekte/Datenbanken bereitgestellt! Bitte bringen Sie Ihre eigenen mit :)
Die Funktionsweise dieser Projekte ist, dass die Paare von .db- und .key-Dateien "Pools" darstellen (und "PoolID" bezieht sich auf den Dateinamen ohne Erweiterung). Jeder Pool enthält Objekte.
Jedes Objekt wird als Datenstrom gespeichert, dessen Bytes als Flags/Zeichenfolgen/Zahlen usw. gelesen werden.
Jedes ist anders gespeichert, also... viel Zeit wurde in Ghidra und x64dbg gesteckt.
Sie können die geleistete Arbeit wahrscheinlich würdigen, wenn Sie einen Blick in den Ordner object_loaders werfen.
Unter keinen Umständen garantiere ich, dass ich jeden Objekttyp korrekt lade. Im Gegenteil, viele Felder wurden so benannt, wie ich das Gefühl hatte, was sie darstellen. Grundsätzlich erbt jede Klasse in der C++-Bibliothek von anderen Klassen, und ich muss zugeben, dass ich es beim Dekompilieren nicht wirklich verstanden habe.
Für die Textübersetzung wird HSQLDB benötigt, das nur über Java verwendet werden kann. Daher muss JPype installiert werden:
pip install jpype1
Für Nutzungsinformationen zu jedem Skript rufen Sie es mit dem Argument '-h' auf (oder schauen Sie einfach in den Quellcode).
Die Skripte, die die Option der Textübersetzung haben (dumpDTC und parseMWB), benötigen eine Datenbank.
C:/ProgramData) nach, dort sollte ein DIDB/db-Ordner sein.didb_Base-... enthalten, wobei '...' eine Sprache wie 'en_US' ist.Wenn Sie keine solche Datenbank angeben, haben Sie bei dumpDTC keine "detailliertere Beschreibung",
und bei parseMWB verwendet alles seinen standardmäßigen LONG-NAME aus ODX.
dumpProject / dumpAllProjectsDiese Module werden jedes Objekt aus jedem Pool (aus jedem Projekt) ausgeben. Seien Sie sich bewusst, dass das Ausgeben aller Projekte einige zehn Gigabyte erfordert und ein paar Stunden dauert. Ich persönlich habe mit einer separaten Partition gearbeitet, die ich formatieren konnte, um alle Dateien schnell zu löschen.
Im aktuellen Zustand werden alle meine Projekte fehlerfrei ausgegeben. Ich habe Projekte von 2020 und 2022 getestet. Es ist möglich, dass ältere/neuere Projekte aus verschiedenen Gründen nicht ausgegeben werden können, höchstwahrscheinlich aufgrund nicht behandelter Objekttypen oder nicht behandelter Felder in behandelten Objekttypen (die ich fest codiert habe, da sie in allen Projekten gleich waren).
[!TIP]
python dumpProject.py "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "O:/Projects"python dumpAllProjects.py "C:/ProgramData/OE/MCD-Projects-E/VWMCD" "O:/Projects"
dumpECUVariantPatternsDieses Skript wird "ECU-VARIANT-Abgleichmuster" ausgeben, die für die "Variantenidentifikations"-Prozedur (Auswahl der geeigneten Datei für ein Steuergerät) notwendig sind.
[!TIP]
python dumpECUVariantPatterns.py basevariant "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "0.0.0@BV_DashBoardUDS.bv" "O:/Patterns"python dumpECUVariantPatterns.py project "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "O:/Patterns"python dumpECUVariantPatterns.py projects "C:/ProgramData/OE/MCD-Projects-E/VWMCD" "O:/Patterns"
dumpDTCDieses Skript wird "DTC-Definitionen" ausgeben. Es wird nur die für DTCs (= Diagnose-Fehlercodes) notwendigen Objekte ausgeben - Service 0x19.
[!TIP]
python dumpDTC.py basevariant "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "0.0.0@BV_DashBoardUDS.bv" "O:/DTCs" "C:/ProgramData/OE/DIDB/db" en_USpython dumpDTC.py project "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "O:/DTCs" "C:/ProgramData/OE/DIDB/db" en_USpython dumpDTC.py projects "C:/ProgramData/OE/MCD-Projects-E/VWMCD" "O:/DTCs" "C:/ProgramData/OE/DIDB/db" en_US
dumpFreezeFramesDieses Skript wird "Freeze Frame-Definitionen" ausgeben. Es wird nur die für erweiterte DTC-Datensätze notwendigen Objekte ausgeben - Service 0x19, Modus 0x06.
[!TIP]
python dumpFreezeFrames.py basevariant "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "0.0.0@BV_DashBoardUDS.bv" "O:/FFs" "C:/ProgramData/OE/DIDB/db" en_USpython dumpFreezeFrames.py project "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "O:/FFs" "C:/ProgramData/OE/DIDB/db" en_USpython dumpFreezeFrames.py projects "C:/ProgramData/OE/MCD-Projects-E/VWMCD" "O:/FFs" "C:/ProgramData/OE/DIDB/db" en_US
dumpAdaptationsDieses Skript wird "Adaptionsdefinitionen" ausgeben. Es wird nur die für das Schreiben von Kalibrierdaten (= Werte, die Sie im Steuergerät ändern können) notwendigen Objekte ausgeben - Service 0x2E.
[!TIP]
python dumpAdaptations.py basevariant "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "0.0.0@BV_DashBoardUDS.bv" "O:/ADPs"python dumpAdaptations.py project "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "O:/ADPs"python dumpAdaptations.py projects "C:/ProgramData/OE/MCD-Projects-E/VWMCD" "O:/ADPs"
dumpCodingDieses Skript wird "Coding-Definitionen" ausgeben. Es wird nur die für das Varianten-Coding notwendigen Objekte ausgeben - Service 0x2E, DID 0x0600.
[!TIP]
python dumpCoding.py basevariant "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "0.0.0@BV_DashBoardUDS.bv" "O:/VRCs"python dumpCoding.py project "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "O:/VRCs"python dumpCoding.py projects "C:/ProgramData/OE/MCD-Projects-E/VWMCD" "O:/VRCs"
dumpMWBDieses Skript wird "MWB-Definitionen" ausgeben. Es wird nur die für MWBs (= Messwertblöcke) notwendigen Objekte ausgeben - Service 0x22.
Dies ist mit Abstand der wichtigste und nicht standardisierte Teil der UDS-Diagnose, einer der Hauptzwecke dieses Projekts.