用OD手动查找窗口过程函数(classProc)
有时候我们用OD查找窗口的classProc地址是不正确的,这时候可以用如下方法手动查找1. 用OD打开被调试程序
打开 插件->API断点设置工具->常用断点设置,把CreateWindow的三个函数勾上,确定
https://img-blog.csdn.net/20150301123624056?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDQ5NzIyOA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
2. 按F9让程序运行并在断点停下,直到在堆栈窗口观察到你要的窗口名字(本文以“计算器”为例)
https://img-blog.csdn.net/20150301123842040?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDQ5NzIyOA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
3. 一路F8执行直到回到调用CreateWindowExW的代码段,并在附近找到pWndClassEx,可发现pWndClassEx的值存放在eax中,下面的RegisterClassExW就是利用pWndClassEx把窗口过程函数和窗口绑定起来的
https://img-blog.csdn.net/20150301124216818?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDQ5NzIyOA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
4. 我们把断点设置在push eax这行并清空其他断点,重新运行程序到断点处,在命令行键入db eax可以查找到pWndClassEx的数据,我们用MSDN查找
pWndClassEx的数据结构如下图,可以发现窗口过程函数保存在lpfnWndProc变量中,即第三个DWORD数据
https://img-blog.csdn.net/20150301124658638?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDQ5NzIyOA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
从数据窗口可以看到pWndClassEx的数据,以我查到的结果为例,窗口过程函数的地址应为0x00731EDE(这里要注意,低字节在右边)
https://img-blog.csdn.net/20150301125610453?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDQ5NzIyOA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
5. Ctrl+G 键入0x00731EDE我们就可以跳转到窗口过程函数的代码啦~
https://img-blog.csdn.net/20150301125713258?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDQ5NzIyOA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
---------------------本文来自 小明湖畔 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u010497228/article/details/44002045?utm_source=copy
页:
[1]