Win32 API功能封装
+ -

Win64应用COOKIE的生成

2024-09-11 2 0

Win64 UI应用程序的函数调用流程如下:

  • wWinMainCRTStartup()
    • _security_init_cookie();
    • _wmainCRTStartup();
      • wWinMain

程序由mainCRTStartup开始执行。这里的启动函数wmainCRTStartup可能为下述四种之一。

#pragma comment( linker, "/subsystem:windows /entry:WinMainCRTStartup" )
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )
#pragma comment( linker, "/subsystem:console /entry:mainCRTStartup" )
#pragma comment( linker, "/subsystem:console /entry:WinMainCRTStartup" )

在以上的调用流程中,可以看到会有一个初始化cookie的函数。

cookie是用于栈内存越界检查的。

初始化cookie的函数大致如下:

void __cdecl _security_init_cookie()
{
  unsigned __int64 cookievalue; // rax
  unsigned __int64 tim; // [rsp+30h] [rbp+10h] BYREF
  struct _FILETIME SystemTimeAsFileTime; // [rsp+38h] [rbp+18h] BYREF
  LARGE_INTEGER PerformanceCount; // [rsp+40h] [rbp+20h] BYREF

  SystemTimeAsFileTime = 0i64;
  cookievalue = _security_cookie;
  if ( _security_cookie == 0x2B992DDFA232i64 )
  {
    GetSystemTimeAsFileTime(&SystemTimeAsFileTime);
    tim  = SystemTimeAsFileTime;
    tim ^= GetCurrentProcessId();
    tim ^= GetCurrentThreadId();
    tim ^= GetTickCount() << 24;
    tim ^= &tim ^ GetTickCount();
    QueryPerformanceCounter(&PerformanceCount);
    cookievalue = (tim ^ PerformanceCount.QuadPart ^ (PerformanceCount.LowPart << 32));
    if ( cookievalue == 0x2B992DDFA232)
    {
      cookievalue = 0x2B992DDFA233;
    }
    _security_cookie = cookievalue;
  }
  _security_cookie_complement = ~v
}

补充资料:https://www.cnblogs.com/hed10ne/p/17527277.html

0 篇笔记 写笔记

Win10和Win7驱动_security_init_cookie蓝屏兼容问题
今天使用VS2019+WDK10写了一个简单的64驱动,在Win7系统下安装时出现了蓝屏问题。使用windbg进行栈回溯,发现出现蓝屏的方法是发生在调用驱动入口函数DriverEntry之前。RetAddr : Call Sitefffff880`030ba015 : byt......
Win64应用COOKIE的生成
Win64 UI应用程序的函数调用流程如下:wWinMainCRTStartup()_security_init_cookie();_wmainCRTStartup();wWinMain程序由mainCRTStartup开始执行。这里的启动函数wmainCRTStartup可能为下述四......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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