吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7349|回复: 9
收起左侧

[漏洞分析] Windows 2K/XP/2K3/Vista Win32k.sys!ImeCanDestroyDefIMEforChild内核拒绝服务漏洞

[复制链接]
MJ0011 发表于 2010-4-22 16:20
Windows 2000/XP/2003/Vista Win32k.sys!ImeCanDestroyDefIMEforChild内核拒绝服务漏洞

影响范围:Windows 2000/XP/2003/Vista 全补丁

在Win32k!NtUserDestroyWindow->xxxDestroyWindow时,试图为子窗口销毁IME窗口时,会调用ImeCanDestroyDefIMEforChild这个函数,这个函数会在一个while循环中取得窗口的父窗口,试图确定窗口的子窗口和当前销毁的窗口是否是属于同一个线程的,大概代码如下:
if (pwndDestroy->spwndParent == NULL)

return FALSE ; 

pwnd = pwndDestroy;

     while (pwnd != NULL && pwnd != GetDesktopWindow(pwnd)) {
         if (IsChildSameThread(pwnd->spwndParent, pwndDestroy))
             return FALSE;
         pwnd = pwnd->spwndParent;
}

明显看到这个循环是有问题的,IsChildSameThread中不会做任何检查就直接使用第一个窗口对象参数,如果第一个窗口的父窗口不为空,且和要销毁的窗口父窗口不是一个窗口,且要销毁的窗口的父窗口的任何一个父窗口为空,就会因为访问0地址而崩溃

在Windows 7中(我看的7100版的WIN32K.SYS),修复了这个问题,代码修改成了:


pwnd = pwndDestroy->spwndParent; 


     while (pwnd != NULL && pwnd != GetDesktopWindow(pwnd)) {
         if (IsChildSameThread(pwnd, pwndDestroy))
             return FALSE;
         pwnd = pwnd->spwndParent;
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2010-4-22 16:30
这题目好长啊,这里沙发我抢了...
antiol 发表于 2010-4-22 16:32
五爷 发表于 2010-4-22 16:32
蚊香 发表于 2010-4-22 16:36
又挖洞了...
xxhaishixx 发表于 2011-4-30 19:35
学习了~这个太长了~深度挖掘
ccaa1123 发表于 2011-8-11 13:06
没有的玩了
头像被屏蔽
vk929495v 发表于 2014-7-22 12:16
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽
苏烟式 发表于 2014-7-22 21:25
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-19 09:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表