有時候我們用OD查找窗口的classProc地址是不正確的,這時候可以用如下方法手動查找
1. 用OD打開被調試程序
打開 插件->API斷點設置工具->常用斷點設置,把CreateWindow的三個函數勾上,確定
2. 按F9讓程序運行並在斷點停下,直到在堆棧窗口觀察到你要的窗口名字(本文以“計算器”爲例)
3. 一路F8執行直到回到調用CreateWindowExW的代碼段,並在附近找到pWndClassEx,可發現pWndClassEx的值存放在eax中,下面的RegisterClassExW就是利 用pWndClassEx把窗口過程函數和窗口綁定起來的
4. 我們把斷點設置在push eax這行並清空其他斷點,重新運行程序到斷點處,在命令行鍵入db eax可以查找到pWndClassEx的數據,我們用MSDN查找
pWndClassEx的數據結構如下圖,可以發現窗口過程函數保存在lpfnWndProc變量中,即第三個DWORD數據
從數據窗口可以看到pWndClassEx的數據,以我查到的結果爲例,窗口過程函數的地址應爲0x00731EDE(這裏要注意,低字節在右邊)
5. Ctrl+G 鍵入0x00731EDE我們就可以跳轉到窗口過程函數的代碼啦~