一直好奇remote spy是如何截获其他窗口消息的,用IDA肢解了一下,大概流程如下
1 用GetWindow得到窗口树
2 针对用户选择的窗口,调用 GetWindowLong(hwnd,GWL_WNDPROC) 得到之前的消息处理函数
3 SetWindowLong替换窗口消息处理函数到自己的处理函数,在该函数内记录消息,并会用CallWindowProc调原来窗口消息处理函数
验证:打印出特定窗口的GWL_WNDPROC,发现remote spy前后GWL_WNDPROC发生了变化,关闭消息窗口后,GWL_WNDPROC恢复之前值
[@more@]来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/116625/viewspace-1001301/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/116625/viewspace-1001301/