
BIOS/Intel ME/UEFI फर्मवेयर से संबंधित संरचनाओं को पार्स करें: Volumes, FileSystems, Files, आदि
.. image:: https://travis-ci.org/theopolis/uefi-firmware-parser.svg?branch=master :target: https://travis-ci.org/theopolis/uefi-firmware-parser
UEFI फर्मवेयर पार्सर एक सरल मॉड्यूल और स्क्रिप्ट्स का सेट है जो UEFI फर्मवेयर वॉल्यूम को पार्स करने, निकालने और पुनर्निर्मित करने के लिए है। इसमें BIOS, OptionROM, Intel ME और अन्य प्रारूपों के पार्सिंग मॉड्यूल शामिल हैं। कृपया पार्सिंग ट्यूटोरियल के लिए उदाहरण स्क्रिप्ट का उपयोग करें।
यह मॉड्यूल PyPi पर uefi_firmware <https://pypi.python.org/pypi/uefi_firmware>_ के रूप में उपलब्ध है।
::
$ sudo pip install uefi_firmware
Github से स्थापित करने के लिए, इस रेपो को चेकआउट करें और उपयोग करें:
::
$ sudo python ./setup.py install
आवश्यकताएँ
python-dev पैकेज में पाए जाते हैं।gcc का उपयोग करेंगी।फर्मवेयर का पता लगाने या पार्स करने का सबसे सरल तरीका AutoParser क्लास के माध्यम से है।
::
import uefi_firmware with open('/path/to/firmware.rom', 'r') as fh: file_content = fh.read() parser = uefi_firmware.AutoParser(file_content) if parser.type() != 'unknown': firmware = parser.parse() firmware.showinfo()
uefi, pfs, me, और flash पैकेजों में कई क्लास हैं जो अपने कंस्ट्रक्टर में फ़ाइल सामग्री स्वीकार करते हैं। सभी मामलों में अमूर्त विधियाँ लागू की गई हैं:
process() पार्सिंग कार्य करता है और True या False लौटाता हैshowinfo() संरचना के बारे में जानकारी का एक पदानुक्रम प्रिंट करता हैdump() पदानुक्रम में चलता है और प्रत्येक को एक फ़ाइल में लिखता हैएक Python स्क्रिप्ट स्थापित की गई है uefi-firmware-parser
::
$ uefi-firmware-parser -h usage: uefi-firmware-parser [-h] [-b] [--superbrute] [-q] [-o OUTPUT] [-O] [-c] [-e] [-g GENERATE] [--test] file [file ...]
Parse, and optionally output, details and data on UEFI-related firmware.
positional arguments: file The file(s) to work on
optional arguments: -h, --help show this help message and exit -b, --brute The input is a blob and may contain FV headers. --superbrute The input is a blob and may contain any sort of firmware object -q, --quiet Do not show info. -o OUTPUT, --output OUTPUT Dump firmware objects to this folder. -O, --outputfolder Dump firmware objects to a folder based on filename ${FILENAME}_output/ -c, --echo Echo the filename before parsing or extracting. -e, --extract Extract all files/sections/volumes. -g GENERATE, --generate GENERATE Generate a FDF, implies extraction (volumes only) --test Test file parsing, output name/success.
किसी फ़ाइल या फ़ाइलों की निर्देशिका का परीक्षण करने के लिए:
::
$ uefi-firmware-parser --test ~/firmware/* ~/firmware/970E32_1.40: UEFIFirmwareVolume ~/firmware/CO5975P.BIO: EFICapsule ~/firmware/me-03.obj: IntelME ~/firmware/O990-A03.exe: None ~/firmware/O990-A03.exe.hdr: DellPFS
यदि आपको बड़ी संख्या में फर्मवेयर फ़ाइलों को पार्स और निकालने की आवश्यकता है, तो प्रति फ़ाइल स्वचालित रूप से आउटपुट फ़ोल्डर उत्पन्न करने के लिए -O विकल्प देखें। यदि शेल में आंतरिक भागों को पार्स और खोजना है, तो --echo विकल्प पार्सिंग से पहले इनपुट फ़ाइल नाम प्रिंट करेगा।
फर्मवेयर-प्रकार जाँचकर्ता यह तय करेगा कि फ़ाइल को सर्वोत्तम तरीके से कैसे पार्स किया जाए। यदि --test विकल्प प्रकार की पहचान करने में विफल रहता है, या इसे unknown कहता है, तो -b या --superbrute विकल्प का उपयोग करने का प्रयास करें। बाद वाला बाइट-दर-बाइट प्रकार जाँचकर्ता करता है।
::
$ uefi-firmware-parser --test ~/firmware/970E32_1.40 ~/firmware/970E32_1.40: unknown $ uefi-firmware-parser --superbrute ~/firmware/970E32_1.40 [...]
विशेषताएँ
UEFI फर्मवेयर वॉल्यूम, कैप्सूल, फाइलसिस्टम, फ़ाइलें, अनुभाग पार्सिंग
Intel PCH फ्लैश डिस्क्रिप्टर
Intel ME मॉड्यूल पार्सिंग (ME, TXE, आदि)
Dell PFS (HDR) अपडेट पार्सिंग
Tiano/EFI, और नेटिव LZMA (7z) [डी]संपीड़न
पूर्ण UEFI फर्मवेयर वॉल्यूम ऑब्जेक्ट पदानुक्रम प्रदर्शन
पार्स किए गए इनपुट वॉल्यूम का उपयोग करके फर्मवेयर डिस्क्रिप्टर [पुनः]उत्पादन
फर्मवेयर फ़ाइल अनुभाग इंजेक्शन
GUID इंजेक्शन
इंजेक्शन या GUID प्रतिस्थापन (अभी तक कोई जोड़/घटाव नहीं) UEFI फर्मवेयर फ़ाइल के भीतर अनुभागों पर, या फर्मवेयर फाइलसिस्टम के भीतर UEFI फर्मवेयर फ़ाइलों पर किया जा सकता है।
::
$ python ./scripts/fv_injector.py -h usage: fv_injector.py [-h] [-c] [-p] [-f] [--guid GUID] --injection INJECTION [-o OUTPUT] file
Search a file for UEFI firmware volumes, parse and output.
positional arguments: file The file to work on
optional arguments: -h, --help show this help message and exit -c, --capsule The input file is a firmware capsule. -p, --pfs The input file is a Dell PFS. -f, --ff Inject payload into firmware file. --guid GUID GUID to replace (inject). --injection INJECTION Pre-generated EFI file to inject. -o OUTPUT, --output OUTPUT Name of the output file.
नोट: किसी फर्मवेयर फ़ाइल में इंजेक्ट करते समय उपयोगकर्ता से पूछा जाएगा कि किस अनुभाग को बदलना है। फिलहाल यह अभी तक स्क्रिप्ट करने योग्य नहीं है।
IDA Python समर्थन
Snare के प्लगइन्स का उपयोग करके IDA Python में आयात करने के लिए अतिरिक्त GUID लेबल उत्पन्न करने की एक शामिल स्क्रिप्ट है। -g LABEL का उपयोग करके स्क्रिप्ट Python डिक्शनरी-स्वरूपित आउटपुट उत्पन्न करेगी। यह परियोजना स्वचालित रूप से लोकप्रिय विक्रेता GUIDs के साथ अद्यतित रहने का प्रयास करेगी।
::
$ python ./scripts/uefi_guids.py -h usage: uefi_guids.py [-h] [-c] [-b] [-d] [-g GENERATE] [-u] file
Output GUIDs for files, optionally write GUID structure file.
positional arguments: file The file to work on
optional arguments: -h, --help show this help message and exit -c, --capsule The input file is a firmware capsule, do not search. -b, --brute The input file is a blob, search for firmware volume headers. -d, --flash The input file is a flash descriptor. -g GENERATE, --generate GENERATE Generate a behemoth-style GUID output. -u, --unknowns When generating also print unknowns.
समर्थित विक्रेता
इस मॉड्यूल का निम्नलिखित विक्रेताओं के BIOS/UEFI/फर्मवेयर अपडेट पर परीक्षण किया गया है। प्रत्येक उत्पाद के लिए प्रत्येक अपडेट पार्स नहीं होगा, कुछ को वितरण अपडेट तंत्र (आमतौर पर एक PE) से पूर्व-डीकंप्रेसन या निष्कर्षण की आवश्यकता हो सकती है।