
ODIS द्वारा उपयोग किए जाने वाले MCD Runtime Projects के लिए Python डंपर/एक्सप्लोरर
Nefarious Motorsports फ़ोरम थ्रेड: http://nefariousmotorsports.com/forum/index.php?topic=23836.0
इस Python प्रोजेक्ट का उद्देश्य MCD Runtime Projects (बोलचाल की भाषा में "*.db और .key फ़ाइलें") में संग्रहीत डेटा को अनपैक करना (और उपयोग करना) है।
सामान्यतः, इन फ़ाइलों का उपयोग MCD Kernel द्वारा किया जाता है, जिसका उपयोग ODIS या iDEX या कुछ और द्वारा किया जाता है।
प्रत्येक ODIS इंस्टॉलेशन के साथ एक ऐप MCD-Kernel/VWMCDClient.exe प्रदान किया जाता है जिसका उपयोग प्रोजेक्ट्स के साथ बहुत निचले स्तर पर छेड़छाड़ करने के लिए किया जा सकता है।
इस डेटा का उपयोग करने के लिए, सामान्यतः कोई व्यक्ति Include_Libs और MCD-Kernel से लाइब्रेरीज़ का उपयोग करके अपना स्वयं का C++/Java ऐप लिखेगा जो ऑब्जेक्ट्स को पार्स करता है।
हालाँकि, इस दृष्टिकोण के साथ कुछ समस्याएँ हैं:
इस टूल के साथ, आप डेटाबेस को सबसे निचले संभव स्तर से देख सकते हैं। मुझे उम्मीद है कि यह ODX, J2534, UDS और बाकी सब चीज़ों के अध्ययन के लिए उपयोगी होगा।
[!NOTE] कोई प्रोजेक्ट/डेटाबेस कभी प्रदान नहीं किया जाएगा! कृपया अपना स्वयं का लाएँ :)
इन प्रोजेक्ट्स के काम करने का तरीका यह है कि .db और .key फ़ाइलों के जोड़े "Pools" (और "PoolID" का अर्थ है बिना एक्सटेंशन के फ़ाइल का नाम) का प्रतिनिधित्व करते हैं। प्रत्येक पूल में Objects होते हैं।
किसी भी ऑब्जेक्ट को डेटा स्ट्रीम के रूप में संग्रहीत किया जाता है, जिसके बाइट्स को फ़्लैग/स्ट्रिंग्स/नंबर आदि के रूप में पढ़ा जाएगा।
हर एक को अलग तरीके से संग्रहीत किया जाता है, इसलिए... Ghidra और x64dbg में बहुत समय लगाया गया।
आप शायद object_loaders फ़ोल्डर के अंदर देखकर इस काम की सराहना कर सकते हैं।
मैं किसी भी स्थिति में गारंटी नहीं देता कि मैं प्रत्येक ऑब्जेक्ट प्रकार को सही ढंग से लोड कर रहा हूँ। इसके विपरीत, कई फ़ील्ड को मैंने उसी नाम से नाम दिया जो मुझे लगा कि वे दर्शाते हैं। मूल रूप से C++ लाइब्रेरी में प्रत्येक वर्ग अन्य वर्गों से विरासत में मिलता है और मुझे यह स्वीकार करना होगा कि जब डीकंपाइल किया गया तो मैं वास्तव में इसे पूरी तरह से समझ नहीं पाया।
टेक्स्ट अनुवाद के लिए, HSQLDB की आवश्यकता है, जिसे केवल Java के माध्यम से उपयोग किया जा सकता है। इसलिए, JPype को स्थापित करने की आवश्यकता होगी:
pip install jpype1
प्रत्येक स्क्रिप्ट के उपयोग की जानकारी के लिए, उन्हें आर्गुमेंट '-h' के साथ कॉल करें (या बस स्रोत कोड देखें)।
जिन स्क्रिप्ट्स में टेक्स्ट अनुवाद का विकल्प है (dumpDTC और parseMWB) उन्हें डेटाबेस की आवश्यकता होगी।
C:/ProgramData में), वहाँ एक DIDB/db फ़ोल्डर होना चाहिए।didb_Base-... के साथ एक .data फ़ाइल होनी चाहिए, जहाँ '...' एक भाषा है जैसे 'en_US'।यदि आप ऐसा कोई डेटाबेस प्रदान नहीं करते हैं, तो dumpDTC के लिए आपके पास "अधिक विस्तृत विवरण" नहीं होगा,
और parseMWB के लिए सब कुछ ODX से अपने डिफ़ॉल्ट LONG-NAME का उपयोग करेगा।
dumpProject / dumpAllProjectsये मॉड्यूल प्रत्येक Pool (प्रत्येक Project से) से प्रत्येक Object को डंप करेंगे। कृपया ध्यान दें कि सभी प्रोजेक्ट्स को डंप करने के लिए कुछ दसियों गीगाबाइट की आवश्यकता होगी और इसमें कुछ घंटे लगेंगे। मैंने व्यक्तिगत रूप से एक अलग पार्टीशन के साथ काम किया जिसे मैं सभी फ़ाइलों को जल्दी से हटाने के लिए फ़ॉर्मेट कर सकता था।
वर्तमान स्थिति में, मेरे सभी प्रोजेक्ट बिना किसी त्रुटि के डंप हो जाते हैं। मैंने 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-VARIANT मैचिंग पैटर्न" डंप करेगी, जो "वैरिएंट पहचान" प्रक्रिया के लिए आवश्यक है (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 परिभाषाएँ" डंप करेगी। यह केवल DTCs (= डायग्नोस्टिक ट्रबल कोड) के लिए आवश्यक ऑब्जेक्ट डंप करेगी - सेवा 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
dumpFreezeFramesयह स्क्रिप्ट "Freeze Frame परिभाषाएँ" डंप करेगी। यह केवल 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_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
dumpAdaptationsयह स्क्रिप्ट "Adaptation परिभाषाएँ" डंप करेगी। यह केवल कैलिब्रेशन डेटा लिखने के लिए आवश्यक ऑब्जेक्ट डंप करेगी (= वे मान जिन्हें आप 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यह स्क्रिप्ट "Coding परिभाषाएँ" डंप करेगी। यह केवल वैरिएंट कोडिंग के लिए आवश्यक ऑब्जेक्ट डंप करेगी - सेवा 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 परिभाषाएँ" डंप करेगी। यह केवल MWBs (= Messwertblöcke - मापने वाले ब्लॉक) के लिए आवश्यक ऑब्जेक्ट डंप करेगी - सेवा 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 Kernel के समान पार्स करेगी। इसने शायद सबसे अधिक काम लिया, ऑब्जेक्ट लोडर के अलावा।