Skip to main content

Various BIOS Utilities for Modding/Research

Project description

BIOSUtilities

About

Various BIOS/UEFI-related utilities which aid in modding and/or research

Usage

Main

The "main" script provides a simple way to check and parse each of the user provided files against all utilities, in succession. It is ideal for quick drag & drop operations but lacks the finer control of the "Package" method. If needed, a few options can be set, by using the command line:

usage: main.py [-h] [-e] [-o OUTPUT_DIR] [paths ...]

positional arguments:
  paths

options:
  -h, --help                              show help and exit
  -e, --auto-exit                         do not pause on exit
  -o OUTPUT_DIR, --output-dir OUTPUT_DIR  extraction directory
python ./main.py "/path/to/input/file.bin" --output-dir "/path/to/file extractions"

If no arguments/options are provided, the "main" script requests the input and output paths from the user. If no output path is provided, the utility will use the parent directory of the first input file or fallback to the runtime execution directory.

Enter input file or directory path: "C:\P5405CSA.303"

Enter output directory path: "C:\P5405CSA.303_output"

Package

Each utility is derived from a base "BIOSUtility" template and all utilities form the "biosutilities" python package, which can be installed from PyPi:

python -m pip install --upgrade biosutilities[pefile,lznt1]

Installing the python package is the recommended way to call one or more utilities programatically, while fully controlling arguments and options.

from biosutilities.ami_pfat_extract import AmiPfatExtract

ami_pfat_extractor = AmiPfatExtract(input_object='/path/to/input/file.bin', extract_path='/path/to/output/folder/')

is_supported = ami_pfat_extractor.check_format()
is_extracted = ami_pfat_extractor.parse_format()
from biosutilities.dell_pfs_extract import DellPfsExtract

with open('/path/to/input/file.bin', 'rb') as pfs_file:
    pfs_data = pfs_file.read()

dell_pfs_extractor = DellPfsExtract(input_object=pfs_data, extract_path='/path/to/output/directory/', padding=8)

is_supported = dell_pfs_extractor.check_format()
is_extracted = dell_pfs_extractor.parse_format()

Arguments

Each BIOSUtility expects the following required and optional arguments to check and/or parse a given file format:

input_object (required)
input_object: str | bytes | bytearray = b''
extract_path (required)
extract_path: str = ''
padding (optional)
padding: int = 0

If the required arguments are not provided, it is still possible to use the BIOSUtility-inherited instance to access auxiliary public methods and class constants. However, checking and/or parsing of file formats will not yield results.

Methods

Once the BIOSUtility-inherited object is initialized with arguments, its two public methods can be called:

check_format

Check if input object is of specific supported format

is_supported: bool = check_format()
parse_format

Process input object as a specific supported format

is_extracted: bool = parse_format()

Compatibility

Unless explicitely noted, all utilities should work under Windows, Linux or macOS operating systems which have Python 3.10 - 3.12 support.

Requirements

There are two main types of requirements, depending on the utility.

Python Packages

Python packages can be installed via Pypi (e.g. pip)

python -m pip install --upgrade -r requirements.txt
python -m pip install pefile==2023.2.7 dissect.util==3.18

External Executables / Scripts

External executables and/or scripts (e.g. TianoCompress.exe, big_script_tool.py, 7z.exe) need to be found via the "PATH" environment variable, which is configured differently depending on the operating system.

Alternatively, if neither modifying PATH environment variable nor copying the executables in standard OS PATH directories is an option, you can create a folder "external" at the root of the "biosutilities" project.

Linux

Linux Path

or

sudo install "/path/to/downloaded/external/executable/to/install" /usr/local/bin

Windows

Windows Path

Note: In the "Environment Variables" window, you can modify the "Path" variable under "User variables" instead of "System variables", as many guides suggest.

MacOS

Mac Path

Utilities

AMI BIOS Guard Extractor

Description

Parses AMI BIOS Guard (a.k.a. PFAT, Platform Firmware Armoring Technology) images, extracts their SPI/BIOS/UEFI firmware components and optionally decompiles the Intel BIOS Guard Scripts. It supports all AMI PFAT revisions and formats, including those with Index Information tables or nested AMI PFAT structures. The output comprises only final firmware components which are directly usable by end users.

