原理:
WM_COMMAND 在以下条件下会产生:点击菜单, 点击加速键,点击子窗口按钮,点击工具栏按钮。这些时候都有command消息产生。
- 查看>窗口(如果没有出现任何窗口右键刷新即可)>跟随ClassProcess
image.png
- 分析代码>假定参数(有时可能分析不出来是什么,需要自行假定)
image.png
image.png
- 我们希望当 窗口消息是 WM_COMMAND 的时候停下来,所以要设置条件断点(shift+F2)
image.png
image.png
- 点击扫雷游戏中的菜单项目,如 游戏>初级 ,触发断点,然后就会停下来。
观察右下角,一共四个参数,参数入栈从右到左
push hControl 句柄可以为空 -> push 0
push Notify 菜单号,可以尝试修改此值 来call 其他菜单 -> push 209
push WM_COMMAND 此消息的值为 111 -> push 111
push hWnd 句柄可以空 -> push 0
call WinPro -> call 01001BC9
注入 ,可以发现调用了菜单里面的选项
image.png
image.png
- C++ 实现
HWND h = ::FindWindow(NULL, TEXT("扫雷"));
if (h==0)
{
::MessageBox(NULL, TEXT("未找到扫雷"), NULL, MB_OK);
}
::SendMessage(h, WM_COMMAND, 0x20A, 0);
网友评论