- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
_基于HOOK和MMF的Windows密码渗透技术.doc
基于HOOK和MMF的Windows密码渗透技术
育龙网?WWW.CHINA-B.C0M?? 2009年05月25日??来源:互联网
育龙网核心提示: 摘 要 随着计算机与网络的普及,安全越来越成为人们所普遍关心的大事。密码的渗透与反渗透在此领域表现的愈演愈烈。本文深入分析了
摘 要 随着计算机与网络的普及,安全越来越成为人们所普遍关心的大事。密码的渗透与反渗透在此领域表现的愈演愈烈。本文深入分析了各个版本windows密码的特点,尤其是针对windws2K/XP安全性提高的情况下,提出了获取windows密码的关键技术及方法。并进一步分析了windows钩子和内存映像文件的技术细节。在基于MMF的核心类CIPC中为钩子句柄在内存中的共享提供了方法,并且解决了线程间的同步问题。然后深入讨论了WM_COPYDATA消息的特点。接着分析了实例程序重要代码及注解并演示了结果。最终给出一些反密码渗透的应对策略。
关键词 内存映像文件;windows钩子;进程间通信;多线程
1、引言
上世纪90年纪使用过windows3.x的人可能很少有人了解这类操作系统中存在着密码保护的漏洞,假如选择密码控件中的“”文本然后复制到剪贴板上,那么看到的将不是“”而是密码的原始文本。微软发现了windows3.x这个问题并在新的版本window95中修改了这个漏洞。但是windows95存在着新的安全漏洞,可以设计出间谍程序从当前运行的程序中得到密码控件中的密码,这些间谍程序并非是如同softice一样的破解程序。然而,微软在window2000中又修补了这个问题,如何通过MMF与HOOK技术获取任何版本windows 密码控件的内容,这正是本文讨论的重点问题。
图1 Windows 2K/XP密码校验
获取Windows密码技术主要是利用了windows的安全漏洞。在windows NT/95/98/ME等操作系统下,假如在间谍程序中发送WM_GETTEXT消息到密码控件,返回的文本将不再是“”而是实际的文本内容,而在windows2K/XP系统中微软加了安全控制,假如发送WM_GETTEXT到密码控件,系统将校验请求的进程判定该进程是否有许可权,如图1所示:假如请求进程与密码控件所在进程是同一进程,那么WM_GETTEXT消息将仍然返回密码的真实文本。假如两个进程不一样,就返回一个ERROR_ACCESS_DENIED的错误。所以获取windows2K/XP密码的关键技术在于:从密码控件所在的进程中获取WM_GETTEXT消息,而不是在渗透进程中得到。而这种在其它进程中运行用户代码的技术完全可以利用windows 钩子技术来实现。首先我们需要了解一下什么是钩子。
2、Windows钩子
Windows系统是建立在事件驱动的机制上的,即整个系统都是通过消息的传递来实现的。钩子是一种非凡的消息处理机制,钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,屏幕取词,日志监视等等。钩子的种类很多,每种钩子可以截获并处理相应的消息,如键盘钩子可以截获键盘消息,外壳钩子可以截取、启动和关闭应用程序的消息等。如图2是一全局钩子示意图。
在实例程序中运用WH_GETMESSAGE钩子,这个钩子监视投递到消息队列中的Windows消息。
图2 全局钩子的原理图
3、Windows钩子在此处的应用
安装钩子的函数为SetWindowsHookEx,利用这个函数可以为整个系统或为某一特定进程安装钩子,不同的钩子监视特定钩子事件的发生,当某一事件触发后,与之对应的代码就会被系统调用。
运用windows钩子的一个难点是如何妥善保存钩子的句柄。在设置钩子前需要解决两件事:
1) 一个包括了钩子函数的动态链接库;
2) 要注入钩子的进程ID。
现在假设进程A为进程B注入了一个钩子。钩子注入后,钩子的句柄返回给了进程A并且动态链接库映射到了进程B的地址空间。当进程B中触发了一个钩子事件,钩子代码被进程B调用。在钩子代码中通过发消息获取密码真实文本,在钩子代码结束前需调用CallNextHookEx函数,假如这个函数调用失败,安装的其它钩子将得不到消息。现在出现的问题是CallNextHookEx需要一个钩子的句柄,但那个所需的句柄已返回给了进程A而钩子程序目前运行在进程B的代码段内。这样就需要用到进程间通信IPC来传递钩子句柄。
4、进程间通信的一般方法
解决以上问题的一般方法是在动态链接库中创建一个“共享”部分,写入如下代码:
#pragma data_seg
HHOOK g_hHook = NULL;
#pragma data_seg
#prag
文档评论(0)