Note that the AMI PFAT structure may not have an explicit component order. AMI's BIOS Guard Firmware Update Tool (AFUBGT) updates components based on the user/OEM provided Parameters and Options or Index Information table, when applicable. Thus, merging all the components together does not usually yield a proper SPI/BIOS/UEFI image. The utility does generate such a merged file with the name "00 -- <filename>_ALL.bin" but it is up to the end user to determine its usefulness. Additionally, any custom OEM data, after the AMI PFAT structure, is stored in the last file with the name "<n+1> -- _OOB.bin" and it is once again up to the end user to determine its usefulness. In cases where the trailing custom OEM data includes a nested AMI PFAT structure, the utility will process and extract it automatically as well.

Arguments

No additional optional arguments are provided for this utility.

Prerequisites

Optionally, to decompile the AMI PFAT > Intel BIOS Guard Scripts, you must have the following 3rd party python script at PATH or "external":

AMI UCP Update Extractor

Description

Parses AMI UCP (Utility Configuration Program) Update executables, extracts their firmware components (e.g. SPI/BIOS/UEFI, EC, ME etc) and shows all relevant info. It supports all AMI UCP revisions and formats, including those with nested AMI PFAT, AMI UCP or Insyde iFlash/iFdPacker structures. The output comprises only final firmware components and utilities which are directly usable by end users.

Arguments

Additional optional arguments are provided for this utility:

  • checksum -> bool : verify AMI UCP Checksums (slow)

Prerequisites

To run the utility, you must have the following 3rd party tools at PATH or "external":

Optionally, to decompile the AMI UCP > AMI PFAT > Intel BIOS Guard Scripts (when applicable), you must have the following 3rd party python script at PATH or "external":

Note: On Linux and macOS, you'll need to compile TianoCompress from sources as no pre-built binary exists.

Apple EFI IM4P Splitter

Description

Parses Apple IM4P multi-EFI files and splits all detected EFI firmware into separate Intel SPI/BIOS images. The output comprises only final firmware components and utilities which are directly usable by end users.

Arguments

No additional optional arguments are provided for this utility.

Prerequisites

To run the utility, you do not need any prerequisites.

Apple EFI Image Identifier

Description

Parses Apple EFI images and identifies them based on Intel's official "IBIOSI" tag, which contains info such as Model, Version, Build, Date and Time. Additionally, the utility can provide both "IBIOSI" and "Apple ROM Version" structure info, when available, as well as a suggested EFI image filename, while also making sure to differentiate any EFI images with the same "IBIOSI" tag (e.g. Production, Pre-Production) by appending a checksum of their data.

Arguments

Additional optional arguments are provided for this utility:

  • silent -> bool : suppress structure display

The utility exposes certain public class attributes, once parse_format() method has been successfully executed:

  • efi_file_name -> str : Suggested image filename, based on Intel "IBIOSI" information
  • intel_bios_info -> dict[str, str] : Information contained at Intel "IBIOSI" structure
  • apple_rom_version -> defaultdict[str, set] : Information contained at "Apple ROM Version" structure

Prerequisites

To run the utility, you must have the following 3rd party tools at PATH or "external":

Apple EFI Package Extractor

Description

Parses Apple EFI PKG firmware packages (e.g. FirmwareUpdate.pkg, BridgeOSUpdateCustomer.pkg, InstallAssistant.pkg, iMacEFIUpdate.pkg, iMacFirmwareUpdate.tar), extracts their EFI images, splits those in IM4P format and identifies/renames the final Intel SPI/BIOS images accordingly. The output comprises only final firmware components which are directly usable by end users.

Arguments

No additional optional arguments are provided for this utility.

Prerequisites

To run the utility, you must have the following 3rd party tools at PATH or "external":

Apple EFI PBZX Extractor

Description

