fangyzhai 发表于 2022-11-23 12:46 机会有了么 |
谢谢分享 |
学习了 |
用xb21cn的系统就可以。。 |
topway 发表于 2023-5-14 12:23 这跟secure boot没有关系。 |
学习了~ |
topway 发表于 2023-5-14 12:23 secure boot肯定要自己签名 其他的没试过 |
gailium 发表于 2023-4-30 08:45 支持secure boot吗?可针对ipxe.efi snponly.efi试验吗? |
liuzhaoyzz 发表于 2023-4-29 23:01 通过替换ci方式干掉全部签名校验,支持legacy和uefi。暂时不想公开 |
gailium 发表于 2023-4-29 22:03 cishim,是不是也是只能用于UEFI的? |
liuzhaoyzz 发表于 2023-4-29 17:24 我最近还研究了cishim从根源上解决数字签名校验问题,无需修补pg |
wintoflash 发表于 2023-4-29 17:54 原来github上,有个 FuckCertVerifyTime ,可惜不更新了。 |
liuzhaoyzz 发表于 2023-4-29 17:21 只支持64位UEFI。 32位没必要支持,因为32位Windows没强制签名验证。 BIOS情况的话,装的系统估计也就是Win7 64位。 Win7的漏洞比较多,有程序可以直接完美绕过的。https://github.com/hfiref0x/DSEFix 就算不绕过,也有很多泄漏的签名可以用。 |
gailium 发表于 2023-4-29 15:05 upgdsed原来听论坛的一个大神介绍个,我原来折腾过,没有折腾成功,后来我研究了驱动伪签名,感觉比折腾系统要可靠,信任根证书就行了。 |
Mattiwatti/EfiGuard: Disable PatchGuard and DSE at boot time https://github.com/Mattiwatti/EfiGuard 概述 EfiGuard 是一个便携式 x64 UEFI bootkit,它在启动时修补 Windows 启动管理器、启动加载程序和内核,以禁用 PatchGuard 和驱动程序签名强制 (DSE)。 特征 目前支持从 Vista SP1 到 Windows 11 的所有 EFI 兼容版本的 Windows x64。 易于使用:可以通过自动查找和启动 Windows 的加载程序从 U 盘或 Windows EFI 分区启动。也可以使用 UEFI shell 或加载程序手动加载和配置驱动程序。 广泛使用Zydis反汇编程序库进行快速运行时指令解码,以支持比签名匹配更强大的分析,而签名匹配通常需要随着新的操作系统更新进行更改。 被动工作:驱动程序不加载或启动 Windows 启动管理器。bootmgfw.efi相反,它由固件引导管理器通过引导选择菜单或 EFI 应用程序(如加载程序)加载。如果启动非 Windows 操作系统,驱动程序将自动卸载。 bootmgfw.efi支持何时开始bootmgr.efi而不是 .的四阶段修补winload.efi。当加载 WIM 文件以启动 WinPE、Windows 安装程序或 Windows 恢复模式时就是这种情况。 Graceful recovery:补丁失败时,驱动会显示错误信息并提示继续开机或按ESC键重启。即使在最后的内核补丁阶段也是如此,因为最后一个补丁阶段发生在ExitBootServices调用之前。许多 UEFI Windows bootkits 挂钩OslArchTransferToKernel,虽然很容易通过模式匹配找到,但它是一个在 . 之后以保护模式执行的函数ExitBootServices。这意味着没有可用的启动服务来告诉用户出了什么问题。 蓝屏 带有错误信息的模拟补丁失败 可调试:可以在内核修补阶段将消息输出到内核调试器和屏幕(尽管已缓冲),并在引导管理器和引导加载程序修补阶段输出到串行端口或未缓冲到屏幕。如果驱动程序是使用 PDB 调试信息编译的,则可以在 HAL 初始化后的任何时候加载调试符号,方法是指定虚拟 DXE 驱动程序基并像调试常规 NT 驱动程序一样对其进行调试。 DSE 绕过:可作为直接的UPGDSED样式 DSE 在启动时禁用或作为 EFI 运行时服务上的挂钩SetVariable()。后者充当任意内核模式读/写后门,可以从 Windows 使用调用NtSetSystemEnvironmentValueEx并允许将g_CiEnabled/设置g_CiOptions为所需的值。提供了一个名为 DSEFix 的小型应用程序EfiDSEFix.exe,可用于执行此操作。也可以启用 DSE 并仅禁用 PatchGuard。默认情况下,加载程序将使用SetVariable挂钩方法,因为一些反作弊和防病毒程序通常不理解作弊或恶意软件与自签名驱动程序之间的区别,并且以 UPGDSED 修复为目标。 ImgpValidateImageHash通过在每个阶段打补丁以及 ,支持磁盘上修改的内核和引导加载程序ImgpFilterValidationFailure,这可能会默默地将某些类别的违规行为排除在 TPM 或 SI 日志文件中。 允许安全启动与 Windows 7 一起工作(不是开玩笑!)。Windows 7 本身不支持安全启动,因为它不支持它,或者(官方)甚至在没有 CSM 的情况下启动。这对于想要在需要 WHQL 安全启动的锁定设备上使用 Windows 7 的人很有用。有关如何使其在此处工作的 Wiki 条目。 win7_secureboot Windows 7 上启用安全启动的WinObjEx64 问题和限制 由于 HVCI 在更高的特权级别运行,EfiGuard 无法禁用 Hypervisor 强制代码完整性(HVCI 或 HyperGuard)。EfiGuard可以与 HVCI 共存,甚至可以在普通内核中成功禁用 PatchGuard,但这在实践中没有用,因为 HVCI 会捕获 PatchGuard 之前所做的事情。两种类型的 DSE 绕过都被 HVCI 变得无用:启动时间补丁没有效果,因为内核遵从安全内核进行完整性检查,如果 hook用于写入 .hookSetVariable将导致错误检查。SECURE_KERNEL_ERRORg_CiOptions 由于禁用优化和添加断言导致 PatchGuard 和 DSE 初始化代码不同,以及检查内核中 PatchGuard 的其他更改,因此不支持检查内核。这应该不是问题,因为如果没有附加内核调试器,检查内核通常不会有用,这会禁用 PatchGuard。 如何使用 有两种使用 EfiGuard 的方法:引导加载程序(最简单),或使用 UEFI shell 加载驱动程序。在这两种情况下,都可以将 EfiGuard 安装在辅助引导介质(例如 U 盘)或 EFI 系统分区上。使用 EFI 分区的优点是不需要第二张启动盘,但这种方法设置起来比较复杂。建议首先尝试以下方法之一,如果您想在 EFI 分区上安装 EfiGuard,请阅读问题 #2中的说明。 引导加载程序 下载或编译 EfiGuard,转到EFI/Boot并将其中一个Loader.efi或重命名Loader.config.efi为bootx64.efi. 两者是相同的,除了在Loader.efi没有用户交互的情况下启动而Loader.config.efi会提示您配置驱动程序使用的 DSE 补丁方法(如果您想更改它)。 将文件放在引导驱动器上,例如 USB 记忆棒(对于物理机)或 ISO/虚拟磁盘(对于 VM)。路径应该是/EFI/Boot/{bootx64|EfiGuardDxe}.efi. 建议使用 FAT32 格式的 U 盘。 从新驱动器引导机器而不是引导 Windows。大多数固件都提供启动菜单来执行此操作(可通过 F10/F11/F12 访问)。否则,您需要将 BIOS 配置为从新驱动器启动。 如果您使用的是默认加载程序,Windows 现在应该启动,并且您应该在启动期间看到 EfiGuard 消息。如果您使用的是可配置加载程序,请回答配置提示,Windows 将启动。 如果您使用SetVariable挂钩(默认设置)启动,请EfiDSEFix.exe -d在启动后从命令提示符运行以禁用 DSE。运行EfiDSEFix.exe以查看完整的选项列表。 使用 UEFI shell 加载驱动程序 按照上面的步骤 1 和 2 进行操作,但不要将加载程序重命名为bootx64.efi. 相反,要么使用 BIOS 提供的 shell(如果有的话),要么下载EDK2 UEFI Shell并将其重命名为bootx64.efi. 将机器引导至 UEFI shell。 cd到/EFI/Boot正确的文件系统并运行load EfiGuardDxe.efi以加载驱动程序。 (可选)运行Loader.efi或Loader.config.efi从同一目录启动 Windows。您还可以继续在 shell 中工作,或者exit返回 BIOS/引导菜单并从那里引导。 启动后,如果适用,应用上述 DSE 修复程序。 汇编 编译 EfiGuardDxe 和加载器 EfiGuard 需要 EDK2 来构建。如果您没有安装 EDK2,请先按照EDK2 入门中的步骤进行操作,因为 EDK2 构建系统的设置相当复杂。本节假定您有一个环境变量指向workspace的目录WORKSPACE,并在workspace/edk2. 支持的编译器有 MSVC、Clang、GCC 和 ICC。 将 EfiGuard 存储库克隆到workspace/edk2/EfiGuardPkg. 打开为 EDK2 设置环境变量的提示符或 shell。 运行build -a X64 -t VS2019 -p EfiGuardPkg/EfiGuardPkg.dsc -b RELEASE,将您的工具链替换为 VS2019。 这将产生EfiGuardDxe.efi并Loader.efi在workspace/Build/EfiGuard/RELEASE_VS2019/X64. 要构建可交互配置的加载器,请附加-D CONFIGURE_DRIVER=1到构建命令。 编译 EfiDSEFix EfiDSEFix 需要 Visual Studio 来构建。 打开EfiGuard.sln并构建解决方案。 输出二进制文件EfiDSEFix.exe将在Application/EfiDSEFix/bin. Visual Studio 解决方案还包括可与 VisualUefi 一起使用的项目EfiGuardDxe.efi,但Loader.efi默认情况下不会构建这些项目,因为它们不会在没有附加代码的情况下进行链接,并且构建输出将比 EDK2 生成的输出差(大)。由于 VisualUefi 缺少 UefiBootManagerLib,因此根本不会链接。因此,这些项目文件仅用作开发辅助工具,EFI 文件仍应使用 EDK2 进行编译。要为此目的设置 VisualUefi,请将存储库克隆到并打开.Loader.efiworkspace/VisualUefiEfiGuard.sln 建筑学 建筑学 虽然 EfiGuard 是一个 UEFI bootkit,但它最初并不是一个。EfiGuard 最初是一个在 NT 上运行的磁盘修补程序(类似于UPGDSED),旨在测试基于反汇编程序的可行性,而不是使用 PDB 符号和特定于版本的签名。PatchNtoskrnl.c看起来仍然非常像这个原始设计。只有在这种方法被证明是成功的,并且在一年多的 Windows 更新中无需修改代码之后,UEFI 才作为一种进一步提高功能和易用性的方式出现。 Bootkit 方法提供的一些好处包括: 无需对内核或引导加载程序进行磁盘上的修改。 无需使用bcdedit. 不需要打补丁ImgpValidateImageHash(尽管这仍然是可选的)。 具有讽刺意味的是,使用 bootkit 允许启用安全启动,前提是您拥有平台密钥并且能够将您的个人证书添加到商店db。 EfiGuard 作为 bootkit 的最初化身是试图让 dude719 的UEFI-Bootkit与最新版本的 Windows 10 一起工作,因为它已经过时并且不再适用于最新版本(如 UPGDSED,通常由版本敏感模式引起扫描)。虽然我最终确实让它工作了,但我对结果并不满意,主要是因为选择了 hooking OslArchTransferToKernel,如上所述,它在保护模式下执行并在ExitBootServices被调用之后执行。除此之外,我并不满足于只能为某些版本的 Windows 10 打补丁;我希望 bootkit 能够在迄今为止发布的每个 EFI 兼容版本的 Windows x64 上运行。因此,我从头开始重写了 bootkit,目的如下: 在启动的每个阶段提供补丁信息,包括内核补丁本身。 支持 Windows 版本的所有 EFI 兼容版本(在撰写本文时)。 启用 bootkit 的惰性实例化和可选的内核后门,通过 EFI 系统表挂钩实现。 上图显示了最终 EfiGuard 引导流程的大图概览。对于各个特定于组件的挂钩和补丁,请参阅EfiGuardDxe/PatchXxx.c源文件。对于驱动程序初始化/卸载以及 EFI 引导和运行时服务挂钩,请参阅EfiGuardDxe.c。 学分 由hfiref0x和Fyyre更新 由zyantific提供的Zydis Skywing关于 PatchGuard v1、v2和v3的不知情文章 dude719的UEFI-Bootkit 操作系统 执照 EfiGuard 在 GPLv3 下获得许可。子模块中的文件EfiGuardDxe/Zydis根据 MIT 许可证获得许可。 好像只适合于EFI启动。 |
谢谢分享 |
感谢分享 |
谢谢分享 |
liuzhaoyzz 发表于 2023-4-29 08:02 github上搜 efiguard |
liuzhaoyzz 发表于 2023-4-29 08:02 老版本有upgdsed,停更了,1809之后他字节改了,懒得去更新这个patch了 |
试试efiguard,虽然我还没来得及尝试 |
fangyzhai 发表于 2022-11-23 01:43 这种坑谁能想到 |
谢谢分享 |
gailium 发表于 2022-11-23 12:19 不折腾了,先收藏,有机会再试。感谢感谢 |
使用ida修改这三个文件: bootmgr.efi/bootx64.efi(exe): ImgpValidateImageHash 头部3字节 33 C0 C3 windows.efi(exe) : ImgpValidateImageHash 头部3字节 33 C0 C3 OslInitiallizeCodeIntegrity 头部3字节 B0 01 C3 ntoskrnl.exe : SeValidateImageData 查找反汇编 mov eax, 0C0000428h 改成 mov eax,0 CcInitializeBcbProfiler 头部3字节 B0 01 C3 KeInitAmd64SpecificState 头部3字节 33 C0 C3 ExpLicenseWatchInitWorker 头部3字节 33 C0 C3 SepInitializeCodeIntegrity 查找反汇编 mov ecx,edi 改成 xor ecx,ecx |
fangyzhai 发表于 2022-11-23 10:49 不急,等楼主解决了再分享。 |
ylac 发表于 2022-11-23 08:29 打开下载的win11的ISO镜像文件,用DWIM_GUI等wim镜像工具挂载install.wim文件,找到需要的文件,复制到系统盘相应的目录下,替换掉原文件。 |
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.