在Windows / Linux中修改UEFI变量的工具?


12

我有一台使用Phoenix SecureCore Tiano作为UEFI / BIOS的DELL机器,但是由于它的UEFI Shell和菜单隐藏在BIOS设置程序中,因此它是完全不可配置的。

我想知道是否有工具可以在用户模式下修改UEFI设置(例如引导项)?例如linux中的“ efibootmgr”。

顺便说一句,因为它是不可配置的,所以我认为引导过程处于旧模式,也就是说操作系统无法检测到UEFI存在,对吗?

因此,这是一个悖论:我必须在非传统模式下启动才能使UEFI工具能够在用户模式下修改启动项?但是我必须先启用UEFI工具才能修改启动项才能启用非旧版启动?


刚刚发现efi var存储在nvram中,也许此链接对您
有所

Answers:


3

EFI实现必须提供某种方式来控制引导模式(EFI与BIOS),当然,除了那些不支持BIOS的仅EFI实现之外。但是,固件经常给用户很少或没有明确的控制权。相反,固件会尝试根据硬盘的状态推断正确的引导模式-例如,如果检测到GPT,则固件可能会使用EFI模式,而如果发现MBR,则可能会使用BIOS模式;否则,如果找到EFI系统分区(ESP),则可能使用EFI模式;否则,可能使用BIOS模式。您可以通过阅读手册找到有关固件工作方式的线索。如果没有,您只需要进行试验。

引导可移动媒体时,规则可能会有所不同,但是您通常可以通过仅提供一种引导模式来向正确的方向踢。这可能需要重新制作CD或(更容易)仔细选择CD。如果您试图强制执行EFI模式引导,则我的rEFInd,尤其是其可引导CD版本可能会有所帮助。它仅在EFI模式下引导,并且按照配置,它将充当其他基于EFI的引导的引导管理器,但不能充当BIOS模式的引导。


谢谢!当我在MBR模式下对我的hd进行分区时,它可以按预期工作。但是,如果我使用GPT模式,则无论是否存在ESP,它都不会启动,并显示以下错误:“找不到操作系统”。错误消息/ w语法错误,肯定是由于我对BIOS rom进行了反向工程(不是来自任何引导加载程序或引导记录)之后,来自BIOS本身,所以我只是无法使引导控件以GPT模式传递。
马斯顿(Marstone)2012年

如果某些基于EFI的系统检测到设置了“启动”(也称为“活动”)标志的MBR分区,则它们只会以BIOS模式启动。在GPT磁盘上,这需要在MBR的0xEE保护分区上设置该标志。您可以使用Linux的fdisk之类的工具来执行此操作(使用“ a”选项)。千万不能使用分手,的GParted,或其他基于libparted的工具来做到这一点; 在GPT磁盘上,它们使您无法控制MBR中的内容,并且“启动标志”将应用于GPT分区,其含义是它将类型代码设置为EFI系统分区(ESP)的类型代码。
Rod Smith

2

如果有人感兴趣,我只发布我的实用程序。它在Windows中编辑UEFI变量。

https://gist.github.com/Zibri/19f9838ffd12349bb2c6c3afddc9388f/

于25/02/2020更新至1.2版。
无需互联网连接。
由于代码被混淆,病毒总数报告6(误报)超过96。


它不是。该程序已压缩并受到保护,某些防病毒软件提供了误报。这不是病毒。
Zibri

对于举报者:该程序在Virustotal处得到某种程度的令人震惊的检测,但它似乎是常规检测和“潜在有害程序”检测。由于该程序的作用,很有可能使它进入了恶意软件套件,但是直到有人可以提供直接的证据证明这是实际的恶意软件之后,答案才是当前。
Mokubai

我没有发布源代码,仅基于我的“简单”代码,就很难进行逆向工程以仅“延迟”或“限制”准确扩散恶意软件。我正在考虑发布源,这不是秘密,我只是不想成为未来基于uefi的恶意软件的主要原因。
Zibri

编辑:今天更新到版本1.1。
Zibri

更新到版本1.2
Zibri

1

我刚刚购买了Dell XPS 17(l702x),并且对多种操作系统的多重启动感兴趣。如果我所理解的是正确的,则戴尔具有某种形式的锁定的Phoenix SecureCore Tiano UEFI'BIOS'。根据我的阅读,UEFI不能直接使用(可能通过隐藏菜单等,可能需要BIOS mod)。

