Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
ODIS-project-explorer — ODIS에서 사용하는 MCD 런타임 프로젝트용 Python 덤퍼/탐색기 | Kitploit
도구/GitHubGitHub/kartoffelpflanze/odis-project-explorer
Embedded Systems SecurityVulnerability AnalysisReverse EngineeringDebuggersInformation GatheringBinary AnalysisFirmware Analysis
GitHubkartoffelpflanze/odis-project-explorer

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

ODIS-project-explorer

ODIS에서 사용하는 MCD 런타임 프로젝트용 Python 덤퍼/탐색기

저장소 보기
331011개월 전Kitploit 검토 완료

ODIS 프로젝트 탐색기

Nefarious Motorsports 포럼 스레드: http://nefariousmotorsports.com/forum/index.php?topic=23836.0


이 Python 프로젝트는 MCD Runtime Projects에 저장된 데이터를 언팩하고 활용하기 위한 것입니다 (흔히 ".db and .key files"라고 알려진).

일반적으로 이러한 파일은 MCD Kernel에 의해 사용되며, 이후 ODIS나 iDEX 등에서 사용됩니다. 모든 ODIS 설치에는 MCD-Kernel/VWMCDClient.exe 앱이 포함되어 있으며, 이를 통해 훨씬 낮은 수준에서 프로젝트를 조작할 수 있습니다.

이 데이터를 사용하려면 일반적으로 Include_Libs와 MCD-Kernel의 라이브러리를 사용하여 객체를 파싱하는 자체 C++/Java 앱을 작성해야 합니다. 다만 이 방식에는 몇 가지 문제가 있습니다:

  1. 커널을 사용하기 위해 "비밀 MAC"을 계산하는 방법을 알아내거나, .dll을 크랙해야 합니다.
  2. 요청한 요소가 정의되지 않으면 예외가 발생하므로 거의 모든 함수 호출을 보호해야 합니다.
  3. 일부 데이터베이스 요소는 제공된 API로 직접 접근할 수 없거나, 최소한 접근하기 어렵습니다.

이 도구를 사용하면 가능한 가장 낮은 수준에서 데이터베이스에 접근할 수 있습니다. ODX, J2534, UDS 및 기타 다른 것들을 연구하는 데 유용하기를 바랍니다.

약간의 정보

[!NOTE] 프로젝트/데이터베이스는 절대 제공되지 않습니다! 직접 준비하세요 :)

이 프로젝트가 작동하는 방식은 .db와 .key 파일의 쌍이 "Pool"을 나타낸다는 것입니다 (그리고 "PoolID"는 확장자가 없는 파일 이름을 의미합니다). 각 Pool에는 객체(Object)가 포함되어 있습니다.

모든 객체는 데이터 스트림으로 저장되며, 해당 바이트는 플래그/문자열/숫자 등으로 읽힙니다. 각각은 서로 다른 방식으로 저장되므로... Ghidra와 x64dbg에 많은 시간을 쏟았습니다. object_loaders 폴더 안을 살펴보면 그 작업량을 짐작할 수 있을 것입니다.

어떤 상황에서도 모든 객체 유형을 올바르게 로드한다고 보장하지 않습니다. 반대로, 많은 필드는 제가 느끼기에 해당하는 의미로 이름을 붙였습니다. 기본적으로 C++ 라이브러리의 모든 클래스는 다른 클래스에서 상속되며, 디컴파일된 상태에서는 제대로 이해할 수 없었다는 점을 인정해야 합니다.

시작하기

텍스트 번역에는 Java를 통해서만 사용할 수 있는 HSQLDB가 필요합니다. 따라서 JPype를 설치해야 합니다:

root@kitploit:~
pip install jpype1

각 스크립트의 사용법은 '-h' 인수를 사용하여 확인할 수 있습니다 (또는 소스 코드를 보면 됩니다).

텍스트 번역 옵션이 있는 스크립트(dumpDTC 및 parseMWB)는 데이터베이스가 필요합니다.

  • ODIS 데이터 폴더(대략 C:/ProgramData 부근)를 살펴보면 DIDB/db 폴더가 있어야 합니다.
  • 그 안에는 didb_Base-... 이름의 .data 파일이 있어야 하며, '...'은 'en_US'와 같은 언어를 나타냅니다.
  • 따라서 스크립트에 해당 폴더의 경로와 언어 접미사를 제공하세요.

이러한 데이터베이스를 제공하지 않으면 dumpDTC의 경우 "더 상세한 설명"이 없으며, parseMWB의 경우 모든 것이 ODX의 기본 LONG-NAME을 사용합니다.

스크립트 정보

dumpProject / dumpAllProjects

