关于TCI的Z:\pagefile无助于蓝屏dmp生成的研究的阶段研究——蓝屏dmp生成、内核调试、IDA逆向

关于TCI的Z:\pagefile无助于蓝屏dmp生成的研究的阶段性研究

1 背景知识

1.1 TCI的磁盘分区和启动

真实磁盘做了若干分区,其中一个分区姑且称为lessons分区,一个分区姑且称为rainmisc分区。
root@RainOS:~# fdisk -l
Device Start End Sectors Size Type
/dev/sda1 2048 206847 204800 100M EFI System
/dev/sda2 206848 411647 204800 100M Microsoft reserved
/dev/sda3 411648 5294079 4882432 2.3G Microsoft reserved
/dev/sda4 5294080 14626079 9332000 4.5G Linux filesystem
/dev/sda5 14626816 500117503 485490688 231.5G Linux filesystem
root@RainOS:~# blkid
/dev/sda4: LABEL=“RJSYSTEM” UUID=“6a379460-dea1-4375-951f-20aba88be370” TYPE=“ext4” PARTLABEL=“RainOS” PARTUUID=“09e056b8-546b-4cd0-b2c7-4e30f7af4c76”
/dev/sda5: LABEL=“RJLESSON” UUID=“aab520a0-14cf-4301-bfbc-213f9d136f8d” TYPE=“ext4” PARTLABEL=“lessons” PARTUUID=“ffe0885c-aac6-4a69-b331-b1ee5e6d4354”
/dev/loop7: UUID=“b97abebe-9d7b-4a58-aea7-b5d5b7dabd5b” TYPE=“ext4”
/dev/sda1: SEC_TYPE=“msdos” LABEL_FATBOOT=“RJBOOT” LABEL=“RJBOOT” UUID=“5BB4-0B99” TYPE=“vfat” PARTLABEL=“RainBoot” PARTUUID=“b8d004ae-1b78-43ee-b206-f42d9106f4ae”
/dev/sda2: SEC_TYPE=“msdos” LABEL_FATBOOT=“RJMISC” LABEL=“RJMISC” UUID=“5BB4-7C94” TYPE=“vfat” PARTLABEL=“RainMisc” PARTUUID=“e4e2f80d-f86a-4f46-abd9-37f71e642da4”
/dev/sda3: LABEL_FATBOOT=“RJRECOVE” LABEL=“RJRECOVE” UUID=“5BB5-08D3” TYPE=“vfat” PARTLABEL=“RainRecovery” PARTUUID=“cfb4742e-6d97-4c90-954e-043386ceb672”
lessons rainmisc
文件系统 ext4 vfat
分区大小 大约整个磁盘空间的90% 100MB
rainos(Linux)下的挂载目录 /opt/lessons 无所谓

Windows下的挂载盘符 Z: Y:
存放文件 SYSTEM.qcow2,data.disk等 pagefile.sys
终端的电源开机按钮按下后,主板上的EFI程序(可以理解为一种操作系统)会去解析lessons分区里的SYSTEM.qcow2,找出并执行里面的winload.efi。winload.efi会找出并执行SYSTEM.qcow2里的ntoskrnl.exe,由此操作系统由efi切换到windows。
30G的qcow2文件如何模拟成一个200G的磁盘,诸如如何定位并读取磁盘的0~512B这段数据?是通过vdisk.sys实现的。

qcow2文件又是lessons分区ext文件系统的分区里的一个文件,Windows系统要想知道SYSTEM.qcow2文件的在lessons分区里的起始地址,如何从ext分区里读写文件,就需要ext2fsd.sys。

ntoskrnl启动的早期阶段就加载了ext2fsd.sys,所以Windows能够理解ext文件系统,能够从lessons分区里找到并读写qcow2文件。
ntoskrnl启动的早期阶段就加载了vdisk.sys,所以Windows能够将SYSTEM.qcow2和data.disk当作真实磁盘一样使用。

1.2 Windows蓝屏dmp的通常流程和设置

A. 注册表中配置pagefile.sys文件的位置和大小,一般是C:\pagefile.sys,大小一般是自动
B. Windows启动的早期阶段会把存储栈做一个备份(如dump_iaStorAC.sys、dump_diskdump.sys、dump_dumpfve.sys等),使得即使是蓝屏时刻,即使原先的iaStorAC.sys都出了问题,Windows也有能力把内存数据写到磁盘的某段空间去。
C. 蓝屏时,执行crashdmp!CrashdmpInitDumpStack,改用这个备用的存储栈,把内存数据写到pagefile.sys文件里
D. 蓝屏后重启或关机再开机,若检测到pagefile.sys的前六个字母时PAGEDU,则把pagefile.sys数据复制到dmp文件里,进而形成dmp文件。

1.3 TCI蓝屏dmp的方案和缺陷

1.3.1 TCI原先的蓝屏dmp方案

A. 注册表中配置pagefile.sys文件的位置是Y:\pagefile.sys,大小是64MB。
B. 蓝屏dmp只能配置成minidump,而不是kerneldump
C. Z:\pagefile.sys虽然文件大小可以充分大,但不能用于蓝屏dmp的生成,只能用于日常运行的虚拟内存

1.3.2 缺陷

A. 因为rainmisc空间(Y盘)有限,Y:\pagefile.sys文件大小也有限,所以dmp文件大小只能是minidump
B. Z:\pagefile.sys虽然文件大小可以充分大,但不能用于蓝屏dmp的生成。能触发蓝屏,但是蓝屏dmp生成画面的进度在0%之后就结束了。

2 分析和解决思路

2.1 分析

已知TCI的Y盘(vfat文件系统分区)Z盘(ext文件系统分区)都是同一个存储设备上的两个不同分区,而Y:\pagefile有助于蓝屏dmp生成,因此我认为Z:\pagefile无助于蓝屏生成并不是因为存储栈不完备,而是因为它的文件系统,或者说ext文件系统驱动缺少相关功能。

2.2 思考定位方法

已知Z:\pagefile.sys无助于蓝屏生成是必现的。已知蓝屏dmp生成步骤分为蓝屏时数据写入pagefile和重启后pagefile数据导入dmp文件两个步骤。而且这两个步骤也是可以调试的。那么我们可以用普通虚机和TCI一起触发蓝屏,进行调试,查看TCI环境里哪个步骤哪个函数哪个ifelse分支跟普通虚机不同,进而挖出根因所在。

3 测试环境

​ 使用windows iso\cn_windows_10_business_editions_version_1909_updated_jan_2020_x64_dvd_b3e1f3a6.iso安装win10专业版,nt版本10.0.18362.592,crashdmp.sys版本10.0.18362.1。一个环境是TCI,pagefile仅仅设在Z盘(ext文件系统分区),一个环境是普通qemu虚机(用物理机或virtualbox虚机也行),pagefile仅仅设在C盘(ntfs文件系统分区)。
qemu虚机的命令行是:
qemu-system-x86_64 -enable-kvm -m 4G
-dev

  • 24
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值