Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
ODIS-project-explorer — Dumper/explorateur Python pour les projets runtime MCD utilisés par ODIS | Kitploit
Outils/GitHubGitHub/kartoffelpflanze/odis-project-explorer
Sécurité des Systèmes EmbarquésAnalyse des VulnérabilitésRétro-ingénierieDébogueursCollecte d'InformationsAnalyse de BinairesAnalyse de Micrologiciel
GitHubkartoffelpflanze/odis-project-explorer

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

ODIS-project-explorer

Dumper/explorateur Python pour les projets runtime MCD utilisés par ODIS

Voir le dépôt
33103il y a 11 moisVérifié par Kitploit

Explorateur de projets 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 :

  1. Il faut soit trouver comment calculer le « MAC secret » pour déverrouiller le noyau, soit cracker la .dll.
  2. Presque chaque appel de fonction doit être protégé, car des exceptions sont levées lorsque l'élément demandé n'est pas défini.
  3. Certains éléments de la base de données ne sont pas directement accessibles via l'API fournie, ou du moins difficiles à atteindre.

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.

Un peu d'information

[!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 commencer

Pour la traduction de texte, HSQLDB est nécessaire, qui ne peut être utilisé qu'avec Java.
Par conséquent, JPype devra être installé :

root@kitploit:~
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.

  • Regardez dans votre dossier de données ODIS (quelque part autour de C:/ProgramData), il devrait y avoir un dossier DIDB/db.
  • Il doit contenir un fichier .data nommé didb_Base-..., où '...' est une langue comme 'en_US'.
  • Donc, fournissez aux scripts le chemin de ce dossier et le suffixe de langue.

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.

Informations sur les scripts

dumpProject / dumpAllProjects

Ces 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]

root@kitploit:~
python dumpProject.py "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "O:/Projects"
root@kitploit:~
python dumpAllProjects.py "C:/ProgramData/OE/MCD-Projects-E/VWMCD" "O:/Projects"

dumpECUVariantPatterns

Ce 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]

root@kitploit:~
python dumpECUVariantPatterns.py basevariant "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "0.0.0@BV_DashBoardUDS.bv" "O:/Patterns"
root@kitploit:~
python dumpECUVariantPatterns.py project "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "O:/Patterns"
root@kitploit:~
python dumpECUVariantPatterns.py projects "C:/ProgramData/OE/MCD-Projects-E/VWMCD" "O:/Patterns"

dumpDTC

Ce script videra les « définitions de DTC ».
Il videra uniquement les objets nécessaires aux DTC (= codes de diagnostic) - service 0x19.

[!TIP]

root@kitploit:~
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_US
root@kitploit:~
python dumpDTC.py project "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "O:/DTCs" "C:/ProgramData/OE/DIDB/db" en_US
root@kitploit:~
python dumpDTC.py projects "C:/ProgramData/OE/MCD-Projects-E/VWMCD" "O:/DTCs" "C:/ProgramData/OE/DIDB/db" en_US

dumpFreezeFrames

Ce 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]

root@kitploit:~
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_US
root@kitploit:~
python dumpFreezeFrames.py project "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "O:/FFs" "C:/ProgramData/OE/DIDB/db" en_US
root@kitploit:~
python dumpFreezeFrames.py projects "C:/ProgramData/OE/MCD-Projects-E/VWMCD" "O:/FFs" "C:/ProgramData/OE/DIDB/db" en_US

dumpAdaptations

Ce 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]

root@kitploit:~
python dumpAdaptations.py basevariant "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "0.0.0@BV_DashBoardUDS.bv" "O:/ADPs"
root@kitploit:~
python dumpAdaptations.py project "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "O:/ADPs"
root@kitploit:~
python dumpAdaptations.py projects "C:/ProgramData/OE/MCD-Projects-E/VWMCD" "O:/ADPs"

dumpCoding

Ce script videra les « définitions de codage ».
Il videra uniquement les objets nécessaires au codage de variante - service 0x2E, DID 0x0600.

[!TIP]

root@kitploit:~
python dumpCoding.py basevariant "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "0.0.0@BV_DashBoardUDS.bv" "O:/VRCs"
root@kitploit:~
python dumpCoding.py project "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "O:/VRCs"
root@kitploit:~
python dumpCoding.py projects "C:/ProgramData/OE/MCD-Projects-E/VWMCD" "O:/VRCs"

