Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
ODIS-project-explorer — Python-Dumper/Explorer für MCD Runtime-Projekte, die von ODIS verwendet werden | Kitploit
Tools/GitHubGitHub/kartoffelpflanze/odis-project-explorer
Embedded-System-SicherheitSchwachstellenanalyseReverse EngineeringDebuggerInformationsbeschaffungBinäranalyseFirmware-Analyse
GitHubkartoffelpflanze/odis-project-explorer

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

ODIS-project-explorer

Python-Dumper/Explorer für MCD Runtime-Projekte, die von ODIS verwendet werden

Repository anzeigen
33103vor 11 MonatenVon Kitploit geprüft

ODIS-Projekt-Explorer

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:

  1. Man muss entweder herausfinden, wie man den "geheimen MAC" berechnet, um den Kernel zur Nutzung freizuschalten, oder die .dll knacken.
  2. Fast jeder Funktionsaufruf muss abgesichert werden, da Ausnahmen ausgelöst werden, wenn das angeforderte Element nicht definiert ist.
  3. Einige Datenbankelemente sind mit der bereitgestellten API nicht direkt zugänglich oder zumindest schwer erreichbar.

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.

Ein wenig Info

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

Erste Schritte

Für die Textübersetzung wird HSQLDB benötigt, das nur über Java verwendet werden kann. Daher muss JPype installiert werden:

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

  • Schauen Sie in Ihrem ODIS-Datenordner (irgendwo in C:/ProgramData) nach, dort sollte ein DIDB/db-Ordner sein.
  • Er muss eine .data-Datei mit dem Namen didb_Base-... enthalten, wobei '...' eine Sprache wie 'en_US' ist.
  • Geben Sie den Skripten also den Pfad zu diesem Ordner und das Sprachsuffix an.

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.

Skriptinformationen

dumpProject / dumpAllProjects

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

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

Dieses Skript wird "ECU-VARIANT-Abgleichmuster" ausgeben, die für die "Variantenidentifikations"-Prozedur (Auswahl der geeigneten Datei für ein Steuergerät) notwendig sind.

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

Dieses Skript wird "DTC-Definitionen" ausgeben. Es wird nur die für DTCs (= Diagnose-Fehlercodes) notwendigen Objekte ausgeben - 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

Dieses Skript wird "Freeze Frame-Definitionen" ausgeben. Es wird nur die für erweiterte DTC-Datensätze notwendigen Objekte ausgeben - Service 0x19, Modus 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

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

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

Dieses Skript wird "Coding-Definitionen" ausgeben. Es wird nur die für das Varianten-Coding notwendigen Objekte ausgeben - 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

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

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

Dieses Skript nimmt eine UDS-Service-0x22-Antwort entgegen und parst sie ähnlich wie der MCD-Kernel. Es hat wahrscheinlich die meiste Arbeit erfordert, abgesehen von den Objektladern.

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

Einige weitere Beispiele finden Sie in docs/mwb_examples.txt.

dumpHSQLDB

Dieses Skript wird den Inhalt aller Tabellen einer HSQLDB-Datenbank ausgeben. Der Benutzername und das Passwort sind fest codiert, aber ich erwarte nicht, dass sie sich jemals ändern. Wenn Sie auf Probleme stoßen, schauen Sie sich das folgende Kapitel an.

[!TIP]

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

HSQLDB

Das enthaltene bin/hsqldb.jar ist eine unveränderte Version von SourceForge, Version 1.8.0.

Wenn Sie beim Bereitstellen einer Übersetzungsdatenbank auf Probleme wie "user does not exist" stoßen, können Sie hsqldb.jar in etwas anderes umbenennen und hsqldb_mod.jar in hsqldb.jar umbenennen. Diese wurde modifiziert, um beim Start automatisch alle Benutzer und Passwörter einer Datenbank auszugeben.

[!NOTE] Der Fehler "user does not exist" kann auch angezeigt werden, wenn die Datenbank irgendwie falsch geladen wurde. Bitte stellen Sie sicher, dass Sie den richtigen Pfad angegeben haben.

Die modifizierte .jar wird etwa Folgendes auf die Standardausgabe schreiben:

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

Als Nebeneffekt wird dies immer gedruckt, wenn HSQLDB von einem der Skripte verwendet wird, die es benötigen.

[!TIP] Wenn Sie einen Server aus einer Datenbank starten möchten (für eigene Experimente), führen Sie dies aus dem bin-Ordner aus:

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

Sie verbinden sich mit der URL jdbc:hsqldb:hsql://localhost/testdb.

Mitwirken

Wenn jemand anderes engagiert/gelangweilt genug ist, ist er herzlich willkommen, zu diesem Projekt beizutragen, auch nur durch das Einreichen eines Issues.

Wenn Sie Funktionalität hinzufügen möchten (z.B. andere wichtige Dinge auszugeben), können Sie sich gerne ansehen, wie Dinge derzeit ausgegeben werden, wie MWBs oder DTCs, dann dumpProject verwenden und mit einem Texteditor nach Objektnamen, Feldern und ähnlichem suchen.

Zusätzliche Informationen

In docs/MCD-2D.md finden Sie die für die Validierung der Daten verwendete Dokumentation, schön formatiert.

Das enthaltene bin/pbl.dll ist einfach aus der PBL-Bibliothek von Mission-Base kompiliert. Es ist für den Zugriff auf die .key-Dateien erforderlich.


Es wurde keine KI bei der Herstellung dieser Ressourcenverschwendung verletzt. Nur ein wenig Hilfe für das LongNameTranslation-Modul. Ich hatte keine Lust, die Java- und SQL-Integration selbst herauszufinden.

Tool herunterladen