news 2026/11/2 1:46:10

破解UEFI变量与ACPI表:NWinfo如何读取Secure Boot证书数据库与BIOS隐藏信息

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
破解UEFI变量与ACPI表:NWinfo如何读取Secure Boot证书数据库与BIOS隐藏信息

【免费下载链接】nwinfo

Hardware information utility for Windows

项目地址:https://gitcode.com/gh_mirrors/nw/nwinfo
点击查看免费下载

NWinfo是一款开源的 Windows 硬件信息工具,除了常规的 CPU、内存、磁盘信息外,它还能深入固件层:直接读取 UEFI 变量、解析 Secure Boot 证书数据库(PK / KEK / db / dbx),并遍历全部 ACPI 表,把 BIOS 里那些"隐藏"的平台信息一网打尽。🔍

核心关键词:UEFI 变量、ACPI 表、Secure Boot 证书数据库、BIOS 隐藏信息 长尾关键词:如何读取 Secure Boot db 变量、ACPI 表签名 FACP APIC MCFG、nwinfo 命令行查看固件信息

一、先搞清楚:UEFI 变量与 ACPI 表是什么

概念一句话解释
UEFI 变量固件里的"小仓库",保存启动菜单、Secure Boot 开关等,跨重启持久化
Secure Boot 数据库PK/KEK/db/dbx四个变量,分别存平台密钥、密钥交换、允许签名、黑名单
ACPI 表BIOS 交给操作系统的一张张"说明书",描述中断、电源、PCIe 等硬件资源

普通工具(如设备管理器)只能看到操作系统"翻译"后的结果,而 NWinfo 选择绕过中间层,直接解析原始二进制结构。

二、UEFI 变量是怎么被读出来的

Windows 提供了现成的系统 API,NWinfo 无需驱动就能读取 UEFI 变量:

  • 读取单个变量:NWL_GetEfiVar内部调用NtQuerySystemEnvironmentValueEx
  • 枚举全部变量:NWL_EnumerateEfiVar调用NtEnumerateSystemEnvironmentValuesEx

实现见 efivars.c,其中还内置了EFI_GV_GUID、EFI_IMAGE_SECURITY_DATABASE_GUID等十几个标准 GUID 定义(efivars.c)。

2.1 判断是否处于 UEFI 模式

PrintBootEnv通过NtQuerySystemInformation(SystemBootEnvironmentInformation)一次性拿到固件类型(BIOS / UEFI)、启动标识 GUID 和 Boot Flags(uefi.c);Secure Boot状态则直接读取全局变量SecureBoot,值为 0/1,读不到就标记UNSUPPORTED(uefi.c)。

2.2 解析 Secure Boot 证书数据库(重点)

这是全篇最硬核的部分。db、dbx等变量的值并不是纯文本,而是按 UEFI 规范拼接的一串EFI_SIGNATURE_LIST:

db 变量 = [签名列表1] [签名列表2] ... 每个签名列表 = 表头(SignatureType/大小) + N 个 EFI_SIGNATURE_DATA

NWinfo 的解析流程(uefi.c):

  1. 用NWL_GetEfiVarAlloc把变量整体读进内存,校验列表长度、签名大小是否合法(防截断/畸形数据);
  2. 依据SignatureTypeGUID 匹配签名格式——支持 SHA-256 映像哈希、RSA-2048、X.509 证书等 15 种格式(uefi.c);
  3. 遇到 X.509 证书时,动态加载crypt32.dll,调用CertCreateCertificateContext解析出证书主题、颁发者、有效期等人类可读信息(uefi.c);
  4. 对dbx中的证书哈希条目,还能读出Revocation Time(吊销时间)(uefi.c)。

一次调用PrintSecureBootSignatures,就把PK、KEK、db、dbx、dbt五个数据库全部解析完毕(uefi.c)。

2.3 启动菜单与热键

Boot0001、Boot0002……这些变量描述启动项。NWinfo 会枚举所有变量,筛选出Boot/Driver/Key开头的条目,解析出属性(Active/Hidden/App)、描述名和设备路径,并把二进制 Device Path 翻译成/Hd(1,0x0,...,GPT)这样的可读字符串(uefi.c、efivars.c)。

三、ACPI 表是如何被"破解"的

ACPI 数据的入口是RSDP(Root System Description Pointer),从它出发像链条一样找到所有表。NWinfo 在 acpi.c 中实现了完整的遍历链:

RSDP ──> XSDT(64位)/ RSDT(32位) ──> FADT / APIC / BGRT / MCFG / DSDT ...

3.1 找到 RSDP:三种途径

途径说明代码位置
物理内存扫描传统 BIOS 下,在 EBDA(0x80000)和 BIOS 区(0xE0000)按 16 字节步进搜索"RSD PTR "签名并验证校验和utils.c
物理内存直读RSDT/XSDT 按 RSDP 中记录的地址用NWL_ReadMemory读出utils.c
系统 API 兜底读物理内存失败时,退回GetSystemFirmwareTable('ACPI', ...)utils.c

