首页
社区
课程
招聘
[旧帖] [求助]请问MessageBox的内部实现 0.00雪花
发表于: 2011-2-28 22:29 1635

[旧帖] [求助]请问MessageBox的内部实现 0.00雪花

2011-2-28 22:29
1635
MessageBox的显示,内部实现是不是有操作过注册表呢?

最近在写Hook SSDT注册表相关函数的代码,测试中驱动程序先获取g_listMutex互斥体,然后应用程序MessageBox,用户“确定”后,驱动程序释放g_listMutex互斥体。与此同时Hook的ZwSetValueKey中也在等待g_listMutex互斥体的释放。

结果是,驱动程序先获取g_listMutex互斥体,然后应用程序MessageBox,只有声音,没有界面。用户没法“确定”,驱动程序不释放g_listMutex互斥体,ZwSetValueKey也就无法执行。

因此,想请问MessageBox的内部实现中是不是有ZwSetValueKey的操作,导致了死锁?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
好像是这么回事
你用windbg 调试一下 附件的程序
bp MessageboxA
bp ZwSetValueKey
bp ExitProcess

发现 调用MessageboxA 后 确实是调用了 ZwSetValueKey 然后才到 ExitProcess的

不太清楚 MessageboxA具体怎么实现的  但是确实是你说的这么回事

ps 1 pe。exe的代码超级简单 就是 Messagebox 然后ExitProcess
     2 最好在一台没有杀软的干净的机器上调试
上传的附件:
2011-2-28 23:19
0
雪    币: 343
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
感谢blueapplez的帮助,我也去调试下。
2011-3-1 00:12
0
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
用个内核调试器 我跟到win32k.sys里
2011-3-1 09:00
0
雪    币: 343
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
刚刚一直在用windbg调试MessageBoxW和MessageBoxA
bp main
g
bp MessageBoxW或MessageBoxA
bp ntdll!ZwSetValueKey
在XP SP2和Win7下都是弹出MessageBox然后执行完了,没发现在ZwSetValueKey处有停及调用堆栈中也没发现。

你是怎么调出来的呢?
2011-3-1 21:27
0
游客
登录 | 注册 方可回帖
返回
//