
Dumper/explorateur Python pour les projets runtime MCD utilisés par ODIS
Fil de discussion du forum Nefarious Motorsports : http://nefariousmotorsports.com/forum/index.php?topic=23836.0
Ce projet Python a pour but de décompresser (et d'utiliser) les données stockées dans les projets MCD Runtime (communément appelés « fichiers *.db et .key * »).
Normalement, ces fichiers sont utilisés par le noyau MCD, qui est ensuite utilisé par ODIS ou iDEX ou autre.
Chaque installation d'ODIS fournit une application MCD-Kernel/VWMCDClient.exe qui permet de manipuler les projets à un niveau beaucoup plus bas.
Pour utiliser ces données, on utiliserait normalement les bibliothèques de Include_Libs et MCD-Kernel pour écrire sa propre application C++/Java qui analyse les objets.
Cette approche présente cependant quelques problèmes :
Avec cet outil, vous pouvez aborder les bases de données depuis le niveau le plus bas possible.
J'espère qu'il sera utile pour l'étude d'ODX, J2534, UDS et tout autre chose.
[!NOTE] Aucun projet/base de données ne sera jamais fourni !
Veuillez apporter les vôtres :)
Le fonctionnement de ces projets est que les paires de fichiers .db et .key représentent des « Pools » (et « PoolID » fait référence au nom de fichier sans extension).
Chaque pool contient des Objets.
Tout objet est stocké sous forme de flux de données, dont les octets seront lus comme des drapeaux/chaînes/nombres, etc.
Chacun est stocké différemment, donc... beaucoup de temps a été investi dans Ghidra et x64dbg.
Vous pouvez probablement apprécier le travail nécessaire en jetant un coup d'œil dans le dossier object_loaders.
En aucun cas je ne garantis que je charge correctement chaque type d'objet.
Au contraire, de nombreux champs ont été nommés selon ce que je pensais qu'ils représentaient.
En gros, chaque classe de la bibliothèque C++ hérite d'autres classes et je dois admettre que je n'ai pas vraiment pu comprendre le schéma une fois décompilé.
Pour la traduction de texte, HSQLDB est nécessaire, qui ne peut être utilisé qu'avec Java.
Par conséquent, JPype devra être installé :
pip install jpype1
Pour obtenir des informations d'utilisation sur chaque script, appelez-les avec l'argument '-h' (ou regardez simplement le code source).
Les scripts qui ont l'option de traduction de texte (dumpDTC et parseMWB) auront besoin d'une base de données.
C:/ProgramData), il devrait y avoir un dossier DIDB/db.didb_Base-..., où '...' est une langue comme 'en_US'.Si vous ne fournissez pas une telle base de données, pour dumpDTC vous n'aurez pas la « description plus détaillée », et pour parseMWB tout utilisera son LONG-NAME par défaut d'ODX.
dumpProject / dumpAllProjectsCes modules vident tous les Objets de chaque Pool (de chaque Projet).
Sachez que vider tous les projets nécessitera quelques dizaines de gigaoctets et prendra quelques heures.
Personnellement, j'ai travaillé avec une partition séparée que je pouvais formater pour supprimer rapidement tous les fichiers.
Dans l'état actuel, tous mes projets sont vidés sans erreur.
J'ai essayé des projets de 2020 et 2022.
Il est possible que des projets plus anciens/plus récents échouent pour diverses raisons, très probablement des types d'objets non gérés, ou des champs non gérés dans des types d'objets gérés (que j'ai codés en dur car ils étaient identiques dans tous les projets).
[!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"
dumpECUVariantPatternsCe script videra les « modèles de correspondance ECU-VARIANT », nécessaires à la procédure d'« identification de variante » (sélection du fichier approprié pour un ECU).
[!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"
dumpDTCCe script videra les « définitions de DTC ».
Il videra uniquement les objets nécessaires aux DTC (= codes de diagnostic) - 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
dumpFreezeFramesCe script videra les « définitions d'images figées ».
Il videra uniquement les objets nécessaires aux enregistrements de données étendus des DTC - service 0x19, mode 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
dumpAdaptationsCe script videra les « définitions d'adaptation ».
Il videra uniquement les objets nécessaires à l'écriture de données de calibration (= valeurs que vous pouvez modifier dans l'ECU) - 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"
dumpCodingCe script videra les « définitions de codage ».
Il videra uniquement les objets nécessaires au codage de variante - 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"
dumpMWBCe script videra les « définitions MWB ».
Il videra uniquement les objets nécessaires aux MWB (= Messwertblöcke - Blocs de mesure) - service 0x22.
C'est de loin la partie la plus importante et non standardisée du diagnostic UDS, l'un des objectifs principaux de ce projet.