使用开源(BSD)TianoCore edk2 / ShellPkg(源代码)和edk2 / ShellBinPkg(二进制)程序包(GIT Repo),似乎确实可以使用/访问Phoenix兼容的EFI shell 。

我建议使用UEFI Shell 2.0的“完整外壳”配置文件(支持最多的命令)更新的ShellBinPkg。您还可以使用ShellPkg(构建独立版本或将其包含在OVMF软件包中以生成x64版本)来重建自定义外壳程序- 在Linux发行版iso中包含UEFI shell

[U] EFI shell二进制文件经过编译可独立于固件运行。可以通过将外壳放置在/efi/boot/bootx64.efi[UEFI] BIOS 上的FAT32文件系统(USB记忆棒,硬盘驱动器分区)上,重命名为,然后启动它来进行测试。

通过键入可以访问Shell的帮助文本help utilname。仅使用就会help产生所有可用的shell命令的列表。

注意:如果无法直接从固件启动UEFI Shell,请创建一个FAT32 USB笔式驱动器,并将Shell.efi复制为(USB)/efi/boot/bootx64.efi。该USB应该出现在固件启动菜单中。启动此选项将为您启动UEFI Shell。- Arch Linux的公司采取的UEFI


那很棒。我买了相同型号的l702x ;-)我明天试试!据我所知,隐藏的菜单仍然无法解锁。顺便说一句,您是否已编译bootx64.efi并在您的xps上进行了测试?
marstone 2012年

ShellBinPkg是UEFI Shell预编译的二进制文件,您只需要重命名它并放在正确的目录中即可。我尝试了一下,但它对我没有用,但是我不相信它是唯一可用的外壳程序(我也是新手)。这篇文章似乎提供了一个应该与Phoenix SecureCore Tiano一起使用的shell下载(请参阅the.ridikulus.rat-> cfr对话)。让我们知道您的身体情况如何。
大富翁

我尝试将上述文章中的efi文件放入/efi/boot/bootx64.efi,但是,我的USB磁盘已正常引导到grub(它已经可以引导了);然后我将U盘格式化为HDD模式,并且出现错误“删除磁盘或其他媒体...”。然后,我在u盘中逐个扇区地对该字符串进行十六进制搜索,但不存在。该消息必须来自L702x的Tiano BIOS。我的操作有什么问题吗?
marstone 2012年

@marstone,对不起,但是当涉及到UEFI时,我本人还是新手(我对我的Google-fu;-表示满意)。在其他地方被占用后,我一会儿就会尝试一下,让您知道我的生活。干杯,富有。
大富翁

尽管戴尔现在已经发布了启用UEFI的BIOS(A19),但笔记本评论上的“ capitankasar” 张贴了2倍改进的 A18 BIOS(uefiuefi + nvida gpu),但它们解决了UEFI,NVidia GPU超频和风扇速度等问题(其中一些功能)可能还存在于戴尔的官方版本中,我自己尚未确认)。与往常一样,使用风险自负;-)
Big Rich

0

在实验中,我得出以下结论:

如果您希望使用U / EFI多重引导USB钥匙,则必须:

  1. 彻底清除所有分区/擦拭驱动器;
  2. 将其转换为GPT;
  3. 创建一个主分区并将其格式化为Fat32;
  4. 在驱动器的根目录中创建一个名为EFI(不区分大小写)的目录;
  5. 在先前的目录中创建一个名为boot的子目录(也不区分大小写)
  6. 将所需的.efi文件放入其中,并对其进行重命名以匹配系统的体系结构:如果是x64,则为bootx64.efi;如果是x86,则为bootia32.efi;如果是ARM64,则为bootaa64.efi。

在Dell Inspiron 5437触摸屏上进行了尝试,并完美运行。

最后一件事:如果.efi文件未使用Microsoft的数字签名进行签名,则必须仅在fw设置下禁用安全启动模式。使UEFI引导和快速引导模式保持启用状态。

为了进行测试,请在永久安装OEM计算机之前找到它的多重启动密钥,然后uefi: <your usb key>从显示的列表中进行选择。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.