数字人民币应用的五大猜想
定这与显示BIOS密码菜单项的代码有关,并且它所调用的GetFlags()函数是某种函数。该函数的代码只是从内存地址中读取一个值,然后将其返回。我们使用UEFI Shell编辑内存中的标志值并将其设置为0,然后尝试再次加载设置实用程序。我们甚至可以转到安全性选项卡并取消/重置BIOS密码! 可悲的是,在重新启动笔记本电脑并尝试正常进入设置实用程序之后,它仍然提示我们输入旧密码。 GUID模拟EEPROM
BpwManager驱动程序中的几乎每个函数都调用了GUID为 9FFA2362-7344-48AA-8208-4F7985A71B51的协议。我们使用UEFITool的GUID搜索函数来查找对该协议的所有引用。一个引起我兴趣的是一个名为EmuSecEepromDxe的Driver。将其加载到IDA中,并确认这是注册有问题协议的驱动程序。该协议由三个函数指针组成,其中一个指针除了返回错误值外什么也不做。基于其余两个函数的十六进制输出以及如何在BpwManager驱动程序中使用它们,我们构造了此结构来描述协议: 我们在转储中搜索了该字符串的一部分,然后将包含它的DXE驱动程序加载到IDA中。加载后,我们将遵循外部参照来找到引用它的代码。似乎它将尝试获取具有特定GUID的协议的句柄,如果无法获取,则将获取日志记录协议的句柄并将错误消息发送给它。我们跟踪了实现所需协议的驱动程序,并查看了它尝试访问的所有NVRAM变量。其中一个具有SecConfig名称,因此我们尝试清除除该变量之外的所有NVRAM变量,并希望达到最佳效果。 主板成功启动,安全启动已禁用!但是,BIOS密码仍处于启用状态。不能将其存储在SecConfig 变量,因为在查看其内容后,我们确定它只是一堆启用/禁用标志。变量中没有足够的数据来包含密码或密码的哈希值。根据这些发现,我们得出结论,BIOS密码必须存储在NVRAM以外的其他位置,并且甚至可以将flash密码存储在完全不同的芯片上。 固件修改加载到安装程序 通过退出正在运行的UEFI应用程序(在本例中为UEFI Shell的副本),启动到flash驱动器后,可以返回到启动设备选择菜单。但是,完成此操作后,从启动菜单进入设置菜单的选项将消失,我们查看了设置菜单的NVRAM引导项,并看到它正在引导到GUID为2AD48FB3-2E28-42F2-88D5-A73EC922DCBA的UEFI应用程序。通过在UEFITool中搜索该GUID,我们在固件中找到了该应用程序的可执行文件。我们将其提取并放在flash驱动器上,尝试从shell中执行该应用程序,但是由于某种原因,该可执行文件被标记为DXE驱动程序,而不是UEFI应用程序。我们设法通过使用load 命令而不是直接运行它,但是即使以这种方式启动它,也会看到密码提示。 在内存中修改固件
我们想跟踪处理密码检查逻辑的驱动程序,以便可以在内存中对其进行修补。想要制作的补丁程序会使其认为未设置密码。这不是一个永久性的解决方法,但是如果它能够正常工作,它将使我们能够进入设置菜单。除此之外,我们在固件映像中浏览了所有DXE的名称。BpwManager之所以特别,是因为我们认为Bpw可能是BIOS密码的缩写。我们将其加载到IDA中,然后查看其所有字符串。知道当我们看到正确的driver时 12AE: Sys Security - BIOS password entry failure count exceeded在字符串列表中。驱动程序注册了一个协议,该协议由多个函数指针组成。我们查看了设置实用程序使用该协议的所有地方,并找到了一个我们认为它正在确定是否启用BIOS密码的地方。它调用了协议提供的函数之一,如果返回值设置了最低位,它将对字符串进行Enabled处理,否则将对字符串进行Disabled处理。 (编辑:淮南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |