使用钩子函数截取Windows应用程序口令
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用钩子函数截取Windows应用程序口令
摘要:
本文简单介绍如何采用Visual c++ 语言,利用钩子函数截取Windows应用程序或文件口令,并以此说明windows存在的安全隐患。
关键词:密码、钩子函数、DLL、后台进程
一、引言:
在计算机发展的今天,安全性是衡量信息系统的一个重要指标,也是信息系统中的一个重要课题。在我国指纹识别和条码识别尚不能普及的情况下,程序编制者为了维护系统的安全在程序中经常使用口令来验证使用者是否是合法用户,以此来决定他能否有权使用计算机中的数据资源。这种做法曾一度被视为最安全最简单最有效,于是用户也喜欢经常的变换口令,设置口令,在他们看来有了密码口令,就像有了保护神,一夫当关万夫莫开。于是系统中就出现了各种各样的口令,如文件口令(象Word 、Excel、Access、Zip 、Wps)、数据库访问口令、电子邮件账号口令、终端口令、以及个别应用程序的使用口令等等。一方面,这些口令给使用者记忆保存口令带来的很大的负担,另一方面一旦用户忘记了这些口令可能会给他们带来很大的麻烦。特别应当注意的是,如果有个别用心的人,在系统中安置一个类似于“黑客程序”(如Reveal)的小程序,就会轻而易举地取得用户口令,在这种情况下,用户口令丝毫不能保护他们的数据安全,本文就是结合上述问题谈谈Windows环境下一些口令设置程序设计的弊端。以此来提醒用户在使用口令的同时加强管理同样不可忽视。
二、设计思路
我们知道Windows应用程序经常使用口令对话框来输入密码,然后对输入的密码进行验证,一般的密码经常使用一些字符作为回显字符(如* % $ # @ ! ~ &^ ?),以此来表明使用者已经输入的字符数。这些对话框一般的都擦采用Windows中的ES_PASSWORD编辑框控件,一般程序编制者对编辑框的事件都不响应,采用Windows 默认的事件驱动。这样就造成了安全隐患,如果我们在程序中对当前系统的所有可见窗口进行遍历,如果发现控件的文本属性包含密码或口令,以及PASSWORD文本,就认为系统要求输入密码,不管是否是ES_PASSWORD风格,这样非ES_PASSWORD密码对话框,也可以进行截获,只要使用GetWindowsText(hWnd)就可轻而易举地取得用户输入的口令。我们知道每一个windows消息传递都经过钩子函数,通过钩子函数我们很容易拦截窗口的WM DESTROY消息,然后通过API 调用获得其密码。下面分几个方面,具体谈谈如何用钩子函数取得用户输入的口令。
(一)钩子函数
钩子函数是系统消息处理机制的一个入口点,通过它应用程序可以安装一个例程,来监视系统的消息传递路线,对某种特定的消息在传递到目标窗口之前进行响应。
(1)钩子函数的安装——SetWindowsHookEx
SetWindowsHookEx 函数用于安装一个应用程序定义的钩子例程到钩子链中,你可以安装一个钩子例程来监视系统中的某些事件,这些事件既可以与某一特定的线程有关,也可以与系统中的所有线程有关。
HHOOK SetWindowsHookEx(
int idHook, // 要安装的钩子类型
HOOKPROC lpfn, // 钩子例程的入口地址
HINSTANCE hMod, // 应用程序的事例句柄
DWORD dwThreadId // 安装钩子的线程标识
);
参数:
idHook
指定要安装的钩子类型,这个参数可以是下列值值描述
WH_CALLWNDPROC 安装一个钩子例程监视传递给目标窗口例程之前的消息。详细信息请参看CallWndProc 钩子例程.
WH_CALLWNDPROCRET 安装一个钩子例程监视已被目标窗口例程处理之的消息。详细信息请参看CallWndProcRet程.
WH_CBT 安装一个钩子例程接受与计算机训练有关的消息详细信息请参看CBTProc 钩子例程WH_DEBUG 安装一个钩子例程用于调试其他钩子例程详细信息请参看DebugProc 钩子例程WH_FOREGROUNDIDLE 安装一个钩子例程用于当应用程序前台线程空闲时被调用,这个钩子对于在系统空闲时运行一些低优先权的任务特别有用。详细信息请参看ForegroundIdleProc 钩子例程
WH_GETMESSAGE 安装一个钩子例程用于监视加入到消息队列中的消息。详细信息请参看GetMsgProc 钩子例程
WH_JOURNALPLAYBACK 安装一个钩子例程用于投递先前被WH_JOURNALRECORD 钩子记录的消息,详细信息请参看JournalPlaybackProc 钩子例程
WH_JOURNALRECORD 安装一个钩子例程用于记录投递系统消息队列的输入消息,这个钩子对于记录宏特别有用,详细信息请参看JournalRecordProc钩子例程
WH_KEYBOARD 安装一个钩子例程用于监视键盘击打消息,详细信息请参看KeyboardProc钩子例程
WH_KEYBOARD_LL Windows NT: 安装一个钩子例程用于监视低级别的键盘输入事件,详细信息请参看LowLevelKeyboardProc钩子例程
WH_MOUSE 安装一个钩子例程用于监视鼠标消息,详细信息请参看MouseProc 钩子例程
WH_MOUSE_LL Windows NT: 安装一个钩子例程用于监视低级别的鼠标输入事件,详细信息请参看LowLevelMouseProc 钩子例程
WH_MSGFILTER 安装一个钩子例程用于监视由对话框消息框菜单或者滚动条输入事件产生的消息,详细信息请参看MessageProc 钩子例程
WH_SHELL 安装一个钩子例程用于接受对外壳应用程序有用的通知消息,详细信息请参看ShellProc 钩子例程
WH_SYSMSGFILTER 安装一个钩子例程用于监视由对话框消息框菜单或者滚动条输入事件产生的消息,这个钩子将监视系统同中所有的应用程序中的所有消息详细信息请参看SysMsgProc 钩子例程