[原]简易Windows密码查看器
[标题]:简易Windows密码查看器[时间]:2009-10-09
[摘要]:通过全局钩子获取当前鼠标处的窗口控件句柄,然后直接调用GetWindowText()获取密码文本。
[关键字]:密码、查看、星号、全局钩子、Hook、WM_COPYDATA、DLL、XP样式
[环境]:Visual Studio 2008、Visual C++ 6.0
[作者]:天堂露珠 (wintys@gmail.com) http://www.blogjava.net/wintys
[正文]:
此密码查看器原理:通过全局钩子获取当前鼠标处的窗口控件句柄,然后直接调用GetWindowText()获取密码文本。工程在VC++6.0和VS2008中编译通过。
1、查看密码的DLL工程
因为查看密码功能要用到全局鼠标Hook,所以要把功能放到一个DLL中。
PasswordViewerMouseHookDLL.h:
<div class="mycode">#pragma once
#ifdef PSWMOUSEHOOKDLL_API_EXPORTS
#define PSWMOUSEHOOKDLL_API __declspec(dllexport)
#else
#define PSWMOUSEHOOKDLL_API __declspec(dllimport)
#endif
/*
Winty:2009-09-29
调用SetHook()设置Hook,但无需卸载Hook,DLLMain中有清理。
*/
//My Declaration================================
#define MAXCOUNT 200 //密码最大长度
#define DWDATA_PSW_NOTIFY 1 //COPYDATASTRUCT的dwData自定义值
//密码信息结构体,用于发送
typedef struct tagPswNotify
{
char psw;//password/text
POINT pt;//鼠标位置
HWND hWnd;//控件句柄
} PSWNOTIFY , *PPSWNOTIFY;
/*extern表示这里只是变量声明,变量定义在cpp文件中*/
extern PSWMOUSEHOOKDLL_API BOOL g_bReadySend;//WM_COPYDATA互斥的标志,因为WM_COPYDATA不能重叠
extern PSWMOUSEHOOKDLL_API HWND g_hWnd; //接收消息的窗体句柄
extern PSWMOUSEHOOKDLL_API HHOOK g_hhk; //钩子句柄
extern PSWMOUSEHOOKDLL_API BOOL g_bView;//是否需要查看密码
//鼠标钩子过程
PSWMOUSEHOOKDLL_API LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam );
//设置钩子(可在窗口的OnInitDialog()中调用)
PSWMOUSEHOOKDLL_API void SetHook(HWND hWnd);
页:
[1]