UEFITool 0.28:UEFI固件解析与修改完全指南
UEFITool 0.28 是一款基于C++和Qt框架开发的跨平台UEFI固件分析工具,核心功能包括解析、提取和修改UEFI固件映像。该工具适用于固件开发工程师、安全研究员及系统管理员,可深入分析固件内部结构,支持从闪存描述符到完整BIOS映像的全流程处理。通过模块化设计,UEFITool提供了高效的固件文件系统解析、PE可执行文件处理及补丁管理能力,是UEFI固件逆向工程与定制化的关键工具。
功能特性解析 🛠️
核心解析引擎
UEFITool的核心能力源于三大解析模块的协同工作:
固件文件系统引擎(ffsengine)
位于项目根目录的ffsengine.cpp和ffsengine.h文件实现了UEFI固件文件系统(FFS)的解析逻辑。该模块负责将固件映像解构为层次化的树状结构,识别并解析各类UEFI卷、文件和节,是工具实现固件浏览功能的基础。
PE镜像处理模块(peimage)
peimage.cpp实现了对PE(可移植可执行文件)格式的解析支持,能够提取UEFI驱动和应用程序的元数据(如入口点、节信息、导入表)。该模块使工具能够识别固件中的可执行组件,为后续修改和替换操作提供技术支撑。
描述符分析工具(descriptor)
descriptor.cpp负责解析BIOS闪存描述符,识别SPI flash布局、区域划分及硬件配置信息。这一功能对于理解固件在物理存储介质上的分布至关重要,尤其适用于低级别固件分析场景。
辅助工具集
UEFIPatch补丁管理
位于UEFIPatch/目录的工具支持通过预定义规则对固件进行定制化修改。核心配置文件包括:
patches.txt:主补丁规则集patches-misc.txt:杂项补丁定义hpwarning.txt:特定厂商警告信息
补丁系统采用基于模式匹配的替换机制,支持十六进制、GUID和文本模式的精准定位,确保修改的安全性和可追溯性。
UEFIReplace模块替换
UEFIReplace/目录下的工具提供固件模块热更新功能,支持两种替换模式:
- 完整替换:包含头部信息的整体元素替换
- 主体替换:仅更新数据部分,保留原有头部结构
该工具内置完整性校验机制,在替换过程中自动验证文件格式和校验和,降低操作风险。
压缩算法支持
项目通过LZMA/和Tiano/目录提供双重压缩支持:
- LZMA库:实现高效数据压缩/解压缩,核心文件包括
LzmaCompress.c和LzmaDecompress.c - Tiano模块:提供UEFI标准压缩算法,支持EFI_TIANO_COMPRESSION格式
环境配置与安装
系统要求
| 环境类型 | 最低配置 | 推荐配置 |
|---|---|---|
| 操作系统 | Linux/macOS/Windows | Ubuntu 20.04+/macOS 11+/Windows 10+ |
| 编译器 | GCC 4.8+ 或 Clang 3.5+ | GCC 9.4+ 或 Clang 12+ |
| Qt库 | Qt 4.x | Qt 5.15+ |
| 依赖 | 标准C++库 | 静态Qt库(减少运行时依赖) |
编译步骤
- 获取源码:
git clone https://gitcode.com/gh_mirrors/ue/UEFITOOL28
cd UEFITOOL28
- 执行构建脚本:
chmod +x unixbuild.sh
./unixbuild.sh
- 构建结果位于
dist/目录,包含以下可执行文件:- UEFITool:主程序
- UEFIPatch:补丁工具
- UEFIReplace:模块替换工具
构建脚本会自动检测操作系统类型(Linux/macOS/Windows),并下载对应平台的静态Qt库,确保生成独立可执行文件。
操作指南
基础操作流程
-
打开固件映像
- 通过菜单栏
File > Open选择固件文件 - 支持直接拖拽文件到程序窗口
- 命令行启动:
./UEFITool firmware.bin
- 通过菜单栏
-
浏览固件结构
- 左侧Structure面板展示层次化树状结构
- 选中元素后右侧Information面板显示详细属性
- Messages面板记录解析过程和操作日志
-
元素操作
- 右键菜单提供核心功能:
- Extract:提取元素(含头部/仅主体)
- Replace:替换元素(完整/主体替换)
- Insert:插入新元素(前插/后插/内嵌)
- Remove:标记删除元素
- Rebuild:标记重建元素(修正结构错误)
- 右键菜单提供核心功能:
高级功能使用
搜索功能
通过File > Search打开搜索对话框,支持三种模式:
- 十六进制模式:输入十六进制字符串(支持通配符
.) - GUID模式:输入UEFI全局唯一标识符
- 文本模式:支持ASCII/Unicode,可选择大小写敏感
搜索结果会显示在Messages面板,双击结果可自动定位到对应元素。
固件重建
修改完成后通过File > Save image file触发重建:
- 程序自动处理所有标记为"Rebuild"的元素
- 生成修改后的完整固件映像
- 重建日志输出到Messages面板
- 提示是否立即打开重建后的文件
实际应用案例
案例一:UEFI模块提取与分析
场景:从BIOS固件中提取网络驱动模块进行漏洞分析
步骤:
- 打开目标固件:
./UEFITool bios.bin - 在结构树中定位
Network相关卷(通常路径为FV/Network) - 右键点击目标驱动(通常以
.efi为扩展名) - 选择
Extract body,保存为network_driver.efi - 使用PE分析工具(如
objdump)检查提取文件:
objdump -x network_driver.efi | grep -A 10 "Section Headers"
案例二:固件安全补丁应用
场景:使用UEFIPatch修复固件中的已知漏洞
步骤:
- 准备补丁文件
custom_patch.txt,格式如下:
# 禁用不安全的USB调试接口
5B 44 65 62 75 67 5D 00 -> 5B 44 69 73 61 62 6C 65
- 执行补丁命令:
./UEFIPatch bios.bin custom_patch.txt -o patched_bios.bin
- 验证补丁结果:
diff -u <(xxd bios.bin) <(xxd patched_bios.bin)
案例三:关键模块替换
场景:替换固件中的BIOS设置模块以添加自定义功能
步骤:
- 提取原始模块:
./UEFITool -e -b -o original_setup.bin bios.bin 3C1E36F4-8F6B-4F39-9053-87B9D350F620
- 修改模块功能并重新编译
- 执行替换操作:
./UEFIReplace bios.bin 3C1E36F4-8F6B-4F39-9053-87B9D350F620 modified_setup.bin -o new_bios.bin
- 验证替换结果:
./UEFITool new_bios.bin -s 3C1E36F4-8F6B-4F39-9053-87B9D350F620
常见问题解答
操作类问题
Q:为什么修改后的固件无法启动?
A:可能原因包括:
- TE映像基地址计算错误(非标准实现)
- 缺少FIT表支持(工具当前未完全实现)
- 模块依赖关系被破坏
解决建议:使用Rebuild功能重建父级元素,确保所有依赖模块正确重定位。
Q:如何批量处理多个固件文件?
A:可结合shell脚本实现自动化:
for file in *.bin; do
./UEFIPatch "$file" patches.txt -o "${file%.bin}_patched.bin"
done
技术类问题
Q:支持哪些固件格式?
A:主要支持:
- 完整BIOS映像(带闪存描述符)
- UEFI卷文件(.vol)
- 独立UEFI模块(.efi)
不支持厂商特定的BIOS更新包装格式,需先使用专用工具解包。
Q:如何处理大型固件映像?
A:优化策略:
- 使用
Search功能精确定位目标元素 - 分阶段处理:先提取子卷,修改后重新整合
- 关闭不必要的UI组件减少内存占用
性能优化建议
- 内存管理:对于超过16MB的固件,建议增加系统swap空间
- 操作顺序:先执行搜索定位,再进行修改操作
- 批量操作:利用命令行工具(UEFIPatch/UEFIReplace)处理大批量文件
- 日志管理:定期清理
Messages面板,避免性能下降
通过合理配置环境和优化操作流程,UEFITool 0.28能够高效处理各类UEFI固件分析任务,为固件开发和安全研究提供可靠支持。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust099- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
MiMo-V2.5-ProMiMo-V2.5-Pro作为旗舰模型,擅⻓处理复杂Agent任务,单次任务可完成近千次⼯具调⽤与⼗余轮上 下⽂压缩。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
Kimi-K2.6Kimi K2.6 是一款开源的原生多模态智能体模型,在长程编码、编码驱动设计、主动自主执行以及群体任务编排等实用能力方面实现了显著提升。Python00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00