如何在其他进程中安装Hook钩子的问题(已经将dll注入其他进程) 问题讲解:【如何在一个远程进程的安装局部钩子】1.A进程注入DLL到进程B中2.然后在DLL中安置钩子3。通过钩子截获发往B中的线程自认为问题出在DLLMain() 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 WH_GETMESSAGE钩子,现在是安装钩子不起作用。BOOL APIENTRY DllMain(HINSTANCE hModule, DWORD reason, LPVOID lpReserved){ char * szProcessId = (char *)malloc(10*sizeof(char)); char *szThreadId=(char *)malloc(10*sizeof(char)); DWORD ProcessId=GetCurrentProcessId(); DWORD ThreadId=-1; THREADENTRY32 pe32; pe32.dwSize=sizeof(pe32); HANDLE hsnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); if(hsnapshot==NULL) { MessageBox(NULL,"WWW0",NULL,0); } BOOL isThread =Thread32First(hsnapshot,&pe32); if(isThread==FALSE) { MessageBox(NULL,"WWW1",NULL,0); return 0; } do { if(ProcessId==pe32.th32OwnerProcessID) { ThreadId=pe32.th32ThreadID; break; } } while(Thread32Next(hsnapshot,&pe32)); switch (reason){ case DLL_PROCESS_ATTACH:{ //获取并显示当前进程ID _itoa(GetCurrentProcessId(), szProcessId, 16); _itoa(ThreadId,szThreadId,16); m_GetM=SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,hModule,ThreadId);//GetModuleHandle(NULL),ThreadId); if(m_GetM==NULL) { MessageBox(NULL,"ADF","DLL OR DLL",MB_OK); return 0; } MessageBox(NULL,szProcessId,"RemoteDLL",MB_OK); MessageBox(NULL,szThreadId,"dlltread",MB_OK); Sleep(10000); } default: return TRUE; } return TRUE;}LRESULT CALLBACK GetMsgProc( int code, // hook code WPARAM wParam, // removal flag LPARAM lParam // address of structure with message){if(code<0)return CallNextHookEx(m_GetM,code,wParam,lParam);if(code!=HC_ACTION) return CallNextHookEx(m_GetM,code,wParam,lParam);MSG *Pmsg=(MSG *)lParam;switch(Pmsg->message){case WM_LBUTTONDOWN: Pmsg->message=WM_RBUTTONDOWN; MessageBox(Pmsg->hwnd,"WM_LBUTTON","WM_RBUTTON",0);break;default : return 0;}return 0;} 整体思路:远程注入DLL (CreateRemoteThread())到其他进程 我要的是如何在DLL MAIN()所在线程中设置HOOK 截获消息 我就是想:用钩子截获其他特定进程窗口的消息远程注入DLL已成功想在DLL中设置钩子,实现截获 SetWindowsHookEx本身就有注入dll的功能 c++可以实现这样的功能吗? 一个关于线程传递结构体参数的问题 关于CreateFile函数的用法 两个exe程序之间怎样通信(传递数据)? 寻求 MsAgent帮助 新手请教:知道了消息的数值,怎么知道是什么消息? MDI中,怎样捕获某一视图的状态变为active或deactive?急请高手指点! 如何动态初始化对话框中的内容? VISUAL C++6.0编程百例一问 汉诺塔动画 之前搞的一套脚本GScript,现在开源发布了 双串口通信
BOOL APIENTRY DllMain(HINSTANCE hModule, DWORD reason, LPVOID lpReserved)
{ char * szProcessId = (char *)malloc(10*sizeof(char));
char *szThreadId=(char *)malloc(10*sizeof(char));
DWORD ProcessId=GetCurrentProcessId();
DWORD ThreadId=-1;
THREADENTRY32 pe32;
pe32.dwSize=sizeof(pe32); HANDLE hsnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if(hsnapshot==NULL)
{
MessageBox(NULL,"WWW0",NULL,0);
}
BOOL isThread =Thread32First(hsnapshot,&pe32);
if(isThread==FALSE)
{
MessageBox(NULL,"WWW1",NULL,0);
return 0;
}
do
{
if(ProcessId==pe32.th32OwnerProcessID)
{
ThreadId=pe32.th32ThreadID;
break;
}
}
while(Thread32Next(hsnapshot,&pe32)); switch (reason){
case DLL_PROCESS_ATTACH:{
//获取并显示当前进程ID
_itoa(GetCurrentProcessId(), szProcessId, 16);
_itoa(ThreadId,szThreadId,16); m_GetM=SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,hModule,ThreadId);//GetModuleHandle(NULL),ThreadId); if(m_GetM==NULL)
{
MessageBox(NULL,"ADF","DLL OR DLL",MB_OK);
return 0;
}
MessageBox(NULL,szProcessId,"RemoteDLL",MB_OK);
MessageBox(NULL,szThreadId,"dlltread",MB_OK);
Sleep(10000);
}
default: return TRUE;
}
return TRUE;
}
LRESULT CALLBACK GetMsgProc(
int code, // hook code
WPARAM wParam, // removal flag
LPARAM lParam // address of structure with message
)
{
if(code<0)return CallNextHookEx(m_GetM,code,wParam,lParam);
if(code!=HC_ACTION) return CallNextHookEx(m_GetM,code,wParam,lParam);
MSG *Pmsg=(MSG *)lParam;
switch(Pmsg->message)
{
case WM_LBUTTONDOWN: Pmsg->message=WM_RBUTTONDOWN; MessageBox(Pmsg->hwnd,"WM_LBUTTON","WM_RBUTTON",0);break;
default :
return 0;}
return 0;
}
我要的是如何在DLL MAIN()所在线程中设置HOOK
截获消息
远程注入DLL已成功
想在DLL中设置钩子,实现截获