论坛首页 恶意代码分析区 阅读主题

[原创]调试Windows11启动过程

248 浏览 8 回复
#1 楼主 2026-06-01 21:08:48
本文的我复现《软件调试卷2:Windows平台调试》(以下简称《软件调试》)中相关实验的总结。《软件调试》中调试的是32位系统,我这里使用64位Windows 11系统进行复现。由于笔者水平十分有限,文中难免出现错误,恳请广大读者斧正。系统上电之后,CPU首先执行固化在系统主板上的固件(firmware)代码,目的是检测和初始化基本硬件。固件程序分为两种:这里不多讨论两种固件程序的实现细节和区别,感兴趣的读者可以阅读《x86汇编:从实模式到保护模式》与《Rootkit和Bootkit:现代恶意软件逆向分析和下一代威胁》(以下简称《R&B》)。现在大多使用UEFI。下图来自《R&B》: 现在我们使用windbg对Windows的启动过程进行调试。UEFI是整个启动过程的开始。这里不会太深入的讲解UEFI,但是对UEFI有一点了解可以更好的理解接下来的内容。首先说说Boot Loader。boot一词的词源是Pull oneself up by one's bootstraps,译为“靠自己的靴子拉带把自己提起来”字面意思:想象一个人抓住自己靴子上的带子,试图把自己提离地面。引申含义:这是一个不可能完成的任务,后来被用来形容“不靠外界帮助,完全靠自己完成某事”。计算机启动的过程非常像那个“提靴子”的动作:计算机必须依靠一个极其微小的、预先写死的“种子”程序,去一步步把庞大的操作系统“拉”起来。这就像抓住自己的靴带把自己提起来一样,因此这个过程被称为 Booting (引导/启动)。步骤一和步骤二的代码驻留在主板的闪存芯片上(SPI闪存),步骤3和步骤4的代码从硬盘驱动器的特殊UEFI分区的文件系统中提取。**操作系统加载程序实际上依赖于UEFI固件提供的EFI引导服务和EFI运行时服务来引导和管理系统。**这里提到了两个概念:在UEFI架构中,EFI引导服务和EFI运行时服务是固件提供给操作系统加载器(如bootmgfw.efi)的两套核心API接口,它们的定义与区别如下:EFI 引导服务 (Boot Services): 这是一套临时性的API接口,存在于系统启动阶段。它的核心任务是协助操作系统加载器(如Windows Boot Manager)完成启动准备工作,包括分配内存、加载驱动、读取文件等。一旦操作系统内核接管控制权,这些服务就用不了了。EFI 运行时服务 (Runtime Services): 这是一套永久性的API接口,在操作系统运行期间持续有效。它的核心任务是为操作系统提供底层的硬件访问能力,例如读取/设置硬件时钟、电源管理(关机/重启)、以及读写NVRAM中的EFI变量(如BCD配置)。要调试win11的启动,首先我们要让Win11在启动的瞬间停下来,将控制权移交给调试器。为了达到这个目的,我们需要使用bcdedit.exe程序,它的全称为Boot Configuration Data Editor(启动配置数据编辑器)。它是一个命令行工具,用来修改硬盘上的一个数据库文件(BCD文件)。这个数据库里存放着Windows启动所需的参数(配置)。BCD文件存放在EFI系统分区(ESP)中。我们无法在Windows资源管理器中看到它,因为它位于一个隐藏的、未分配盘符的特殊分区里(如下图): 当运行 bcdedit 修改了配置后,系统下次启动时就会按照修改后的BCD文件执行启动。在《软件调试》和大部分资料中,都是给出下面的命令启用bootmgr和winload的调试引擎:经过实验证明,在win11中大概是行不通的。在win11中执行上述命令之后,大概率会得到一行报错:参考微软相关文档以及实验证明,以一般的方式(管理员命令行)运行bcdedit程序,只有下面这条指令可以开启调试引擎,并且开启的还不是bootmgr的,而是bootmgr下一阶段的winload:为什么不能开启bootmgr的调试引擎呢?还是翻阅微软的文档:2f7K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6D9k6h3q4J5L8W2)9J5k6h3#2A6j5%4u0G2M7$3!0X3N6q4)9J5k6h3y4G2L8g2)9J5c8Y4A6Z5i4K6u0V1j5$3&6Q4x3V1k6%4K9h3&6V1L8%4N6K6i4K6u0V1K9r3q4J5k6s2N6S2M7X3g2Q4x3V1k6V1M7X3W2$3k6i4u0K6i4K6u0r3k6r3g2$3N6r3g2K6N6q4)9J5c8X3u0U0k6r3g2V1K9i4c8Q4x3X3c8Q4x3X3c8V1k6h3u0#2k6H3`.`.里面提到:设置 BCDEdit 选项之前,可能需要禁用或暂停计算机上的 BitLocker 和安全启动。我们遇到的 bcdedit /set {bootmgr} bootdebug on 报错,并非语法错误,而是 Windows 11 的 UEFI 安全机制在作祟。在 Windows 11 中,BCD 存储被底层固件(UEFI)锁定了。任何试图直接修改 {bootmgr} 标识符的操作都会被系统拦截,导致“参数错误”。因此,调试器只能在 winload.efi 阶段才成功接管,完美错过了 bootmgr 阶段。既然无法在系统运行时修改,我们必须**重启进入“高级启动模式”**来绕过这个锁。请按以下步骤操作: 命令的含义不多解释,做过Windows内核驱动开发的都懂。如果先前windbg是可以在Windows内核中断下来,后三条指令应该是可以不执行的。现在重启虚拟机,虚拟机屏幕左上角中会一闪而过类似Windows bootmgr的字样(速度过快我没有截图下来),接着虚拟机黑屏,中断运行,WinDbg 就在 bootmgr 阶段成功断下了: 虚拟机启动后会等待调试器的连接,如果不需要进行调试了使用下面的命令关闭对bootmgr的调试引擎: 关于其它调试引擎的开启和关闭,这里不多赘述,请参考微软官方文档:启动选项标识符BCDEdit /bootdebug这是Windows启动最早的代码,UEFI就是将控制权移交给该模块的。bootmgfw被称为Windows引导管理器(参考《R&B》)。先前的{bootmgr}(BCD 标识符)是一个逻辑概念,它是 BCD 配置数据库里的一个条目。而bootmgfw.efi(物理文件):是实体,它是被加载到内存中运行的代码本身。bootmgfw.efi保存在\EFI\Microsoft\Boot\bootmgfw.efi中,简单来说就是在EFI系统分区(ESP)中。还记得前面提到的UEFI保存在哪里吗?保存在SPI中。有人可能会问,为什么不将bootmgfw.efi保存在C盘中。这是因为UEFI 固件(BIOS)启动电脑时,只能读取 FAT32 格式的分区。而Windows 系统盘(C盘)通常是 NTFS 格式,UEFI 读不懂。系统盘存放真正的 Windows 内核和系统文件。我们以栈回溯为线索看看bootmgfw.efi做了什么。**EFI引导管理器在内存中创建bootmgfw.efi的运行时映像。该模块加载后,UEFI固件引导管理器跳转到bo

