
Parse 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 [...]
기능
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 사전 형식의 출력을 생성합니다. 이 프로젝트는 인기 있는 벤더 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)에서 추출이 필요할 수 있습니다.