用OD手动查找窗口过程函数(classProc)

有时候我们用OD查找窗口的classProc地址是不正确的,这时候可以用如下方法手动查找


1. 用OD打开被调试程序

    打开 插件->API断点设置工具->常用断点设置,把CreateWindow的三个函数勾上,确定

    用OD手动查找窗口过程函数(classProc)_第1张图片

2. 按F9让程序运行并在断点停下,直到在堆栈窗口观察到你要的窗口名字(本文以“计算器”为例)

用OD手动查找窗口过程函数(classProc)_第2张图片


3. 一路F8执行直到回到调用CreateWindowExW的代码段,并在附近找到pWndClassEx,可发现pWndClassEx的值存放在eax中,下面的RegisterClassExW就是利 用pWndClassEx把窗口过程函数和窗口绑定起来的

用OD手动查找窗口过程函数(classProc)_第3张图片


4. 我们把断点设置在push eax这行并清空其他断点,重新运行程序到断点处,在命令行键入db eax可以查找到pWndClassEx的数据,我们用MSDN查找

pWndClassEx的数据结构如下图,可以发现窗口过程函数保存在lpfnWndProc变量中,即第三个DWORD数据

用OD手动查找窗口过程函数(classProc)_第4张图片

从数据窗口可以看到pWndClassEx的数据,以我查到的结果为例,窗口过程函数的地址应为0x00731EDE(这里要注意,低字节在右边)

用OD手动查找窗口过程函数(classProc)_第5张图片


5. Ctrl+G 键入0x00731EDE我们就可以跳转到窗口过程函数的代码啦~

用OD手动查找窗口过程函数(classProc)_第6张图片

你可能感兴趣的:(OD/CE)