...(已截断)

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-290964.htm
#2 2026-06-01 21:08:48
我看怎么像win7的cmd?
#3 2026-06-01 21:08:48
你好,上面的截图来自我的实验过程。从Windows11的高级启动中进入命令提示符,确实是这样的,这是为了安全和极简所做的刻意设计。进入高级启动模式后,实际上在运行的是Windows恢复环境,也就是Windows PE系统,该系统并不支持Windows11那样的透明效果或者亚克力背景。如果还有疑问,可以参考一下微软官方的链接:
使用 Windows 恢复环境 (WinRE) 排查常见的启动问题
DISM Windows PE 服务命令行选项
#4 2026-06-01 21:08:48
mb_soqpzdaf

我看怎么像win7的cmd?
你好,上面的截图来自我的实验过程。从Windows11的高级启动中进入命令提示符,确实是这样的,这是为了安全和极简所做的刻意设计。**进入高级启动模式后,实际上在运行的是Windows恢复环境,也就是Windows PE系统,该系统并不支持Windows11那样的透明效果或者亚克力背景。**
如果还有疑问,可以参考一下微软官方的链接:

[使用 Windows 恢复环境 (WinRE) 排查常见的启动问题](a9cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6D9k6h3q4J5L8W2)9J5k6h3#2A6j5%4u0G2M7$3!0X3N6q4)9J5k6h3y4G2L8g2)9J5c8Y4A6Z5i4K6u0V1j5$3&6Q4x3V1k6@1M7X3!0#2j5X3I4W2M7$3S2G2L8%4c8Q4x3V1k6%4K9h3&6V1L8%4N6K6i4K6u0V1M7$3g2J5N6X3g2J5i4K6u0r3M7r3g2J5k6X3!0J5L8h3q4F1j5$3g2Q4x3V1k6#2M7$3g2Q4x3X3c8%4K9h3&6J5k6g2)9J5k6s2c8G2i4K6u0V1N6s2u0G2N6h3u0D9k6i4y4Z5L8$3!0@1i4K6u0V1M7%4c8S2M7Y4c8#2M7q4)9J5k6r3W2K6M7%4g2W2i4K6y4r3M7$3!0#2M7X3y4W2i4K6y4p5M7X3g2U0L8$3#2E0k6h3&6V1j5i4c8A6L8$3&6K6i4K6t1&6

