使用 EfiGuard 关闭 PatchGuard

PatchGuard 是 Windows 内核中的防御机制,用于检查内核中关键的数据结构和代码是否被恶意软件或驱动程序篡改。如果发现异常,PatchGuard 会直接以错误码CRITICAL_STRUCTURE_CORRUPTION或者KERNEL_SECURITY_CHECK_FAILURE触发蓝屏。在对 Windows 内核进行安全研究时,如果需要对内核中的关键函数进行挂钩,就必须先关闭 PatchGuard,否则测试过程会受到影响。

目前,最为成熟的关闭 PatchGuard 的方法是使用EfiGuard。EfiGuard 是一个 EFI 固件,可以在系统启动时提前劫持 Windows Boot Manager,进而实现对 Windows 内核的动态修补,阻止 PatchGuard 初始化的相关代码执行。EfiGuard 有多种使用方法,以下进行详细说明。

下载 EfiGuard

EfiGuard 的二进制 EFI 文件可以直接从 GitHub 的 Release 页面上下载。解压后,你会得到Loader.efiEfiGuardDxe.efi两个文件。它们就是我们需要的 EFI 固件。接下来,将Loader.efi重命名为bootx64.efi,后续步骤我们也直接使用bootx64.efi文件。

准备环境

接下来,需要确保当前机器的 BIOS 中设置为通过 UEFI 启动,并且识别到了 Windows Boot Manager 启动项。通常情况下,全新安装的 Windows 系统都满足这一要求。然而,笔者在实验中也发现,一些笔记本预装的 Windows 系统的启动项中并不包含 Windows Boot Manager,而是只有 NVMe0 这样的磁盘。Windows 系统虽然可以启动,但是这时直接加载 EfiGuard 可能会导致启动失败。

不存在Windows Boot Manager

这时,需要手动修复启动项。比较简单的解决方案是使用 Dism++ 等工具修复引导。打开 Dism++,点击「恢复功能」中的「引导修复」,即可重新添加 Windows Boot Manager 启动项。完成后,可以重新启动,判断 BIOS 是否识别到了 Windows Boot Manager。

部署 EfiGuard

通过普通 U 盘启动

最简单的方法就是参考 EfiGuard 的文档,在 U 盘上创建/EFI/Boot/目录,然后将bootx64.efiEfiGuardDxe.efi两个文件复制到该目录中。完成后,将 U 盘插入待测试的电脑,然后选择通过 U 盘启动即可。如果一切正常,EfiGuard 会在启动时自动加载,并输出大量的日志(特征为绿色文字)。

通过 Ventoy 启动

Ventoy 也可以用于加载 EfiGuard。将bootx64.efiEfiGuardDxe.efi两个文件复制到安装了 Ventoy 的 U 盘根目录下。然后,重启电脑,选择通过 Ventoy 启动。进入 Ventoy 页面后,首先点击EfiGuardDxe.efi,它会自动加载驱动程序,并退回到 Ventoy 菜单。之后,再次点击bootx64.efi,EfiGuard 就会开始工作,完成系统启动并关闭 PatchGuard。