Windows驱动程序中的__security_init_cookie导致错误检查KERNEL_
当我编译驱动程序时,当我以
Windows 8.1为目标时,会发生一些非常奇怪的事情.
一旦加载,它就会与错误检查KERNEL_SECURITY_CHECK_FAILURE,第一个参数6崩溃,这意味着“堆栈cookie安全cookie没有被加载器正确初始化”. 这可能是由于构建驱动程序仅在Windows 8上运行并尝试在早期版本的Windows上加载驱动程序映像引起的.要避免此问题,您必须构建驱动程序以在早期版本的Windows上运行“.当我以Windows 7为目标时,不会发生此错误. 我能够找到这个错误发生的确切位置.它发生在由GsDriverEntry调用的__security_init_cookie函数中. INIT:000000014000C1B4 __security_init_cookie proc near ; CODE XREF: GsDriverEntry+10p INIT:000000014000C1B4 mov rax,cs:__security_cookie INIT:000000014000C1BB test rax,rax INIT:000000014000C1BE jz short loc_14000C1DA INIT:000000014000C1C0 mov rcx,2B992DDFA232h INIT:000000014000C1CA cmp rax,rcx INIT:000000014000C1CD jz short loc_14000C1DA INIT:000000014000C1CF not rax INIT:000000014000C1D2 mov cs:__security_cookie_complement,rax INIT:000000014000C1D9 retn INIT:000000014000C1DA ; --------------------------------------------------------------------------- INIT:000000014000C1DA INIT:000000014000C1DA loc_14000C1DA: ; CODE XREF: __security_init_cookie+Aj INIT:000000014000C1DA ; __security_init_cookie+19j INIT:000000014000C1DA mov ecx,6 INIT:000000014000C1DF int 29h ; Win8: RtlFailFast(ecx) 从这个反汇编中我们可以看到它执行了2次检查. The first check checks if rax (__security_cookie) is zero and the second check compares it to 2B992DDFA232h. 但是,__ security_cookie在我的二进制文件中声明为2B992DDFA232h,因此永远不应该调用中断,但不知怎的.
Windows 8能够为加载的可执行映像生成安全cookie.安全cookie的位置存储在PE头中的LoadConfig数据目录中,以便Windows加载器可以轻松替换它.
原因是操作系统应该能够以安全的方式生成cookie(例如,如果可用则使用RDRAND指令和/或其他随机熵源).此外,无需将cookie初始化代码复制到每个驱动程序. 如果您的驱动程序针对Windows 8(及更新版本),则预计操作系统将初始化cookie.因此,如果cookie没有改变,它会提高BSOD. 我没有找到任何关于此Windows 8功能的官方说明,但这里有描述它的文章:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- .net – DLL被标记为DELETEPENDING
- winapi – 使用版本信息编译DLL
- .net – 现在没有Windows应用程序的范围吗?
- windows – 为什么许多管理员使用“关闭自动根证书更新”政
- rust – 更新注册表`https:// example.com /`
- windows – 使用Topshelf安装后无法在服务下看到我的服务
- windows-7 – 如何隔离msysgit附带的msys实现中提供的ssh-a
- 有没有办法在Windows资源管理器中使用ClearCase显示图标来表
- windows10安装scala出现报错"不应有 \scala\bi
- windows-installer – MSI – 卸载提供“Unidentified Publ