用OD手動查找窗口過程函數(classProc)

有時候我們用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我們就可以跳轉到窗口過程函數的代碼啦~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章