{"id":19318113,"url":"https://github.com/86box/bios-tools","last_synced_at":"2025-04-22T17:30:58.462Z","repository":{"id":52496704,"uuid":"438786358","full_name":"86Box/bios-tools","owner":"86Box","description":"x86 BIOS analysis tools developed by the 86Box project","archived":false,"fork":false,"pushed_at":"2024-11-23T14:07:28.000Z","size":2386,"stargazers_count":24,"open_issues_count":1,"forks_count":4,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-04-02T02:04:55.048Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/86Box.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2021-12-15T22:07:48.000Z","updated_at":"2025-02-04T12:14:06.000Z","dependencies_parsed_at":"2023-11-29T15:44:29.897Z","dependency_job_id":null,"html_url":"https://github.com/86Box/bios-tools","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/86Box%2Fbios-tools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/86Box%2Fbios-tools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/86Box%2Fbios-tools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/86Box%2Fbios-tools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/86Box","download_url":"https://codeload.github.com/86Box/bios-tools/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250287438,"owners_count":21405614,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-10T01:17:21.746Z","updated_at":"2025-04-22T17:30:57.472Z","avatar_url":"https://github.com/86Box.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"86Box BIOS Tools\n================\nA toolkit for extracting and analyzing x86 BIOS ROM images (mostly) within the context of the 86Box project.\n\n## Test drive\n\n**86Bot** on the [86Box Discord](https://86box.net/#social) has a BIOS analysis feature which uses BIOS Tools behind the scenes. Go to the `#bot-spam` channel and use the `!bios` command with an attached file or an URL. Other commands which work the same way and also leverage these tools are `!acpi` for extracting and decompiling ACPI tables, and `!epa` for extracting logo images.\n\n## Quick usage through Docker\n\n1. Build the Docker image from this repository:\n\n```sudo docker build -t biostools \"https://github.com/86Box/bios-tools.git#main\"```\n\n2. Create a destination directory, which will be called `roms` here.\n3. Create a `1` directory within `roms`.\n4. Place BIOS ROM images, archives, disk images, flasher executables and what have you in the `1` directory. Subdirectories will also be checked. **These files will be deleted during the extraction process.**\n5. Run the container, binding `/bios` to the directory created in step 2:\n\n```sudo docker run --rm -v /path/to/roms:/bios biostools | tee bioslist.csv```\n\n6. Import the resulting `bioslist.csv` file to Excel, or do whatever else you want to do with it. Other output formats can be selected through arguments to the container (after `biostools`); run `sudo docker run --rm biostools` to see a full list of supported arguments.\n\n## Manual usage\n\n### System requirements\n\n* **Linux**. Unfortunately, we rely on tools which contain non-portable code and generate filenames that are invalid for Windows, as well as GNU-specific extensions to shell commands. WSL should work for Windows users.\n* **Python 3.5** or newer.\n* **Standard gcc toolchain** for building the essential `bios_extract` tool.\n* **7-Zip** command line utility installed as `7z`.\n* **QEMU** (`qemu-system-i386`) for optionally extracting files which need to be executed.\n* **Unshield** for optionally extracting InstallShield installers.\n\n### Installation\n\n1. Clone this repository.\n2. Build the `bios_extract` and `deark` tools:\n\n```\ncd /path/to/bios-tools\nmake\n```\n\n3. Download the `UEFIExtract` tool from its [GitHub repository](https://github.com/LongSoft/UEFITool/releases) and place its executable on the repository's root directory. Prebuilt versions are only available for `x86_64`, but this tool is optional, and only required for UEFI extraction.\n4. Optionally install a dependency required for BIOS logo extraction:\n\n```\npip install -r requirements.txt\n```\n\n### Usage\n\n1. Create a destination directory, which will be called `roms` here.\n2. Create a `1` directory within `roms`.\n3. Place BIOS ROM images, archives, disk images, flasher executables and what have you in the `1` directory. Subdirectories will also be checked. **These files will be deleted during the extraction process.**\n4. Run the extractor, pointing it to the directory created in step 1:\n\n```\npython3 -m biostools -x roms\n```\n\n5. The extracted file structure will be located in `roms/0`. Individual files are extracted to directories named after the original file's name followed by `:`.\n6. Run the analyzer, pointing it to the `0` directory and redirecting its output to a `bioslist.csv` file:\n\n```\npython3 -m biostools -a roms/0 | tee bioslist.csv\n```\n\n7. Import the resulting `bioslist.csv` file to Excel, or do whatever else you want to do with it. Other output formats can be selected through arguments to `-a`; run `python3 -m biostools` to see a full list of supported arguments.\n\n## Extraction notes\n\n* Many common file types known not to be useful, such as images, PDFs, Office documents and hardware information tool reports, are automatically discarded.\n* Interleaved ROMs are merged through a heuristic filename and string detection, which may lead to incorrect merging if the chunks to different interleaved ROMs are present in the same directory.\n* The FAT filesystem extractor relies on assumptions which may not hold true for all disk images.\n* EPA (Award), PCX (AMI), PGX (Phoenix) and other image formats are automatically converted to PNG if the aforementioned optional dependency is installed.\n* Extraction of the following BIOS distribution formats is **not implemented** due to the use of unknown compression methods:\n  * ICL `.LDB`\n\n## Analysis notes\n\n### AMI\n\n* The string on **UEFI** is a hidden string located within the AMIBIOS 8-based Compatibility Support Module (CSM). A missing string may indicate a missing CSM.\n* Metadata tag **Setup** indicates the setup type for AMIBIOS Color through 7: **Color**, **Easy**, **HiFlex**, **Intel**, **New**, **Simple** or **WinBIOS**.\n\n### Award\n\n* OEM modifications which may interfere with detection: **Sukjung** (string)\n* Metadata tag **PhoenixNet** indicates the presence of PhoenixNet features, even if those were disabled by the OEM, and contains its splash screen's sign-on text.\n* Metadata tag **UEFI** indicates Gigabyte Hybrid EFI.\n\n### IBM\n\n* The FRU codes contained in PC or PS/2 ROMs are interpreted as the string.\n\n### Phoenix\n\n* Some OEMs have modified Phoenix to a point where detection may not be perfect.\n\n### SystemSoft\n\n* Insyde-compressed modules (identified by magic bytes `FF 88`) cannot be decompressed, limiting the analyzer's ability to identify Insyde-branded SystemSoft BIOSes.\n\n## Metadata reference\n\nDepending on the contents of each BIOS, the following tags may be displayed on the analyzer output's \"Metadata\" column:\n\n* **ACPI**: Appears to contain the ACPI tables specified. Does not necessarily indicate ACPI actually works.\n* **Build**: Build information contained within the BIOS.\n* **ID**: How the BIOS identifies itself during POST.\n* **LAN**: PXE or Novell NetWare RPL-compliant network boot ROM, usually associated with on-board Ethernet.\n* **OROM**: Non-PCI option ROM, usually associated with on-board devices.\n* **SCSI**: Adaptec or NCR/Symbios SCSI option ROM. Model (Adaptec) or SDMS version (NCR/Symbios) information is extracted from the ROM.\n* **SLI**: NVIDIA SLI license for non-nForce motherboards. Model information is extracted from the license header.\n* **Table**: Register table information contained within the BIOS. May help in identifying chipset and Super I/O devices.\n* **UEFI**: Appears to contain traces of UEFI. Does not necessarily indicate UEFI support is available.\n* **VGA**: Non-PCI video BIOS, usually associated with on-board video.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F86box%2Fbios-tools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F86box%2Fbios-tools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F86box%2Fbios-tools/lists"}