
Qualcomm Hexagon बेसबैंड / मॉडेम फर्मवेयर को रिवर्स करने के लिए स्क्रिप्ट्स का संग्रह
क्वालकॉम बेसबैंड / मॉडेम फ़र्मवेयर को रिवर्स करने के लिए स्क्रिप्ट्स का संग्रह
स्क्रिप्ट्स में सभी ऑफ़सेट/पते Pixel 5 मार्च फ़र्मवेयर के अनुसार अपडेट किए गए हैं और यदि आप कोई अन्य संस्करण उपयोग कर रहे हैं तो उन्हें बदलने की आवश्यकता है।
merge_modem_firmware.py सभी modem.b** (modem.b00, modem.b01, आदि) फ़ाइलों को modem.bin नामक एक एकल मोनोलिथिक बाइनरी में मर्ज करता है। इससे IDA और Ghidra में लोड करना बहुत आसान हो जाता है।
clade_extractor और dlpage_extractor CLADE और Delta संपीड़ित अनुभागों को डीकंप्रेस करते हैं।
clade_extractor को x86 (या आपके मूल आर्किटेक्चर) के लिए संकलित किया गया है और यह डीकंप्रेस्ड अनुभाग को एक फ़ाइल में आउटपुट करेगा। जहाँ तक मुझे पता है, पेटेंट के अलावा Qualcomm CLADE संपीड़न के लिए कोई सार्वजनिक रूप से उपलब्ध जानकारी या कोड प्रकाशित नहीं है। CLADE ने q6zip को यूज़र-मोड मॉड्यूल के लिए मुख्य संपीड़न विधि के रूप में बदल दिया है और इसे रिवर्स करना कठिन है क्योंकि यह अधिकतर हार्डवेयर में लागू किया गया है।
dlpage_extractor को Hexagon के लिए संकलित किया गया है और QEMU में इम्यूलेट किया गया है (जैसा कि पिछले कार्यों में किया गया है)। फिर डीकंप्रेस्ड मेमोरी को GDB में डंप करने की आवश्यकता होगी। यहाँ पुरानी q6zip संपीड़न विधि के लिए भी कोड है, हालाँकि अब इसका उपयोग नए मॉडेम बाइनरी में नहीं होता है। डेल्टा अनुभाग में केवल कुछ diag कमांड हैंडलर स्ट्रक्चर हैं, इसलिए CLADE संपीड़ित अनुभाग में ही अधिकांश वास्तविक सामग्री है। मैं नए बाइनरी पर इससे परेशान नहीं होता; यह केवल पुराने बाइनरी के लिए यहाँ है।
एक बार जब आपके पास डीकंप्रेस्ड CLADE अनुभाग हो, तो आप इसे modem.bin में जोड़ने के लिए add_decompressed_section_to_modem_bin.py चला सकते हैं। यह IDA और Ghidra में मैन्युअल रूप से किया जा सकता है, लेकिन यह स्क्रिप्ट अंतिम बाइनरी को लोड और बैकअप करना थोड़ा आसान बना देती है।
qshrink4_qdb_ghidra_script.py msg_v4_send* के सभी कॉल्स को उनके संबंधित डिबग स्ट्रिंग्स में डिकोड करता है। यह उनका उपयोग करने वाले हर फ़ंक्शन के शीर्ष पर एक टिप्पणी जोड़ देगा। ये डिबग स्ट्रिंग्स रिवर्सिंग के लिए अत्यंत उपयोगी हैं क्योंकि ये हमेशा फ़ाइल का नाम और फ़ंक्शन के लिए कुछ संदर्भ देती हैं। और भी बेहतर बनाने के लिए, इनमें कभी-कभी फ़ंक्शन नाम, वेरिएबल नाम और बहुत कुछ होता है। Pixel 5 फ़र्मवेयर फ़ाइल से qdb फ़ाइल प्राप्त करने में सहायता के लिए खोले जा रहे फ़ाइल पथ की जाँच करें। जब तक आपको अपनी ज़रूरत की चीज़ न मिल जाए, binwalk निकालते रहें।
diag_handler_locator_ghidra_script.py सभी diag कमांड हैंडलर फ़ंक्शनों को <op1>_<op2>_diag_cmd_handler नामकरण योजना में ढूँढता है और नाम बदलता है ताकि Ghidra में उन्हें खोजना आसान हो।
कुछ स्क्रिप्ट्स में अन्य स्रोतों से लिया गया कोड है। मैंने हर चीज़ के लिए श्रेय देने की कोशिश की है, लेकिन हो सकता है मैं एक या दो को भूल गया हूँ। अगर मैंने आपका कोड उपयोग किया है और आपको श्रेय देना भूल गया हूँ, तो कृपया मुझे बताएं।
अगर इस रिपॉजिटरी ने आपकी मदद की है, तो कृपया इसे ⭐ करें!