
Dumper/esploratore Python per progetti MCD Runtime usati da ODIS
Thread del forum Nefarious Motorsports: http://nefariousmotorsports.com/forum/index.php?topic=23836.0
Questo progetto Python serve a estrarre (e utilizzare) i dati memorizzati nei progetti MCD Runtime (noti colloquialmente come "file .db e .key").
Normalmente, questi file vengono usati dal kernel MCD, che a sua volta viene usato da ODIS o iDEX o qualsiasi altra cosa.
Ogni installazione di ODIS include un'app MCD-Kernel/VWMCDClient.exe che può essere usata per armeggiare con i progetti a un livello molto più basso.
Per usare questi dati, normalmente si userebbero le librerie da Include_Libs e MCD-Kernel per scrivere una propria applicazione C++/Java che analizzi gli oggetti.
Ci sono però alcuni problemi con questo approccio:
Con questo strumento puoi accedere ai database dal livello più basso possibile. Spero che sia utile per lo studio di ODX, J2534, UDS e qualsiasi altra cosa.
[!NOTE] Non verranno mai forniti progetti/database! Portatevi i vostri :)
Il funzionamento di questi progetti è che le coppie di file .db e .key rappresentano dei "Pool" (e "PoolID" si riferisce al nome del file senza estensione). Ogni pool contiene oggetti.
Ogni oggetto è memorizzato come flusso di dati, i cui byte vengono letti come flag/stringhe/numeri ecc.
Ognuno è memorizzato in modo diverso, quindi... è stato dedicato molto tempo a Ghidra e x64dbg.
Probabilmente puoi apprezzare il lavoro che è costato dando un'occhiata alla cartella object_loaders.
In nessun caso garantisco di caricare correttamente ogni tipo di oggetto. Al contrario, molti campi sono stati nominati in base a ciò che pensavo rappresentassero. Praticamente ogni classe nella libreria C++ eredita da altre classi e devo ammettere che quando l'ho decompilata non sono riuscito a venirne a capo.
Per la traduzione dei testi è necessario HSQLDB, che può essere utilizzato solo tramite Java. Pertanto, sarà necessario installare JPype:
pip install jpype1
Per informazioni sull'uso di ogni script, chiamali con l'argomento '-h' (oppure dai un'occhiata al codice sorgente).
Gli script che hanno l'opzione di traduzione dei testi (dumpDTC e parseMWB) necessitano di un database.
C:/ProgramData), dovrebbe esserci una cartella DIDB/db.didb_Base-..., dove '...' è una lingua come 'en_US'.Se non fornisci un database del genere, per dumpDTC non avrai la "descrizione più dettagliata", e per parseMWB tutto userà il suo LONG-NAME predefinito da ODX.
dumpProject / dumpAllProjectsQuesti moduli esportano ogni oggetto da ogni pool (da ogni progetto). Tieni presente che esportare tutti i progetti richiederà alcune decine di gigabyte e un paio d'ore. Personalmente ho lavorato con una partizione separata che potevo formattare per eliminare rapidamente tutti i file.
Nello stato attuale, tutti i miei progetti vengono esportati senza errori. Ho provato progetti del 2020 e del 2022. È possibile che progetti più vecchi o più nuovi non vengano esportati per vari motivi, molto probabilmente tipi di oggetto non gestiti, o campi non gestiti in tipi di oggetto gestiti (che ho hardcodato dato che erano gli stessi in tutti i progetti).
[!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"
dumpECUVariantPatternsQuesto script esporta i "modelli di corrispondenza ECU-VARIANT", necessari per la procedura di "identificazione della variante" (selezione del file appropriato per una centralina).
[!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"
dumpDTCQuesto script esporta le "definizioni DTC". Esporta solo gli oggetti necessari per i DTC (= codici di guasto diagnostici) - servizio 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
dumpFreezeFramesQuesto script esporta le "definizioni dei Freeze Frame". Esporta solo gli oggetti necessari per i record di dati estesi dei DTC - servizio 0x19, modalità 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
dumpAdaptationsQuesto script esporta le "definizioni di adattamento". Esporta solo gli oggetti necessari per la scrittura dei dati di calibrazione (= valori che puoi modificare nella centralina) - servizio 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"
dumpCodingQuesto script esporta le "definizioni di codifica". Esporta solo gli oggetti necessari per la codifica delle varianti (Variant Coding) - servizio 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"
dumpMWBQuesto script esporta le "definizioni MWB". Esporta solo gli oggetti necessari per gli MWB (= Messwertblöcke - blocchi di misura) - servizio 0x22.
Questa è di gran lunga la parte più importante e non standardizzata della diagnostica UDS, uno degli scopi principali di questo progetto.
[!TIP]
python dumpMWB.py basevariant "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "0.0.0@BV_DashBoardUDS.bv" "O:/MWBs"python dumpMWB.py project "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "O:/MWBs"python dumpMWB.py projects "C:/ProgramData/OE/MCD-Projects-E/VWMCD" "O:/MWBs"
parseMWB