Windows驱动
+ -

Win10和Win7驱动_security_init_cookie蓝屏兼容问题

2021-07-01 1593 1

今天使用VS2019+WDK10写了一个简单的64驱动,在Win7系统下安装时出现了蓝屏问题。
使用windbg进行栈回溯,发现出现蓝屏的方法是发生在调用驱动入口函数DriverEntry之前。

RetAddr           : Call Site
fffff880`030ba015 : bytekitsdrv!__security_init_cookie+0x2d
fffff800`042ae467 : bytekitsdrv!GsDriverEntry+0x15 [minkernel\tools\gs_support\kmodefastfail\gs_driverentry.c @ 46]
fffff800`042ae865 : nt!EtwWriteStartScenario+0x2267
fffff800`03ed3a21 : nt!EtwWriteStartScenario+0x2665
fffff800`04166cce : nt!KeAcquireInStackQueuedSpinLockAtDpcLevel+0x2f1
fffff800`03ebafe6 : nt!PsCreateSystemThread+0x1da
00000000`00000000 : nt!KeInitializeSemaphore+0x24a

可以看到,出现蓝屏的方法是GsDriverEntry函数内部调用security_init_cookie时,即初始化cookie时。
使用windbg对security_init_cookie函数进行反汇编。

kd> u  bytekitsdrv!__security_init_cookie l15
bytekitsdrv!__security_init_cookie [minkernel\tools\gs_support\kmodefastfail\gs_support.c @ 37]:
fffff880`030ba02c 488b05cddfffff  mov     rax,qword ptr [bytekitsdrv!__security_cookie (fffff880`030b8000)]
fffff880`030ba033 4885c0          test    rax,rax
fffff880`030ba036 741a            je      bytekitsdrv!__security_init_cookie+0x26 (fffff880`030ba052)
fffff880`030ba038 48b932a2df2d992b0000 mov rcx,2B992DDFA232h
fffff880`030ba042 483bc1          cmp     rax,rcx
fffff880`030ba045 740b            je      bytekitsdrv!__security_init_cookie+0x26 (fffff880`030ba052)
fffff880`030ba047 48f7d0          not     rax
fffff880`030ba04a 488905b7dfffff  mov     qword ptr [bytekitsdrv!__security_cookie_complement (fffff880`030b8008)],rax
fffff880`030ba051 c3              ret
fffff880`030ba052 b906000000      mov     ecx,6
fffff880`030ba057 cd29            int     29h
fffff880`030ba059 cc              int     3
fffff880`030ba05a cc              int     3
fffff880`030ba05b cc              int     3

查看蓝屏的地址:

kd> u bytekitsdrv!__security_init_cookie+0x2d l1
bytekitsdrv!__security_init_cookie+0x2d:
fffff880`030ba059 cc              int     3
kd> u bytekitsdrv!__security_init_cookie+0x26 l1
bytekitsdrv!__security_init_cookie+0x26 [minkernel\tools\gs_support\kmodefastfail\gs_support.c @ 46]:
fffff880`030ba052 b906000000      mov     ecx,6

对照 bytekitsdrv!_security_init_cookie函数,发现程序执行了

fffff880`030ba052 b906000000      mov     ecx,6
fffff880`030ba057 cd29            int     29h
fffff880`030ba059 cc              int     3
fffff880`030ba05a cc              int     3
fffff880`030ba05b cc              int     3

蓝屏,而引起这段代码的运行是因为

fffff880`030ba02c 488b05cddfffff  mov     rax,qword ptr [bytekitsdrv!__security_cookie (fffff880`030b8000)]
fffff880`030ba033 4885c0          test    rax,rax
fffff880`030ba036 741a            je      bytekitsdrv!__security_init_cookie+0x26 (fffff880`030ba052)
fffff880`030ba038 48b932a2df2d992b0000 mov rcx,2B992DDFA232h
fffff880`030ba042 483bc1          cmp     rax,rcx
fffff880`030ba045 740b            je      bytekitsdrv!__security_init_cookie+0x26

引起,这段代码发现是进行了2个值的判断,如果有任意一个判断成功,均跳到 bytekitsdrv!_security_init_cookie+0x26处进行蓝屏。

这里的代码判断的是qword ptr [bytekitsdrv!_security_cookie (fffff880 030b8000)]处的值是否为0,或者为2B992DDFA232h,通过windbg发现满足值等于2B992DDFA232h,所以产生蓝屏。

kd> dq fffff880`030b8000
fffff880`030b8000  00002b99`2ddfa232 ffffd466`d2205dcd

原因分析

通过函数名称可以知道,这个蓝屏的原因是cookie判断引起的,所以基本上确定是由于平台兼容性引起的,即使用wdk10编译出的驱动在win7平台下是存在兼容问题的。

解决方法

微软这里给出了解决方案:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/develop/building-drivers-for-different-versions-of-windows

使用 Visual Studio:
使用记事本或其他文本编辑器打开驱动程序项目文件 (*.vcxproj)。 在项目文件中,找到驱动程序支持的配置的 ,并添加以下行来重写默认的链接器选项:

<KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib>

如我们这里对x64和debug和release进行配置

 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
    <TargetVersion>Windows10</TargetVersion>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
    <ConfigurationType>Driver</ConfigurationType>
    <DriverType>WDM</DriverType>
    <SpectreMitigation>false</SpectreMitigation>
    <KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
    <TargetVersion>Windows10</TargetVersion>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
    <ConfigurationType>Driver</ConfigurationType>
    <DriverType>WDM</DriverType>
    <SpectreMitigation>false</SpectreMitigation>
    <KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib>
  </PropertyGroup>

0 篇笔记 写笔记

Window蓝屏停止码大全
详情:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/bug-check-code-reference2代码Code名称Name0x00000001APC_INDEX_MISMATCHAPC_......
Window蓝屏及信息结构
Windows蓝屏,又叫蓝屏死机(Blue Screen of Death,简称BSOD),是微软的 Windows 系列操作系统在无法从一个系统错误中恢复过来时,为保护电脑数据文件不被破坏而强制显示的屏幕图像。X86 处理器将代码的运行分为4个级别,分别为R0,R1,R2,R3,Windows操......
Win10和Win7驱动_security_init_cookie蓝屏兼容问题
今天使用VS2019+WDK10写了一个简单的64驱动,在Win7系统下安装时出现了蓝屏问题。使用windbg进行栈回溯,发现出现蓝屏的方法是发生在调用驱动入口函数DriverEntry之前。RetAddr : Call Sitefffff880`030ba015 : byt......
Windows蓝屏分析-DRIVER_POWER_STATE_FAILURE键盘电源切换引起的蓝屏
昨天在回家的路上,老大说你处理一个手中的BUG。我回复说明天处理,今天来到公司一看,果然有一个,是蓝屏的问题。然后去测试那里看限象,测试组的同学说的是一顿猛操作摄像头和麦克风,然后按住电源关机后出现黑屏,然后蓝屏。心想坏了,不会是摄像头或麦克风驱动引起的蓝屏吧。不过幸好的是,当时机子开了dump。......
windows蓝屏分析BSOD-ExpScanGeneralLookasideList引用ffffffffffffffd8地址IRQL_NOT_LESS_OR_EQUAL
本文的完成得到了QQ windows驱动开发交流群(938840300)群主的帮助,感谢他的原始分析。这里本人基于它的原始分析在第二次蓝屏DMP上按照它的思路完成该文。同事说最近出一个蓝屏,让分析一下。使用Windbg加载信息如下:IRQL_NOT_LESS_OR_EQUAL (a)An ......
USBXHCI 引起的DRIVER_IRQL_NOT_LESS_OR_EQUAL蓝屏分析
错误内存为0000000000000024,可以看到是一个NULL地址。DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1)An attempt was made to access a pageable (or completely invalid) address at an......
手动进行系统蓝屏KeBugCheckEx
这里可以使用KeBugCheck,参数BugCheckCode是停止吧VOID KeBugCheck( IN ULONG BugCheckCode );另外一个函数是KeBugCheckExVOID KeBugCheckEx( IN ULONG BugC......
Windbg和IDA配合解决已卸载的驱动DPC定时器引起的蓝屏DRIVER_IRQL_NOT_LESS_OR_EQUAL
最近搞了一个虚拟的设备驱动,自己测试都没有问题,不过拿给同事正式用的时候,会出现蓝屏问题。按他来说,好像成了必现问题。今天一大早,斜风细雨,天气凉爽,正是揪出这个BUG的好时机,说干就干。自己先是在调试机中模拟同事的试验方法,可惜的是,试了多次均没有复现。还真是奇怪了,没办法,自己只能不起寻常路了。......
串口过滤驱动调试过程蓝屏NO_MORE_IRP_STACK_LOCATIONS(35)问题分析
最近在搞一个串口的过滤驱动程序,在调度过程中报了一个蓝屏问题。NO_MORE_IRP_STACK_LOCATIONS (35)A higher level driver has attempted to call a lower level driver throughthe IoCallDr......
Windows系统蓝屏产生的DMP文件在那个目录
当电脑出现蓝屏时,Windows系统会自动生成一个蓝屏错误DMP文件,这个文件一般保存在C盘的一个目录中。一般根据系统设置的不同,会有2个目录,具体是那一个,根据系统设置而确定。第一个是:C:Windowsmemory.dmp第二个是:C:WindowsMinidumpDMP蓝屏的......
蓝屏IRQL_NOT_LESS_OR_EQUAL与nt!ExpScanGeneralLookasideList
自动分析如下:6: kd> !analyze -v******************************************************************************** ......
DMP蓝屏DRIVER_VERIFIER_DMA_VIOLATION
同事给了一个DMP文件,说是在DELL笔记本中插入了一个HDMI线之后,再拔掉就BSOD了。使用WINDBG自动分析提示是DMA问题:DRIVER_VERIFIER_DMA_VIOLATION (e6)An illegal DMA operation was attempted by a dri......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!