
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、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 [...]
特徴
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辞書形式の出力を生成します。このプロジェクトは、人気のあるベンダーGUIDを自動的に最新の状態に保つよう努めます。
::
$ 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)からの抽出が必要な場合があります。