⚠️ 注意:读物理内存需要硬件驱动(CPUZ162 / NwHwIo / PawnIO)支持,且源码中特别标注了这一点——Windows Defender 可能将读取物理内存的行为标记为可疑(acpi.c)。

3.2 100+ 种表签名自动翻译

每张 ACPI 表开头都是 4 字节签名。NWinfo 内置了上百个签名的对照表,把冷冰冰的FACP、APIC、BGRT翻译成"Fixed ACPI Description Table""Multiple APIC Description Table"等可读名称,未知签名则标记为Unknown ACPI Table(acpi.c)。

3.3 重点表的深度解析

对常见关键表,NWinfo 不止打印表头,还逐字段解码:

  • FADT(FACP):DSDT 地址、SCI 中断向量、PM 寄存器组、复位寄存器、Hypervisor 厂商 ID 等全部展开(acpi.c)
  • APIC(MADT):遍历 Local APIC、I/O APIC、中断重映射、x2APIC 等所有子结构(acpi.c)
  • BGRT:开机 LOGO 的显示位置与状态
  • MCFG:PCIe MMCONFIG 基址与总线范围
  • WPBT:Windows 平台二进制表,含启动命令行参数
  • XSDT/RSDT:逐条列出每个子表指针,并顺带读回其 4 字节签名作为行名(acpi.c)
  • FACS:从注册表HARDWARE\ACPI\FACS读取唤醒向量、硬件签名等(acpi.c)

每张表都会做校验和验证,结果以OK/ERR呈现——这是发现 BIOS 表被篡改或损坏的简易手段。

四、动手实践:命令行快速上手

NWinfo 提供nwinfo.exe(CLI,支持 Windows XP 及以上)和gnwinfo.exe(GUI)。以下是查看固件信息的常用命令:

命令作用
nwinfo.exe --uefi固件类型、Secure Boot 状态、启动顺序、Boot 菜单
nwinfo.exe --uefi=CERT解析 PK/KEK/db/dbx/dbt 证书数据库
nwinfo.exe --uefi=VARS列出全部 UEFI 变量及大小
nwinfo.exe --acpi遍历全部 ACPI 表
nwinfo.exe --acpi=FACP只看 FADT 一张表
nwinfo.exe --format=json --output=uefi.json --uefi=CERT导出 JSON 便于二次分析

GUI 版gnwinfo打开固件页时默认即启用证书解析(UefiFlags = NW_UEFI_CERT,见 context.c),无需额外配置。

命令行选项的解析逻辑可参考 nwinfo.c(--uefi)与 nwinfo.c(--acpi)。

五、安全须知:这样读安全吗?

  • 🔒全程只读:NWinfo 只读取变量和表,不写入、不修改任何固件数据;
  • 🛡️杀毒软件提示:ACPI 物理内存读取可能被 Windows Defender 报毒,属已知的误报场景,请确认来源后再运行;
  • 📋隐私:分享报告前建议加--hide-sensitive隐藏 MAC 与序列号。

六、写在最后

从NtQuerySystemEnvironmentValueEx一行 API 调用,到上百种 ACPI 表签名的自动翻译,NWinfo 用纯 Win32 方式(不依赖 WMI)把 UEFI 变量和 ACPI 表这些"固件黑盒"完整地摊开给你看。无论是排查 Secure Boot 启动失败、核对启动项,还是好奇 BIOS 到底向操作系统"坦白"了什么,这套源码(libnw/uefi.c、libnw/acpi.c)都值得一读。

如需完整源码,可克隆仓库:

git clone https://gitcode.com/gh_mirrors/nw/nwinfo

【免费下载链接】nwinfo

Hardware information utility for Windows

项目地址:https://gitcode.com/gh_mirrors/nw/nwinfo
点击查看免费下载
上一篇:awesome-muse-connectors的6大可复用AI Agent工作流模式:从Watcher、Researcher到人工移交
下一篇:逐行读懂@reactions/component的57行源码:终极原理剖析如何把React.Component变成声明式API

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/2 1:45:00

HPA 不扩容:metrics-server 与指标延迟的 3 个原因

我不会起名字322 后端 / 算法 / 数据库 📘 技术栈 | 🧩 力扣 Hot100 | 🐹 Go 项目 | 🟥 Redis | 🐬 MySQL 文章目录HPA 不扩容:metrics-server 与指标延迟的…

作者头像 李华
网站建设 2026/11/2 1:44:25

multimodal-ops快速上手教程:10分钟在昇腾NPU上跑通第一个融合算子

算子库人工智能Ascend模型优化 【免费下载链接】multimodal-ops 多模态 AI 算子库,面向昇腾 NPU 提供高性能多模态融合算子实现。按算子功能族组织,覆盖从编码、融合、空间几何到扩散生成的完整算子栈。 项目地址: https://gitcode.com/cann…

作者头像 李华