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

wyplyxj 2014-02-08 03:51:26
最近再写一个工具。

思路如下:
讲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);
}
...全文
266 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2014-02-08
  • 打赏
  • 举报
回复
atoi 截断了指针, 用 atoi64 试试看
wyplyxj 2014-02-08
  • 打赏
  • 举报
回复
真心搞不懂了。。 同样的代码 在XP下 正常 换到 64位下就出错。。我晕死。

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