最近公司布置了一个任务根据某个进程的消息做一些处理 我的思路是:
1.开辟远程线程把DLL注入到目标进程
2.在注入的DLL中开辟针对目标进程的消息钩子 现在DLL已经注入,可怎么才能让钩子知截获目标进程的消息,而不是全局的
我把 SetWindowsHookEx的最后一个参数设为NULL也不管用,SetWindowsHookEx的最后一个参数好像也不能设置为进程ID吧
哪位大侠提供点方法
1.开辟远程线程把DLL注入到目标进程
2.在注入的DLL中开辟针对目标进程的消息钩子 现在DLL已经注入,可怎么才能让钩子知截获目标进程的消息,而不是全局的
我把 SetWindowsHookEx的最后一个参数设为NULL也不管用,SetWindowsHookEx的最后一个参数好像也不能设置为进程ID吧
哪位大侠提供点方法
{
HANDLE hThreadSnap = INVALID_HANDLE_VALUE;
THREADENTRY32 te32;
DWORD dwThreadID = 0;
hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if (hThreadSnap == INVALID_HANDLE_VALUE)
{
return 0;
} te32.dwSize = sizeof(THREADENTRY32);
if (!Thread32First(hThreadSnap, &te32))
{
CloseHandle(hThreadSnap);
} do
{
if (te32.th32OwnerProcessID == dwOwnerPID)
{
//返回找到的第一个线程, 不知道这个线程是否一定是主线程(WinMain所在线程)
dwThreadID = te32.th32ThreadID;
break;
}
}
while (Thread32Next(hThreadSnap, &te32)); CloseHandle(hThreadSnap);
return(dwThreadID);
} DWORD dwThreadId = GetMainThreadID(GetCurrentProcessId());
if (dwThreadId > 0)
{
SetWindowsHookEx(WH_KEYBOARD, HookProc, hDLL, dwThreadId);
}
dll已经注入到目标进程了,也就是对自己的进程安装hookHHOOK SetWindowsHookEx(
int idHook, // hook type
HOOKPROC lpfn, // hook procedure
HINSTANCE hMod, // 设为NULL
DWORD dwThreadId // 通过GetCurrentThreadId(VOID)函数获得
);法2.
让dll hook的同时注入远程进程
HHOOK SetWindowsHookEx(
int idHook, // hook type
HOOKPROC lpfn, // hook procedure
HINSTANCE hMod, // GetModuleHandle("dll名字")函数获得
DWORD dwThreadId // 可以通过 FindWindow()得到目标窗体句柄,然后GetWindowThreadProcessId()得到这个进程主线程ID
);
你可以用 NULL 作为最后的参数,在 DLL 初始化的时候用 GetModuleHandle 检查是否是你需要入侵的进程,当然其他的进程函数或模块函数也可以