
Python dumper/explorer para MCD Runtime Projects usados pela ODIS
Tópico do fórum Nefarious Motorsports: http://nefariousmotorsports.com/forum/index.php?topic=23836.0
Este projeto Python tem como objetivo desempacotar (e utilizar) os dados armazenados em MCD Runtime Projects (conhecidos coloquialmente como ".db e .key files").
Normalmente, esses arquivos são usados pelo MCD Kernel, que por sua vez é usado pelo ODIS ou iDEX ou algo assim.
Em cada instalação do ODIS, há um aplicativo MCD-Kernel/VWMCDClient.exe que pode ser usado para mexer nos projetos em um nível muito mais baixo.
Para usar esses dados, normalmente se usam as bibliotecas de Include_Libs e MCD-Kernel para escrever seu próprio aplicativo C++/Java que analisa os objetos.
No entanto, há alguns problemas com essa abordagem:
Com esta ferramenta, você pode abordar os bancos de dados a partir do nível mais baixo possível. Espero que seja útil para o estudo de ODX, J2534, UDS e o que mais vier.
[!NOTE] Nenhum projeto/banco de dados será fornecido! Por favor, traga os seus :)
A forma como esses projetos funcionam é que os pares de arquivos .db e .key representam "Pools" (e "PoolID" se refere ao nome do arquivo sem extensão). Cada pool contém Objetos.
Qualquer objeto é armazenado como um fluxo de dados, cujos bytes serão lidos como flags/strings/números etc.
Cada um é armazenado de forma diferente, então... muito tempo foi dedicado ao Ghidra e x64dbg.
Você provavelmente pode apreciar o trabalho que isso deu dando uma olhada dentro da pasta object_loaders.
Sob nenhuma circunstância garanto que estou carregando todos os tipos de objeto corretamente. Pelo contrário, muitos campos foram nomeados conforme o que eu sentia que representavam. Basicamente, toda classe na biblioteca C++ herda de outras classes e tenho que admitir que não consegui realmente entender isso quando descompilado.
Para tradução de texto, é necessário o HSQLDB, que só pode ser usado através do Java. Portanto, o JPype precisará ser instalado:
pip install jpype1
Para informações de uso de cada script, chame-os com o argumento '-h' (ou apenas veja o código-fonte).
Os scripts que têm a opção de tradução de texto (dumpDTC e parseMWB) precisarão de um banco de dados.
C:/ProgramData), deve haver uma pasta DIDB/db.didb_Base-..., onde '...' é um idioma como 'en_US'.Se você não fornecer esse banco de dados, para dumpDTC você não terá a "descrição mais detalhada", e para parseMWB tudo usará seu LONG-NAME padrão do ODX.
dumpProject / dumpAllProjectsEsses módulos despejarão todos os Objetos de cada Pool (de cada Projeto). Esteja ciente de que despejar todos os projetos exigirá algumas dezenas de gigabytes e levará algumas horas. Pessoalmente, trabalhei com uma partição separada que poderia formatar para excluir rapidamente todos os arquivos.
No estado atual, todos os meus projetos são despejados sem erros. Tentei projetos de 2020 e 2022. É possível que projetos mais antigos/novos falhem ao despejar por vários motivos, muito provavelmente tipos de objeto não tratados, ou campos não tratados em tipos de objeto tratados (que eu codifiquei manualmente, já que eram os mesmos em todos os projetos).
[!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"
dumpECUVariantPatternsEste script despejará "padrões de correspondência ECU-VARIANT", necessários para o procedimento de "identificação de variante" (selecionar o arquivo apropriado para uma 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"
dumpDTCEste script despejará "definições de DTC". Ele despejará apenas os objetos necessários para DTCs (= diagnostic trouble codes) - serviço 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
dumpFreezeFramesEste script despejará "definições de Freeze Frame". Ele despejará apenas os objetos necessários para registros de dados estendidos de DTC - serviço 0x19, modo 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
dumpAdaptationsEste script despejará "definições de Adaptação". Ele despejará apenas os objetos necessários para Gravação de Dados de Calibração (= valores que você pode alterar na ECU) - serviço 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"
dumpCodingEste script despejará "definições de Codificação". Ele despejará apenas os objetos necessários para Codificação de Variante - serviço 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"
dumpMWBEste script despejará "definições de MWB". Ele despejará apenas os objetos necessários para MWBs (= Messwertblöcke - Blocos de medição) - serviço 0x22.
Esta é de longe a parte mais importante e não padronizada do diagnóstico UDS, um dos principais propósitos deste projeto.
[!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