This script reformats an IFR Extractor dump so that:
- It's easier to browse and read
- Can be used as input for reading and writing settings with UefiVarTool
The purpose is to be able to change any hidden UEFI Setup settings, and make it efficient and straighforward.
- Only one row per entry for better clarity
- Redundant and unimportant output eliminated
- Much more concise (size reduced by over 80%)
- Hexadecimal values padded to align with one another
- Settings sorted alphabetically by
VarStore
(i.e. UEFI variable) - Easily customizable if need be
IFRExtractor Verbose | IFRExtractor | SlimIFR | |
---|---|---|---|
File Size | 3MB | 2MB | 500 kB |
# of Rows | 33,479 | 33,479 | 4,604 |
AMITSESetup:0x0040 Boot: Quiet Boot [0x00 / 0x01]
MeSetup:0x0003 Firmware Update Configuration: Me FW Image Re-Flash [0x00 - Disabled, 0x01 - Enabled]
SaSetup:0x000F(0x02) Memory Overclocking Menu: tREFI [0x0000 - 0xFFFF]
Instead of…
CheckBox Prompt: "Quiet Boot", Help: "Enables or disables Quiet Boot option", QuestionFlags: 0x0, QuestionId: 0x106E, VarStoreId: 0xF013, VarOffset: 0x40, Flags: 0x0, Default: Disabled, MfgDefault: Disabled
Default DefaultId: 0x0 Value: 1
Default DefaultId: 0x1 Value: 1
End
Form FormId: 0x27DA, Title: "Firmware Update Configuration"
OneOf Prompt: "Me FW Image Re-Flash", Help: "Enable/Disable Me FW Image Re-Flash function.", QuestionFlags: 0x10, QuestionId: 0x2A0, VarStoreId: 0x9, VarOffset: 0x3, Flags: 0x10, Size: 8, Min: 0x0, Max: 0x1, Step: 0x0
OneOfOption Option: "Disabled" Value: 0, Default, MfgDefault
OneOfOption Option: "Enabled" Value: 1
End
Numeric Prompt: " tREFI", Help: "Refresh Interval, 0: AUTO, max: 65535", QuestionFlags: 0x14, QuestionId: 0x2773, VarStoreId: 0x5, VarOffset: 0xF, Flags: 0x11, Size: 16, Min: 0x0, Max: 0xFFFF, Step: 0x1
Default DefaultId: 0x0 Value: 0
End
Also see:
Note: this is just a summary. The UefiVarTool repository has detailed instructions, which I don't want to repeat here.
- UEFI (BIOS) image to explore
- UEFITool or another utility to extract the
Setup
module from the image - IFR Extractor to extract the IFR data from the
Setup
module - Node.exe from Node.js
- Extract the
Setup
module (example, exact steps are device-specific):
UEFIExtract Image.bin 899407D7-99FE-43D8-9A21-79EC328CAC21 -m file -o Setup.efi
- Extract the IFR data:
IFRExtractor Setup.efi verbose
- Trim it with SlimIFR: (the parameters are simply
<InputFilename> <OutputFilename>
)
node SlimIFR.js IFR-Verbose.txt IFR-Slim.txt
- Browse with a good editor such as Notepad++
- Change these settings with UefiVarTool
- Great news: SlimIFR output format is almost the same as UefiVarTool's input format
Most of the available UEFI (BIOS) Setup settings on any given platform are typically hidden from the user. Extracting the Internal Form Representation (IFR) data from a firmware image makes it possible to see them all. Other tools can then be used to modify these settings.
The IFR data is stored as a blob within the Setup
or SetupUtility
EFI module. A tool to dump it in a human-readable form was first written by Donovan6000. More recently, a rewritten and updated version has been maintained by LongSoft. The verbose output provided by these tools is essential for some use cases but can be suboptimal for quickly just browsing through.
Enter SlimIFR.
SlimIFR and UefiVarTool complement each other to make the whole process easy, straightforward, and efficient, so that more people can gain access to all the hidden settings, and unlock the true abilities of their hardware.
This tool is based on IFR-Formatter by BoringBoredom, although the output format is completely different.