Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
ODIS-project-explorer — Python dumper/explorer para MCD Runtime Projects usados pela ODIS | Kitploit
Ferramentas/GitHubGitHub/kartoffelpflanze/odis-project-explorer
Segurança de Sistemas EmbarcadosAnálise de VulnerabilidadesEngenharia ReversaDepuradoresColeta de InformaçõesAnálise de BináriosAnálise de Firmware
GitHubkartoffelpflanze/odis-project-explorer

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

ODIS-project-explorer

Python dumper/explorer para MCD Runtime Projects usados pela ODIS

Ver Repositório
3310há 11 mesesRevisado pelo Kitploit

Explorador de projetos 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:

  1. Você precisa descobrir como calcular o "MAC secreto" para desbloquear o kernel para uso, ou quebrar o .dll.
  2. Quase todas as chamadas de função devem ser protegidas, pois exceções são lançadas quando o elemento solicitado não está definido.
  3. Alguns elementos do banco de dados não são diretamente acessíveis usando a API fornecida, ou pelo menos difíceis de alcançar.

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.

Um pouco de informação

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

Primeiros passos

Para tradução de texto, é necessário o HSQLDB, que só pode ser usado através do Java. Portanto, o JPype precisará ser instalado:

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

  • Dê uma olhada na sua pasta de dados do ODIS (por volta de C:/ProgramData), deve haver uma pasta DIDB/db.
  • Deve conter um arquivo .data com nome didb_Base-..., onde '...' é um idioma como 'en_US'.
  • Então, forneça aos scripts o caminho dessa pasta e o sufixo do idioma.

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.

Informações dos scripts

dumpProject / dumpAllProjects

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

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

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

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

Este script despejará "definições de DTC". Ele despejará apenas os objetos necessários para DTCs (= diagnostic trouble codes) - serviço 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

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

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

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

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

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

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

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

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

Este script pegará uma resposta do serviço UDS 0x22 e a analisará de forma semelhante ao MCD Kernel. Provavelmente foi o que mais deu trabalho, além dos carregadores de objetos.

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

Mais alguns exemplos são fornecidos em docs/mwb_examples.txt.

dumpHSQLDB

Este script despejará o conteúdo de todas as tabelas de um banco de dados HSQLDB. O nome de usuário e senha estão codificados, mas não espero que mudem. Se encontrar problemas, veja o capítulo seguinte.

[!TIP]

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

HSQLDB

O bin/hsqldb.jar incluído é uma versão não modificada do SourceForge, versão 1.8.0.

Se você encontrar problemas como "usuário não existe" ao fornecer um banco de dados de tradução, pode renomear hsqldb.jar para outra coisa e renomear hsqldb_mod.jar para hsqldb.jar. Esse foi modificado para despejar automaticamente todos os usuários e senhas de um banco de dados na inicialização.

[!NOTE] O erro "usuário não existe" também pode ser exibido se o banco de dados foi carregado incorretamente de alguma forma. Por favor, certifique-se de que forneceu o caminho correto.

O .jar modificado escreverá algo assim na saída padrão:

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

Como efeito colateral, isso sempre será impresso quando o HSQLDB for usado em um dos scripts que precisam dele.

[!TIP] Se desejar iniciar um servidor a partir de um banco de dados (para seus próprios experimentos), execute isso de dentro da pasta 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

Você se conectará a ele usando a URL jdbc:hsqldb:hsql://localhost/testdb.

Contribuindo

Se mais alguém for dedicado/entediado o suficiente, é muito bem-vindo a contribuir com este projeto, mesmo que apenas submetendo uma issue.

Se quiser adicionar funcionalidades (como despejar outras coisas importantes), fique à vontade para ver como as coisas são despejadas atualmente, como MWBs ou DTCs, depois use dumpProject e procure com um editor de texto por nomes de objetos, campos e tal.

Informações extras

Em docs/MCD-2D.md você pode encontrar a documentação usada para a validação dos dados, formatada de forma agradável.

O bin/pbl.dll incluído é simplesmente compilado a partir da biblioteca PBL da Mission-Base. É necessário para acessar os arquivos .key.


Nenhuma IA foi prejudicada na criação deste desperdício de recursos. Apenas um pouco de ajuda para o módulo LongNameTranslation. Eu não tive paciência para descobrir a integração Java e SQL sozinho.

Baixar ferramenta