이 모듈들은 모든 Project의 모든 Pool에서 모든 Object를 덤프합니다. 모든 프로젝트를 덤프하려면 수십 기가바이트가 필요하고 몇 시간이 걸릴 수 있습니다. 저는 모든 파일을 빠르게 삭제하기 위해 포맷할 수 있는 별도의 파티션을 사용했습니다.

현재 상태에서 제 모든 프로젝트는 오류 없이 덤프됩니다. 2020년과 2022년 프로젝트를 시도했습니다. 이전/최신 프로젝트는 여러 이유로 덤프에 실패할 수 있으며, 가장 가능성 높은 원인은 처리되지 않은 객체 유형이거나, 처리된 객체 유형에서 처리되지 않은 필드(모든 프로젝트에서 동일했기 때문에 하드코딩했습니다)입니다.

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

이 스크립트는 "ECU-VARIANT 매칭 패턴"을 덤프하며, "변형 식별" 절차(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

이 스크립트는 "DTC 정의"를 덤프합니다. DTC(= 진단 문제 코드)에 필요한 객체만 덤프합니다 - 서비스 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

이 스크립트는 "프리즈 프레임 정의"를 덤프합니다. DTC 확장 데이터 레코드에 필요한 객체만 덤프합니다 - 서비스 0x19, 모드 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

이 스크립트는 "적응(Adaptation) 정의"를 덤프합니다. 캘리브레이션 데이터 쓰기(= ECU에서 변경할 수 있는 값)에 필요한 객체만 덤프합니다 - 서비스 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

이 스크립트는 "코딩 정의"를 덤프합니다. Variant 코딩에 필요한 객체만 덤프합니다 - 서비스 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

이 스크립트는 "MWB 정의"를 덤프합니다. MWB(= Messwertblöcke - 측정 블록)에 필요한 객체만 덤프합니다 - 서비스 0x22.

이것은 UDS 진단에서 단연 가장 중요하고 표준화되지 않은 부분이며, 이 프로젝트의 주요 목적 중 하나입니다.

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

이 스크립트는 UDS 서비스 0x22 응답을 받아 MCD Kernel과 유사하게 파싱합니다. 객체 로더를 제외하면 아마 가장 많은 작업이 필요했습니다.

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

추가 예제는 docs/mwb_examples.txt에 제공되어 있습니다.

dumpHSQLDB

이 스크립트는 HSQLDB 데이터베이스의 모든 테이블 내용을 덤프합니다. 사용자 이름과 비밀번호는 하드코딩되어 있지만, 변경될 것이라고는 예상하지 않습니다. 문제가 발생하면 다음 장을 확인하세요.

[!TIP]

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

HSQLDB

포함된 bin/hsqldb.jar은 SourceForge에서 배포된 수정되지 않은 1.8.0 릴리스입니다.

번역 데이터베이스를 제공할 때 "user does not exist"와 같은 문제가 발생하면, hsqldb.jar를 다른 이름으로 바꾸고 hsqldb_mod.jar를 hsqldb.jar로 바꿀 수 있습니다. 해당 파일은 시작 시 데이터베이스의 모든 사용자와 비밀번호를 자동으로 덤프하도록 수정되었습니다.

[!NOTE] 데이터베이스가 잘못 로드된 경우에도 "user does not exist" 오류가 표시될 수 있습니다. 올바른 경로를 제공했는지 확인하세요.

수정된 .jar는 표준 출력에 다음과 같은 내용을 출력합니다:

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

부작용으로, HSQLDB가 필요한 스크립트 중 하나에서 사용될 때 항상 이 내용이 출력됩니다.

[!TIP] 데이터베이스에서 서버를 시작하려면(직접 실험을 위해) 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

URL jdbc:hsqldb:hsql://localhost/testdb를 사용하여 연결하게 됩니다.

기여

다른 누군가가 충분히 헌신적이거나 심심하다면, 이 프로젝트에 기여하는 것을 매우 환영합니다. 단지 이슈를 제출하는 것만으로도 좋습니다.

다른 중요한 것을 덤프하는 등의 기능을 추가하고 싶다면, 현재 어떻게 덤프되는지 자유롭게 살펴보세요. 예를 들어 MWB나 DTC, 그다음 dumpProject를 사용하여 텍스트 편집기로 객체 이름, 필드 등을 검색해 볼 수 있습니다.

추가 정보

docs/MCD-2D.md에서 데이터 검증에 사용된 문서를 보기 좋게 정리된 형태로 찾을 수 있습니다.

포함된 bin/pbl.dll은 Mission-Base의 PBL 라이브러리에서 단순히 컴파일된 것입니다. .key 파일에 접근하는 데 필요합니다.


이 자원 낭비를 만드는 데 어떤 AI도 해를 입지 않았습니다. 단지 LongNameTranslation 모듈을 위해 약간의 도움을 받았을 뿐입니다. Java와 SQL 통합을 직접 알아내기에는 너무 귀찮았습니다.

도구 다운로드