[DISM Windows PE 服务命令行选项](1aaK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6D9k6h3q4J5L8W2)9J5k6h3#2A6j5%4u0G2M7$3!0X3N6q4)9J5k6h3y4G2L8g2)9J5c8Y4A6Z5i4K6u0V1j5$3&6Q4x3V1k6%4K9h3&6V1L8%4N6K6i4K6u0V1K9r3q4J5k6s2N6S2M7X3g2Q4x3V1k6E0j5h3&6#2k6X3q4U0N6s2g2J5k6g2)9J5c8X3c8W2M7$3E0@1L8%4m8Q4x3V1k6V1K9i4y4E0i4K6u0V1N6$3W2F1k6r3!0%4M7#2)9J5k6s2m8W2i4K6u0V1M7$3g2J5N6X3W2U0K9h3&6Y4i4K6u0V1j5$3!0E0L8h3q4F1k6q4)9J5k6r3I4A6L8X3g2Q4x3X3c8G2M7s2c8A6L8$3&6K6i4K6y4r3N6X3W2W2N6#2)9K6c8s2N6A6L8X3c8G2N6%4y4Q4x3X3b7I4x3g2)9J5z5b7`.`.
#5 2026-06-01 21:08:48
mb_nnqgphwf

你好,上面的截图来自我的实验过程。从Windows11的高级启动中进入命令提示符,确实是这样的,这是为了安全和极简所做的刻意设计。**进入高级启动模式后,实际上在运行的是Windows恢复环境,也就是 ...
好的,是我孤陋寡闻了,知识不足。
#6 2026-06-01 21:08:48
mb_soqpzdaf

好的,是我孤陋寡闻了,知识不足。
我之前也有和你一样的疑问,但我觉得这个问题无关紧要。但是既然有人在评论区提问了,我作为作者有必要查阅资料解决读者的疑惑。一起加油
#7 2026-06-01 21:08:48
果然做技术的都是夜猫子. 为你点赞. 大佬熟悉启动流程是不是自己在任意点做个手脚就可以实现比较厉害的 rootkit了.
#8 2026-06-01 21:08:48
TkBinary

果然做技术的都是夜猫子. 为你点赞. 大佬熟悉启动流程是不是自己在任意点做个手脚就可以实现比较厉害的 rootkit了. [em_071]
不敢当。我读《Rootkit和Bootkit:现代恶意软件逆向分析和下一代威胁》还比较吃力,得一步步来
#9 2026-06-01 21:08:48
感谢分享.学习了.

请登录后参与讨论

立即登录 注册账号