现代主板图形化 UEFI 交互界面大致由 Strings,Forms,Fonts 和 Images 组成,其中 Forms 由 VFR 文本文件提供,其以二进制形式提供,这种二进制在 EDK 框架中称为 IFR(Internal Forms Representation)由 VFR 编译而来,类似 HTML结构。本文讲分享如何从 BIOS 中提取 IFR 并转换为为可阅读的文本文件,这将有助于我们修改隐藏的 UEFI 选项,修改 BIOS 偏移量可参考 这里。
注意:本教程只适用于 AMI BIOS
演示环境
- 机器型号 Dell XPS 15 9570
- BIOS 版本 1.16.2
- 操作环境 macOS Mojave 10.14.6
所需工具
- BIOS
- Dell PFS BIOS Extractor - 解压 Dell .exe 格式 BIOS 文件
- UEFITool - 提取 BIOS 模块
- Universal IFR Extractor - 转换为可阅读的文本文件
获取 BIOS
关于 BIOS 的获取问题,我们可以使用 Universal BIOS Backup ToolKit,AMI Flasher utility-AFUWIN 等工具提取。这里我采用从 Dell 官网下载 XPS_9570_1.16.2.exe
并使用 Dell PFS BIOS Extractor 进行提取
使用 PyInstaller 编译 Dell PFS BIOS Extractor
确保 Python 版本在 3.7.0 及以上
epmandeMacBook-Pro:~ epman$ python -V
Python 3.7.7
epmandeMacBook-Pro:~ epman$ pip3 install pyinstaller
epmandeMacBook-Pro:~ epman$ git clone https://github.com/platomav/BIOSUtilities.git
epmandeMacBook-Pro:~ epman$ cd BIOSUtilities/Dell\ PFS\ BIOS\ Extractor/
epmandeMacBook-Pro:Dell PFS BIOS Extractor epman$ pyinstaller --noupx --onefile Dell_PFS_Extract.py
编译成功后可在 dist
文件夹中找到生成的可执行文件
解压 BIOS
用法:
usage:Dell_PFS_Extract [-h] [-a] [images [images ...]]
optional arguments:
-h, --help show this help message and exit
-a, --advanced extract in advanced user mode
在 dist
目录中执行命令
epmandeMacBook-Pro:dist epman$ ./Dell_PFS_Extract ~/Downloads/XPS_9570_1.16.2.exe
Dell PFS BIOS Extractor v4.5
File: XPS_9570_1.16.2.exe
Extracted Dell PFS BIOS image!
Done!
Windows 环境下
于 Windows 环境下可前往项目 Releases 页面下载已编译完成的可执行文件,并于 CMD
中执行如下命令
C:\Users\Ep_Man\Desktop\Dell_PFS_Extract_v4.5>Dell_PFS_Extract.exe XPS_9570_1.16.2.exe
Dell PFS BIOS Extractor v4.5
File: XPS_9570_1.16.2.exe
Extracted Dell PFS BIOS image!
Done!
提取模块
进入 UEFITool 使用快捷键 Command + O
或在菜单栏选择 File>Open image file… 打开提取的 bin 文件
接着使用 Command + F
或在菜单栏选择 File>Search… 查找 cfg lock
字样
双击返回的 Unicode text "cfg lock" found in PE32 image section at offset 7D344h
即可定位到该模块,最后右键该模块选择 Extract body… 完成提取
保存 IFR 为文本
在 macOS 下打开 Terminal
使用 ifrextract 工具来保存为 txt 文本文件(Usage: ifrextract input_file output_file)
epmandeMacBook-Pro:~ epman$ cd XPS_9570_1.16.2.exe_extracted/
epmandeMacBook-Pro:XPS_9570_1.16.2.exe_extracted epman$ ./ifrextract pe32.efi 9570_1.16.2_IFR.txt
Input: pe32.efi
Output: 9570_1.16.2_IFR.txt
Protocol: UEFI
epmandeMacBook-Pro:XPS_9570_1.16.2.exe_extracted epman$
在 Windows 下打开 IRFExtractor.exe
选择刚刚提取的 pe32.efi
并点击 Extract 保存为 txt 文本文件
若提取错误 Protool 则会显示红色字样 Unkown ,正常应为绿色字样 UEFI 。