关于注入后,消息截取的问题。(注入后SetWindowLongPtr)

wyplyxj wyplyxj 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
最近再写一个工具。

思路如下:
讲DLL注入到目标进程,然后调用SetWindowLongPtr()修改工程函数。。
我注入的是MFC的DLL。

问题:
能监控到WM_COMMAND消息。但是不能监控到WM_KEYDOWND 消息。

起初怀疑是被注入后,显示的窗口 截取了。。但是重载了,PreTranslateMessage()发现并没有接受到。。 因为PreTranslateMessage 是所有消息都要先经过这里,再经过消息循环。


希望各位网友指点下,下面贴出DLL里面的代码:

//消息过程函数
LRESULT CALLBACK MyWindowProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
CString strMsg;
strMsg.Format("监视到的消息: %x",uMsg);
OutputDebugStringA(strMsg);
if (uMsg == WM_KEYDOWN)
{
OutputDebugStringA("响应了 WM_KEYDOWN 消息");
}
return CallWindowProc(g_OldProc,hwnd,uMsg,wParam,lParam);
}

//下面开始读取共享内存中的数据.
HANDLE hfileMap = OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,"MyMemory");
if (hfileMap == NULL)
{
::MessageBox(NULL,"打开共享内存失败.",NULL,NULL);
}
LPVOID pShareMem = ::MapViewOfFile(hfileMap,
FILE_MAP_ALL_ACCESS,
0,
0,
0);

//获取窗口句柄.
CString str = (char*)pShareMem;

HWND hCalc = (HWND)atoi(str.GetBuffer(str.GetLength()));
//::MessageBox(NULL,str,NULL,NULL);

//修改窗口过程函数.
g_OldProc = (WNDPROC)::SetWindowLongPtr(hCalc,
GWLP_WNDPROC,
(LONG)MyWindowProc);

if (g_OldProc == 0)
{
::MessageBox(NULL, "修改过程函数失败", NULL, MB_OK);
}
...全文

相关推荐

评论 2
收藏 已收藏
分享
返回顶部
wyplyxj
进程/线程/DLL 15,466 成员 49,169 内容