
Ghidra एक्सटेंशन जो PC फर्मवेयर रिवर्स इंजीनियरिंग के लिए है, जो PCI ऑप्शन ROMs, Intel Flash Descriptor, coreboot CBFS, और UEFI फर्मवेयर वॉल्यूम के लिए लोडर प्रदान करता है, साथ ही टाइप रिकवरी और GUID पहचान के लिए UEFI हेल्पर स्क्रिप्ट भी शामिल हैं।
PC फर्मवेयर रिवर्स इंजीनियरिंग में सहायता के लिए Ghidra के लिए विभिन्न मॉड्यूल। इसे GSoC 2019 के लिए coreboot प्रोजेक्ट के रूप में स्वीकार किया गया था।
JDK 21 (या नया) और Ghidra 12.0 (या नया) आवश्यक हैं।
Ghidra की मानक Gradle निर्माण प्रणाली का उपयोग किया जाता है। निर्माण से पहले GHIDRA_INSTALL_DIR
पर्यावरण चर सेट करें, या इसे Gradle प्रॉपर्टी के रूप में सेट करें (IDE में निर्माण के लिए उपयोगी):
$ export GHIDRA_INSTALL_DIR="/path/to/ghidra"
$ ./gradlew
echo GHIDRA_INSTALL_DIR=/path/to/ghidra > gradle.properties
[!NOTE]
GHIDRA_INSTALL_DIRको उस निर्देशिका की ओर इंगित करना चाहिए जिसमेंsupport/buildExtension.gradleशामिल है। उदाहरण के लिए, Flathub पैकेज के उपयोगकर्ताओं को/var/lib/flatpak/app/org.ghidra_sre.Ghidra/current/active/files/lib/ghidraका उपयोग करना चाहिए।
मॉड्यूल ZIP dist/ में आउटपुट होगा। File > Install Extensions का उपयोग करें और
एक्सटेंशन ब्राउज़ करने के लिए हरा प्लस चुनें। संकेत मिलने पर Ghidra को पुनरारंभ करें।
उचित कार्यक्षमता के लिए, प्लगइन को आपके Ghidra इंस्टॉलेशन द्वारा उपयोग किए गए उसी JRE के साथ बनाया जाना चाहिए।
यदि आपके पास कई Java रनटाइम वातावरण स्थापित हैं, तो निर्माण से पहले JAVA_HOME पर्यावरण चर सेट करके सही JRE चुनें।
Ghidra प्रोजेक्ट में एक PCI विकल्प ROM जोड़ें। लीगेसी x86 विकल्प ROM को सीधे विश्लेषण के लिए लोड किया जा सकता है। सुनिश्चित करें कि बाइनरी प्रारूप x86 PCI Option ROM पर सेट है, और बाइनरी आयात करें।
UEFI विकल्प ROM या विकल्प ROM जिनमें एक से अधिक इमेज होती हैं, उन्हें फाइलसिस्टम लोडर का उपयोग करके आयात किया जाना चाहिए। आयात मोड चुनने के लिए संकेत मिलने पर, File system चुनें। विकल्प ROM के भीतर निहित इमेज प्रदर्शित की जाएंगी, और विश्लेषण के लिए आयात की जा सकती हैं। लीगेसी x86 इमेज को x86 PCI Option ROM लोडर द्वारा संभाला जाएगा, और UEFI इमेज को PE32 लोडर द्वारा संभाला जाएगा (संपीड़न समर्थित है)। प्रत्येक इमेज के लिए जानकारी दाएं-क्लिक मेनू में Get Info चुनकर प्रदर्शित की जा सकती है।
Ghidra प्रोजेक्ट में एक समर्थित फर्मवेयर इमेज जोड़ें। फर्मवेयर इमेज लोडर फ्लैश डिस्क्रिप्टर वाली Intel इमेज, FMAP/CBFS लेआउट वाली coreboot इमेज, और UEFI फर्मवेयर वॉल्यूम का समर्थन करता है। File system आयात मोड का उपयोग निर्दिष्ट फर्मवेयर इमेज के भीतर एम्बेडेड फाइलों को देखने के लिए किया जा सकता है।
ध्यान दें कि कुछ UEFI फर्मवेयर इमेज फ्रीफॉर्म/रॉ फाइलों (या फ्रीफॉर्म/रॉ FFS अनुभागों) के भीतर नेस्टेड फर्मवेयर वॉल्यूम संग्रहीत कर सकती हैं।
ऐसी फाइलों को निर्दिष्ट फ्रीफॉर्म/रॉ फाइल के लिए दाएं-क्लिक मेनू में Open File System चुनकर फर्मवेयर वॉल्यूम के रूप में आयात किया जा सकता है।
यदि कोई नेस्टेड फर्मवेयर वॉल्यूम नहीं मिलता है, तो एक त्रुटि संदेश प्रदर्शित होगा (No file system provider for...)।
सहायक स्क्रिप्ट प्लगइन की ghidra_scripts निर्देशिका में शामिल है, जिसे Ghidra में स्क्रिप्ट निर्देशिकाओं की सूची में स्वचालित रूप से जोड़ा जाना चाहिए।
स्क्रिप्ट मैनेजर विंडो में UEFIHelper.java चुनकर UEFI सहायक स्क्रिप्ट चलाएं (Window -> Script Manager से एक्सेस किया गया)।
UEFI डेटा प्रकार लाइब्रेरी को संशोधित करने के लिए, आवश्यकतानुसार data/gen_prf.sh में PRF टेम्पलेट संशोधित करें
और नई PRF फाइलें उत्पन्न करें। File -> Parse C Source में उत्पन्न PRF फाइल खोलें।
Parse to File... चुनकर अद्यतन डेटा प्रकार लाइब्रेरी बनाएं। data में मूल डेटा प्रकार लाइब्रेरी
ओवरराइट करें और प्लगइन को फिर से बनाएं।
ये UEFI रिवर्सिंग से संबंधित कुछ दिलचस्प प्रोजेक्ट हैं:
Apache 2.0, कुछ अपवादों के साथ:
src/efidecompress/c/efidecompress.c: BSDsrc/efidecompress/c/efidecompress.c uefi-firmware-parser से Decompress.c का हल्का संशोधित संस्करण है
(जो स्वयं EDK2 BaseTools में मूल से व्युत्पन्न है)।
src/main/java/firmware/ifd में IFD FS लोडर ने UEFITool से पार्सर को संदर्भ के रूप में उपयोग किया।
data/guids.csv में GUID डेटाबेस UEFITool से लिया गया है।
data/uefi_*.gdt में UEFI डेटा प्रकार लाइब्रेरी data/gen_prf.sh के साथ उत्पन्न की गई थीं,
जो आंशिक रूप से wrffrz द्वारा एक Ghidra पुल अनुरोध से UEFI पार्सर परिभाषा पर आधारित है।
ये डेटा प्रकार लाइब्रेरी EDK2 MdePkg से हेडर का उपयोग करती हैं।
xerpi द्वारा GhidraVitaLoader का उपयोग UEFI सहायक स्क्रिप्ट के कुछ हिस्सों के लिए संदर्भ के रूप में किया गया था।