Parses Apple EFI PBZX images, re-assembles their CPIO payload and extracts its firmware components (e.g. IM4P, EFI, Utilities, Scripts etc). It supports CPIO re-assembly from both Raw and XZ compressed PBZX Chunks. The output comprises only final firmware components and utilities which are directly usable by end users.

Arguments

No additional optional arguments are provided for this utility.

Prerequisites

To run the utility, you must have the following 3rd party tools at PATH or "external":

  • 7-Zip Console (i.e. 7z.exe for Windows or 7zz for macOS or 7zz, 7zzs for Linux)

Award BIOS Module Extractor

Description

Parses Award BIOS images and extracts their modules (e.g. RAID, MEMINIT, _EN_CODE, awardext etc). It supports all Award BIOS image revisions and formats, including those which contain LZH compressed files. The output comprises only final firmware components which are directly usable by end users.

Arguments

No additional optional arguments are provided for this utility.

Prerequisites

To run the utility, you must have the following 3rd party tool at PATH or "external":

  • 7-Zip Console (i.e. 7z.exe for Windows or 7zz for macOS or 7zz, 7zzs for Linux)

Dell PFS Update Extractor

Description

Parses Dell PFS Update images and extracts their Firmware (e.g. SPI, BIOS/UEFI, EC, ME etc) and Utilities (e.g. Flasher etc) component sections. It supports all Dell PFS revisions and formats, including those which are originally LZMA compressed in ThinOS packages (PKG), ZLIB compressed or Intel BIOS Guard (PFAT) protected. The output comprises only final firmware components which are directly usable by end users.

Arguments

Additional optional arguments are provided for this utility:

  • advanced -> bool : extract signatures and metadata
  • structure -> bool : show PFS structure information

Prerequisites

Optionally, to decompile the Intel BIOS Guard (PFAT) Scripts, you must have the following 3rd party utility at PATH or "external":

Fujitsu SFX BIOS Extractor

Description

Parses Fujitsu SFX BIOS images and extracts their obfuscated Microsoft CAB archived firmware (e.g. SPI, BIOS/UEFI, EC, ME etc) and utilities (e.g. WinPhlash, PHLASH.INI etc) components. The output comprises only final firmware components which are directly usable by end users.

Arguments

No additional optional arguments are provided for this utility.

Prerequisites

To run the utility, you must have the following 3rd party tool at PATH or "external":

  • 7-Zip Console (i.e. 7z.exe for Windows or 7zz for macOS or 7zz, 7zzs for Linux)

Fujitsu UPC BIOS Extractor

Description

Parses Fujitsu UPC BIOS images and extracts their EFI compressed SPI/BIOS/UEFI firmware component. The output comprises only a final firmware component which is directly usable by end users.

Arguments

No additional optional arguments are provided for this utility.

Prerequisites

To run the utility, you must have the following 3rd party tool at PATH or "external":

Note: On Linux and macOS, you'll need to compile TianoCompress from sources as no pre-built binary exists.

Insyde iFlash/iFdPacker Extractor

Description

Parses Insyde iFlash/iFdPacker Update images and extracts their firmware (e.g. SPI, BIOS/UEFI, EC, ME etc) and utilities (e.g. InsydeFlash, H2OFFT, FlsHook, iscflash, platform.ini etc) components. It supports all Insyde iFlash/iFdPacker revisions and formats, including those which are 7-Zip SFX 7z compressed in raw, obfuscated or password-protected form. The output comprises only final firmware components which are directly usable by end users.

Arguments

No additional optional arguments are provided for this utility.

Prerequisites

To run the utility, you do not need any prerequisites.

Panasonic BIOS Package Extractor

Description

Parses Panasonic BIOS Package executables and extracts their firmware (e.g. SPI, BIOS/UEFI, EC etc) and utilities (e.g. winprom, configuration etc) components. It supports all Panasonic BIOS Package revisions and formats, including those which contain LZNT1 compressed files and/or AMI PFAT payloads. The output comprises only final firmware components which are directly usable by end users.

Arguments

No additional optional arguments are provided for this utility.

Prerequisites

To run the utility, you must have the following 3rd party Python modules installed:

