[2020]CPU仿真日志: 由_security_cookie发现的bug huoji CPU仿真,_security_cookie 2020-12-18 2357 次浏览 4 次点赞 在首次执行程序的时候 如果程序是GS选项启动的 会有如下函数 ![_security_cookie](https://key08.com/usr/uploads/2020/12/2950922110.png) 函数作用初始化_security_cookie 值得一提的是我在X64DBG的时候发现cmp rax, rbx也就是 if( _security_cookie == 0x2B992DDFA232i64) 这一段是不相等的 这个_security_cookie生成规则如下: ```cpp 获得 system time 与 GetCurrentProcessId() 异或 与 GetCurrentThreadId() 异或 与 GetTickCount() 异或 与 QueryPerformanceCounter()异或 ``` 这是伏笔 导致接下来的一系列CPU仿真问题 点击 阅读全文 继续查看 最开始 我的CPU仿真代码crash了 查看调用链: ![](https://key08.com/usr/uploads/2020/12/2217475292.png) ```cpp GetSystemTimeAsFileTime GetSystemTimeAsFileTime GetCurrentThreadId GetCurrentProcessId GetCurrentProcessId QueryPerformanceCounter RtlQueryPerformanceCounter _initterm_e _set_app_type _set_fmode GetLastError FlsGetValue RtlNtStatusToDosError RtlRestoreLastWin32Error RtlSetLastWin32Error RtlRestoreLastWin32Error RtlSetLastWin32Error __p__commode _crt_atexit GetLastError FlsGetValue RtlNtStatusToDosError RtlRestoreLastWin32Error RtlSetLastWin32Error RtlRestoreLastWin32Error RtlSetLastWin32Error RtlEnterCriticalSection ``` _crt_atexit: ![](https://key08.com/usr/uploads/2020/12/302497925.png) GetLastError、FlsGetValue: ![](https://key08.com/usr/uploads/2020/12/493918364.png) 最终发现出问题在这: ![](https://key08.com/usr/uploads/2020/12/3182082169.png) 实际上在x64dbg里面 if ( v5 != v6 ) 根本不会成立 再往后看 崩溃点是因为_acrt_atexit_table里面的某一个指针是null _acrt_atexit_table是onexit表 这个表里面还存放了security_cookie信息 而我们的不相等的cookie导致了要往这个NULL表写信息造成空指针错误 而_acrt_atexit_table实际上是放在我们的stack上的 可以看到每次读的地址都是stack地址 stack对应heap,我们的heap没有分配好 heap size太小了 ![](https://key08.com/usr/uploads/2020/12/1265640269.png) 解决: ![](https://key08.com/usr/uploads/2020/12/1496936467.png) 本文由 huoji 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。 点赞 4
还不快抢沙发