
تحليل الهياكل المتعلقة ببرامج BIOS/Intel ME/UEFI الثابتة: وحدات التخزين، أنظمة الملفات، الملفات، إلخ
.. 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 و IntelME وتنسيقات أخرى أيضًا. يرجى استخدام البرامج النصية الأمثلة للحصول على دروس تعليمية حول التحليل.
هذه الوحدة متاحة عبر 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 أو Falseshowinfo() تطبع تسلسلاً هرمياً للمعلومات حول الهيكلdump() تجتاز التسلسل الهرمي وتكتب كل عنصر إلى ملفيتم تثبيت برنامج نصي بايثون باسم 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 في تحديد النوع، أو أطلق عليه غير معروف، حاول استخدام الخيار -b أو --superbrute. يقوم الأخير بإجراء مدقق نوع بايت ببايت.
::
$ uefi-firmware-parser --test ~/firmware/970E32_1.40 ~/firmware/970E32_1.40: unknown $ uefi-firmware-parser --superbrute ~/firmware/970E32_1.40 [...]
الميزات
حقن 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
يوجد برنامج نصي مضمن لإنشاء تسميات GUID إضافية لاستيرادها إلى IDA Python باستخدام إضافات Snare. باستخدام -g LABEL، سينشئ البرنامج النصي مخرجات بتنسيق قاموس بايثون. سيحاول هذا المشروع البقاء محدثاً مع 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).