Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/kartoffelpflanze/odis-project-explorer
嵌入式系统安全漏洞分析逆向工程调试器信息收集二进制分析固件分析
GitHubkartoffelpflanze/odis-project-explorer

ODIS-project-explorer

用于ODIS中MCD Runtime Projects的Python转储器/浏览器

查看仓库
3310161年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

ODIS 项目探索器

Nefarious Motorsports 论坛帖子:http://nefariousmotorsports.com/forum/index.php?topic=23836.0


这个 Python 项目旨在解包(并利用)MCD 运行时项目中存储的数据(俗称 "*.db 和 .key 文件")。

通常情况下,这些文件由 MCD 内核使用,然后由 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 文件代表“池”(而“PoolID”指不带扩展名的文件名)。 每个池包含对象。

任何对象都存储为数据流,其字节将被读取为标志、字符串、数字等。 每个对象的存储方式都不同,因此……大量时间投入到了 Ghidra 和 x64dbg 中。 查看 object_loaders 文件夹,您可能会体会到为此付出的努力。

无论如何,我不保证我正确加载了每种对象类型。 相反,许多字段是根据我的感觉命名的。 基本上,C++ 库中的每个类都继承自其他类,而且我必须承认,反编译后我实在无法完全理解。

快速入门

对于文本翻译,需要 HSQLDB,它只能通过 Java 使用。 因此,需要安装 JPype:

pip install jpype1

关于每个脚本的使用信息,请使用参数 '-h' 调用它们(或者直接查看源代码)。

具有文本翻译选项的脚本(dumpDTC 和 parseMWB)需要数据库。

  • 查看您的 ODIS 数据文件夹(大约在 C:/ProgramData 下),应该有一个 DIDB/db 文件夹。
  • 它必须包含一个名为 didb_Base-... 的 .data 文件,其中 '...' 是语言代码,如 'en_US'。
  • 因此,向脚本提供该文件夹的路径和语言后缀。

如果没有提供这样的数据库,对于 dumpDTC,您将无法获得“更详细的描述”, 而对于 parseMWB,所有内容将使用其默认的 ODX LONG-NAME。

脚本信息

dumpProject / dumpAllProjects

这些模块将转储每个项目每个池中的每个对象。 请注意,转储所有项目将需要几十 GB 的空间,并花费几个小时。 我个人使用了一个单独的分区,可以格式化以快速删除所有文件。

在当前状态下,我的所有项目都能无错误地转储。 我尝试了 2020 年和 2022 年的项目。较旧/较新的项目可能会因各种原因而转储失败,最可能是未处理的对象类型, 或已处理对象类型中的未处理字段(我在代码中硬编码了这些字段,因为它们在所有项目中相同)。

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

dumpECUVariantPatterns

此脚本将转储“ECU-变体匹配模式”,用于“变体识别”过程(为 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"

dumpDTC

此脚本将转储“DTC 定义”。 它只会转储与 DTC(诊断故障码)相关的对象 - 服务 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_US
python dumpDTC.py project "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "O:/DTCs" "C:/ProgramData/OE/DIDB/db" en_US
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]

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
python dumpFreezeFrames.py project "C:/ProgramData/OE/MCD-Projects-E/VWMCD/AU21X" "O:/FFs" "C:/ProgramData/OE/DIDB/db" en_US
python dumpFreezeFrames.py projects "C:/ProgramData/OE/MCD-Projects-E/VWMCD" "O:/FFs" "C:/ProgramData/OE/DIDB/db" en_US

dumpAdaptations

此脚本将转储“自适应定义”。 它只会转储与校准数据写入(即您可以在 ECU 中更改的值)相关的对象 - 服务 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"

dumpCoding

此脚本将转储“编码定义”。 它只会转储与变体编码相关的对象 - 服务 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"

dumpMWB

此脚本将转储“MWB 定义”。 它只会转储与 MWB(测量块)相关的对象 - 服务 0x22。

这是 UDS 诊断中最重要且非标准化的部分之一,也是本项目的主要目的之一。

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

此脚本将接收 UDS 服务 0x22 的响应,并类似于 MCD 内核的方式进行解析。这可能是工作量最大的部分,除了对象加载器之外。

[!TIP]

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]

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

HSQLDB

包含的 bin/hsqldb.jar 是来自 SourceForge 的未修改版本 1.8.0。

如果提供翻译数据库时遇到类似“用户不存在”的问题, 您可以将 hsqldb.jar 重命名为其他名称,然后将 hsqldb_mod.jar 重命名为 hsqldb.jar。 该版本已修改,可在启动时自动转储数据库的所有用户和密码。

[!NOTE] 如果数据库加载不正确,也可能显示“用户不存在”错误。 请确保您提供了正确的路径。

修改后的 .jar 会向标准输出写入类似以下内容:

Name: PUBLIC, password: null
Name: _SYSTEM, password: null
Name: SA, password: ENMGZIRN
Name: VAUDASISTSUPER, password: ENMGZIRN

作为副作用,当从需要它的脚本中使用 HSQLDB 时,总会打印此信息。

[!TIP] 如果您想从数据库启动一个服务器(用于自己的实验),请在 bin 文件夹中运行以下命令:

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 的集成。

下载工具