Moreover, you must have the following 3rd party tool at PATH or "external":

  • 7-Zip Console (i.e. 7z.exe for Windows or 7zz for macOS or 7zz, 7zzs for Linux)

Phoenix TDK Packer Extractor

Description

Parses Phoenix Tools Development Kit (TDK) Packer executables and extracts their firmware (e.g. SPI, BIOS/UEFI, EC etc) and utilities (e.g. WinFlash etc) components. It supports all Phoenix TDK Packer revisions and formats, including those which contain LZMA compressed files. The output comprises only final firmware components which are directly usable by end users.

Arguments

No additional optional arguments are provided for this utility.

Prerequisites

To run the utility, you must have the following 3rd party Python module installed:

Portwell EFI Update Extractor

Description

Parses Portwell UEFI Unpacker EFI executables (usually named "Update.efi") and extracts their firmware (e.g. SPI, BIOS/UEFI, EC etc) and utilities (e.g. Flasher etc) components. It supports all known Portwell UEFI Unpacker revisions (v1.1, v1.2, v2.0) and formats (used, empty, null), including those which contain EFI compressed files. The output comprises only final firmware components and utilities which are directly usable by end users.

Arguments

No additional optional arguments are provided for this utility.

Prerequisites

To run the utility, you must have the following 3rd party Python module installed:

Moreover, you must have the following 3rd party tool at PATH or "external":

Note: On Linux and macOS, you'll need to compile TianoCompress from sources as no pre-built binary exists.

Toshiba BIOS COM Extractor

Description

Parses Toshiba BIOS COM images and extracts their raw or compressed SPI/BIOS/UEFI firmware component. This utility is effectively a python wrapper around ToshibaComExtractor by LongSoft. The output comprises only a final firmware component which is directly usable by end users.

Arguments

No additional optional arguments are provided for this utility.

Prerequisites

To run the utility, you must have the following 3rd party tool at PATH or "external":

Note: On Linux, you'll need to compile comextract from sources as no pre-built binary exists.

VAIO Packaging Manager Extractor

Description

Parses VAIO Packaging Manager executables and extracts their firmware (e.g. SPI, BIOS/UEFI, EC, ME etc), utilities (e.g. WBFLASH etc) and driver (audio, video etc) components. If direct extraction fails, it attempts to unlock the executable in order to run at all non-VAIO systems and allow the user to choose the extraction location. It supports all VAIO Packaging Manager revisions and formats, including those which contain obfuscated Microsoft CAB archives or obfuscated unlock values. The output comprises only final firmware components which are directly usable by end users.

Arguments

No additional optional arguments are provided for this utility.

Prerequisites

To run the utility, you must have the following 3rd party tool at PATH or "external":

  • 7-Zip Console (i.e. 7z.exe for Windows or 7zz for macOS or 7zz, 7zzs for Linux)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

biosutilities-24.10.29.tar.gz (62.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

biosutilities-24.10.29-py3-none-any.whl (70.6 kB view details)

Uploaded Python 3

File details

Details for the file biosutilities-24.10.29.tar.gz.

File metadata

  • Download URL: biosutilities-24.10.29.tar.gz
  • Upload date:
  • Size: 62.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.5

File hashes

Hashes for biosutilities-24.10.29.tar.gz
Algorithm Hash digest
SHA256 1b30bbefe579fc72c559eae131f7464dfa66b440730d07bac1e015b255b39ab3
MD5 e556efa3fa97a29bc350a3fecfa5c504
BLAKE2b-256 63004db0a704edf542104fbfd4048d3ac4e66394aef3d045dfb5d8d9e49a5356

See more details on using hashes here.

File details

Details for the file biosutilities-24.10.29-py3-none-any.whl.

File metadata

File hashes

Hashes for biosutilities-24.10.29-py3-none-any.whl
Algorithm Hash digest
SHA256 12c3a8a55c78d1aa363ca365551992d78450f151a01bce489cd02baeac13df11
MD5 0ccea50ec6dc19dba653577ed9ef9218
BLAKE2b-256 00054d69eaf35d8157ae09be376881b88a4e9ddf9c0f6f1e962de8f76df53725

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page