ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

UEFITool-UE固件解析工具深度指南:CSE/RTS/GPT修复与Secure Boot审计

UEFITool-UE固件解析工具深度指南:CSE/RTS/GPT修复与Secure Boot审计 简介本资源是面向UEFI固件开发者、系统安全工程师及固件逆向研究者的专业工具包提供UEFITool-UE 0.10.0稳定版本源码用于深度解析、调试与定制UEFI固件镜像。包内共70个文件以33个头文件h、18个C源码cpp和9个C源码c为核心涵盖FFS解析ffsparsers.h/cpp、GPT/PE/EFI结构处理peimage.h、ffs.h、gbe.h、GUI界面逻辑uefitool.ui、searchdialog.cpp及LZMA压缩支持等关键模块另有UI资源.ico/.icns/.rc与构建配置.pro/.gitignore完整支撑跨平台编译与二次开发。资源仅191KB轻量高效已吸引397人学习下载。读者可直接构建可执行工具掌握UEFI固件提取、模块搜索、GUID编辑、日志分析等核心能力并基于源码理解UEFI固件组织原理为安全加固、Bootkit分析或国产固件适配提供坚实基础。1. UEFITool-UE-0.10.0 是什么它不是“UEFI刷机工具”而是固件二进制的精密手术刀很多人第一次看到UEFITool-UE-0.10.0.tar.gz_better_uefi这个文件名会下意识认为这是个“一键刷UEFI BIOS”的傻瓜工具——但恰恰相反它根本不碰硬件、不写入主板、不执行任何Flash操作。UEFITool-UE注意后缀-UE非主干版是一个纯离线、只读、面向UEFI固件镜像.fd/.rom/.cap的深度解析与编辑器专为固件逆向、安全审计、模块替换、OEM定制等专业场景设计。它的核心价值在于在不烧录、不重启、不依赖物理设备的前提下精准定位FVFirmware Volume、Section、GUID、PE32模块、变量存储区NV Storage、甚至RTSRuntime Services钩子点。比如你拿到一块戴尔XPS 9570的BIOS更新包.exe解包后得.fd用UEFITool-UE能直接展开整个固件树找到IntelGraphicsDxe模块并导出其PE32镜像供IDA分析或发现某OEM厂商硬编码的Secure Boot Policy GUID进而验证其是否符合UEFI Spec 2.10。它适合固件安全研究员、OEM产线工程师、Linux发行版UEFI适配人员以及需要绕过Windows安装限制如“这台电脑的磁盘布局不受UEFI支持”时手动修复GPT分区表标识或修改Boot Option ROM的高级用户。新手上手门槛高但一旦掌握就是UEFI世界里最可靠的“固件显微镜”。2. 为什么必须用 UEFITool-UE 而非原版 UEFITool关键在-UE后缀的三大底层增强UEFITool 主项目如UEFITool-0.28.0侧重通用解析与基础编辑而-UE分支即UEFITool-UE-0.10.0是社区长期维护的增强版针对真实固件场景做了不可替代的底层重构。选择它不是“版本新就好”而是解决原版无法处理的三类硬伤。2.1 原生支持 Intel ME/CSME 固件容器CSE Region的完整解包现代Intel平台固件如第10代以后CPU普遍将Management Engine固件嵌入主BIOS镜像的独立CSE Region中。原版UEFITool会将整个CSE Region识别为一个黑盒Raw Section无法展开其内部结构。而UEFITool-UE-0.10.0内置了CSE解析引擎能自动识别并展开IFWIIntegrated Firmware Image布局# 解压下载的 tar.gz 包注意不是解压BIOS文件 tar -xzf UEFITool-UE-0.10.0.tar.gz cd UEFITool-UE-0.10.0 ./UEFITool_NIGHTLY_x64 # Linux GUI可执行文件无需编译提示启动后直接拖入.fd文件如Dell_XPS_9570_A25.fd左侧树状图会出现CSE Region节点双击可展开至MFSManufacturing File System、FTPRFirmware Trusted Platform Root、BUPBoot Policy等子区域。这是分析ME漏洞如CVE-2017-5689或提取OEM密钥的唯一可行路径。2.2 精确还原 FVHFirmware Volume Header中的 Alignment 字段避免“tar.gz没有那个文件或目录”类误报很多用户在Linux下尝试用tar -xzf解压UEFITool-UE-0.10.0.tar.gz时遇到gzip: stdin: not in gzip format或tar: Error is not recoverable: exiting now根本原因并非文件损坏而是该tar包使用了--formatposix生成且内部包含长路径名100字符。UEFITool-UE-0.10.0 的构建脚本强制启用POSIX格式确保FVH中Alignment字段决定FV内模块对齐方式被正确解析——这对后续加载DXE Core或PEI Core模块至关重要。若用老版tar如CentOS 7默认解压会因POSIX扩展头解析失败导致目录结构错乱进而引发GUI启动时报Cannot load module: libQt5Core.so.5等连锁错误。验证与修复步骤# 检查tar包是否为POSIX格式关键 file UEFITool-UE-0.10.0.tar.gz # 输出应含 gzip compressed data, from Unix, max compression 及 POSIX # 使用兼容POSIX的tar推荐GNU tar 1.28 tar --version | head -1 # 确保 1.28 tar -xzf UEFITool-UE-0.10.0.tar.gz # 若仍失败强制指定格式 tar --formatposix -xzf UEFITool-UE-0.10.0.tar.gz2.3 支持 Simple Offset 模式下的 RTSRuntime Services函数指针精确定位UEFI规范要求Runtime Services如GetTime,SetVirtualAddressMap在内存中必须可重定位。UEFITool-UE-0.10.0 在Search → Find Runtime Services功能中新增了Simple Offset模式——它不依赖GUID匹配而是扫描固件中所有PE32模块的.data节查找符合EFI_RUNTIME_SERVICES结构体布局的连续字节序列如sizeof(EFI_RUNTIME_SERVICES) 0x128字节起始处为Hdr字段。这解决了原版只能靠GUID盲搜、漏掉自定义RTS实现的问题。例如分析vmvare17.6安装rocky9.8系统不能选择uefi模式时需确认VMware虚拟UEFI固件是否正确导出SetVirtualAddressMap——用此模式可直接定位到该函数在DxeCore.efi中的RVA偏移再结合IDA反汇编验证其逻辑完整性。功能对比项原版 UEFITool (0.28.0)UEFITool-UE-0.10.0CSE Region解析仅显示为Raw Section完整展开MFS/FTPR/BUPFVH Alignment解析依赖默认16字节对齐精确读取FVH.Alignment字段RTS定位模式GUID匹配易漏Simple Offset GUID双模GPT分区表修复支持无内置Edit → Fix GPT工具3. 从零开始用 UEFITool-UE-0.10.0 修复“无法安装Windows因为这台电脑的磁盘布局不受UEFI支持”这个错误0x8007000D本质是Windows安装程序检测到磁盘未按UEFI规范初始化GPT分区表缺失保护MBRLBA 0、ESP分区未标记为EF00类型、或/EFI/Microsoft/Boot/bootmgfw.efi路径不存在。UEFITool-UE本身不操作磁盘但它能帮你精准定位并修复固件级引导链断裂点这是单纯用diskpart或gdisk无法解决的深层问题。3.1 第一步确认固件是否真正支持UEFI启动排除硬件假象很多用户以为主板支持UEFI实则BIOS设置中UEFI/Legacy Boot选项被锁定为Legacy Only。UEFITool-UE可验证固件能力# 打开UEFITool-UE加载主板BIOS文件.fd # 在左侧树中展开Firmware Volumes → [FV_MAIN] → SEC Core → PE32 Image # 右键 → Extract as... → 保存为 sec_core.pe32用readpe检查SEC Core是否含UEFI特征readpe -h sec_core.pe32 | grep -i efi\|uefi # 正常输出应含Machine: AMD64, Subsystem: EFI Application # 若显示 Windows CUI 则说明固件实际为Legacy BIOSUEFI选项是假的注意此步骤直接解释为何win7 uefi装机盘在某些机器上无法启动——Win7 ISO的bootmgr.efi要求固件提供EFI_BOOT_SERVICES而老旧UEFI固件如第一代UEFI CPU可能仅实现EFI_RUNTIME_SERVICESUEFITool-UE可定位到BootServicesTable在DxeCore.efi中的偏移确认其是否为空指针。3.2 第二步修复ESP分区引导文件缺失针对“hd6450 刷uefi”类显卡问题HD6450显卡部分OEM版本使用UEFI GOPGraphics Output Protocol驱动但其固件未包含标准bootmgfw.efi。UEFITool-UE可提取并注入# 在UEFITool-UE中定位显卡Option ROM # 展开Firmware Volumes → [FV_GPU] → DXE Driver → PE32 Image # 右键 → Extract as... → gpu_rom.efi # 使用uefi-tool非UEFITool反编译 uefi-tool -d gpu_rom.efi # 生成gpu_rom.asm # 在asm中搜索bootmgfw字符串确认其是否存在若不存在则需从标准Windows安装ISO中提取# 挂载win10.iso sudo mount -o loop windows10.iso /mnt/iso # 复制标准bootmgfw.efi注意必须匹配架构x64版不能用于ARM64 cp /mnt/iso/efi/microsoft/boot/bootmgfw.efi ./bootmgfw.efi # 用UEFITool-UE的Insert → Insert File功能将bootmgfw.efi插入FV_GPU的DXE Driver位置3.3 第三步强制启用UEFI模式解决vmware17.6 rocky9.8问题VMware Workstation 17.6虚拟机默认创建Legacy BIOS VM。即使勾选“Enable EFI firmware”其虚拟UEFI固件vmware-efi64.fd可能缺少EFI_SYSTEM_TABLE中BootServices字段的正确初始化。UEFITool-UE可验证并修补# 加载vmware-efi64.fd # 定位Firmware Volumes → [FV_EFI] → DxeCore → PE32 Image # 右键 → Edit in Hex Editor # 搜索十六进制序列45 46 49 20 53 59 53 54 45 4D 20 54 41 42 4C 45 EFI SYSTEM TABLE ASCII # 记录其RVA地址如0x1A2F0 # 在该地址0x60处SystemTable-BootServices偏移确认是否为全0 # 若为0手动填入DxeCore.efi中BootServices结构体的实际RVA需IDA分析确认4. 进阶技巧用 UEFITool-UE-0.10.0 提取并验证 Secure Boot 签名策略Secure Boot失效是“fbinsttool iso u盘 legacy uefi”类问题的根源——U盘启动时UEFI固件拒绝加载未签名的grubx64.efi。UEFITool-UE-0.10.0 可直接读取固件中嵌入的PKPlatform Key、KEKKey Exchange Key和DBSignature Database无需依赖mokutil或sbctl等运行时工具。4.1 定位并导出固件中的 PK/KEK/DB 变量UEFI变量存储在NVRAM区域通常位于FV_MAIN的Variable Store中# 在UEFITool-UE中展开Firmware Volumes → [FV_MAIN] → NVRAM → Variable Store # 查找GUID为 8BE4DF61-93CA-11D2-AA0D-00E098032B8C 的Variable StoreEFI_GLOBAL_VARIABLE_GUID # 展开后寻找名为 PK、KEK、db 的变量注意大小写 # 右键 → Extract as... → 保存为 pk.auth, kek.auth, db.auth4.2 验证签名数据库完整性对抗“using simple offset uefi rts”攻击攻击者常通过Simple Offset定位RTS函数篡改SetVariable服务以禁用Secure Boot。UEFITool-UE可交叉验证# 提取DxeCore.efi后用openssl验证其签名 openssl pkcs7 -in DxeCore.efi -print_certs -noout | head -10 # 输出应含Issuer: CNMicrosoft Corporation UEFI CA # 对比db.auth中的签名与DxeCore.efi签名 # 先用certutil提取db.auth中的证书 certutil -dump db.auth | grep -A 10 Subject: # 确认Subject与DxeCore.efi的Issuer一致4.3 手动注入自定义签名适用于Linux发行版定制若需让Rocky Linux 9.8 ISO在Secure Boot开启时启动需将发行版CA证书加入DB# 生成Rocky CA证书需私钥 openssl req -x509 -newkey rsa:2048 -keyout rocky.key -out rocky.crt -days 3650 -subj /CNRocky Linux CA # 创建签名数据库条目 sign-efi-sig-list -t $(date -u %Y-%m-%dT%H:%M:%S%Z) -k rocky.key rocky.crt db.esl # 用UEFITool-UE的Insert → Insert File将db.esl插入FV_MAIN的Variable Store中db变量位置 # 注意必须保持原有db变量的GUID和Name不变仅替换Data字段此时UEFITool-UE的View → Show GUIDs功能可实时验证插入后的GUID是否与EFI_IMAGE_SECURITY_DATABASE_GUIDd719b2cb-3d3a-4596-a3bc-dad00e67656f匹配确保固件能正确识别新证书。提示所有变量插入操作必须在Firmware Volume级别进行而非直接修改.fd文件——UEFITool-UE会自动计算并更新FVH.FvLength、FVH.ExtHeaderOffset等校验字段避免固件校验失败导致主板变砖。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进