dumpMWB

Ce 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.

[!TIP]

root@kitploit:~
python dumpMWB.py basevariant "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "0.0.0@BV_DashBoardUDS.bv" "O:/MWBs"
root@kitploit:~
python dumpMWB.py project "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "O:/MWBs"
root@kitploit:~
python dumpMWB.py projects "C:/ProgramData/OE/MCD-Projects-E/VWMCD" "O:/MWBs"

parseMWB

Ce script prendra une réponse du service UDS 0x22 et l'analysera de manière similaire au noyau MCD.
C'est probablement ce qui a demandé le plus de travail, en dehors des chargeurs d'objets.

[!TIP]

root@kitploit:~
python parseMWB.py "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "0.0.0@BV_EnginContrModul1UDS.bv" "EV_ECM25TFS0118U0907404C_001" 0xF40C C0E4 "C:/ProgramData/OE/DIDB/db" en_US

Quelques exemples supplémentaires sont fournis dans docs/mwb_examples.txt.

dumpHSQLDB

Ce script videra le contenu de toutes les tables d'une base de données HSQLDB.
Le nom d'utilisateur et le mot de passe sont codés en dur, mais je ne m'attends pas à ce qu'ils changent un jour.
Si vous rencontrez des problèmes, consultez le chapitre suivant.

[!TIP]

root@kitploit:~
python dumpHSQLDB.py "C:/ProgramData/OE/DIDB/db" "didb_Base-en_US" "O:\HSQLDB"

HSQLDB

Le fichier bin/hsqldb.jar inclus est une version non modifiée de SourceForge, version 1.8.0.

Si vous rencontrez des erreurs comme « l'utilisateur n'existe pas » lors de la fourniture d'une base de données de traduction, vous pouvez renommer hsqldb.jar en autre chose et renommer hsqldb_mod.jar en hsqldb.jar.
Celui-ci a été modifié pour vider automatiquement tous les utilisateurs et mots de passe d'une base de données au démarrage.

[!NOTE] L'erreur « l'utilisateur n'existe pas » peut également apparaître si la base de données a été chargée incorrectement.
Veuillez vous assurer d'avoir fourni le bon chemin.

Le .jar modifié écrira quelque chose comme ceci sur la sortie standard :

root@kitploit:~
Name: PUBLIC, password: null
Name: _SYSTEM, password: null
Name: SA, password: ENMGZIRN
Name: VAUDASISTSUPER, password: ENMGZIRN

Par effet secondaire, cela sera toujours imprimé lorsque HSQLDB est utilisé depuis l'un des scripts qui en ont besoin.

[!TIP] Si vous souhaitez démarrer un serveur à partir d'une base de données (pour vos propres expériences), exécutez ceci depuis le dossier bin :

root@kitploit:~
java -cp hsqldb.jar org.hsqldb.Server -database.0 file:"C:/ProgramData/OE/DIDB/db/didb_Base-en_US" -dbname.0 testdb

Vous vous y connecterez en utilisant l'URL jdbc:hsqldb:hsql://localhost/testdb.

Contribuer

Si quelqu'un d'autre est suffisamment dévoué/ennuyé, il est le bienvenu pour contribuer à ce projet, ne serait-ce qu'en soumettant un problème.

Si vous souhaitez ajouter des fonctionnalités (comme vider d'autres éléments importants), vous êtes libre de jeter un coup d'œil à la façon dont les choses sont vidées actuellement, comme les MWB ou les DTC, puis d'utiliser dumpProject et de rechercher avec un éditeur de texte des noms d'objets, des champs, etc.

Informations supplémentaires

Dans docs/MCD-2D.md, vous trouverez la documentation utilisée pour la validation des données, joliment formatée.

Le fichier bin/pbl.dll inclus est simplement compilé à partir de la bibliothèque PBL par Mission-Base.
Il est nécessaire pour accéder aux fichiers .key.


Aucune IA n'a été blessée dans la réalisation de ce gaspillage de ressources. Juste un peu d'aide pour le module LongNameTranslation. Je n'ai pas eu envie de comprendre l'intégration Java et SQL moi-même.

Télécharger l’outil