最近系統有點慢,就想優化一下,於是下了個XX大師。結果要注冊才行,看來可以用來練練手了。OD一下,靠還加了殼,偶就是用一下,就不脫你了。開始在彈出窗口MessageBoxA下斷,伊,結果不是用的這個函數,看來還有點麻煩。於是在折騰了半天后偶明白了(因為是新手,所以要折騰半天),要在“全部刪除”按鈕的處理函數下斷,但是處理函數在哪里呢?自己又折騰了半天,愣是沒找到,還是soso一下,找到一篇文章叫做《OllyDBG 入門系列(五)-消息斷點及 RUN 跟蹤》或者讀下面這段 幾種典型程序Button處理代碼的定位 作者:木馬帝國 來源: www.mmbest.com 發布時間:2006-1-5 8:58:02 發布人:trojan
首先
1 od 下運行程序,F12 暫停;
2 View菜單中選擊Windows項,在打開的窗口中可以從Title欄看到目標按鈕,從而找到它的Handle(xxxxxxxx) ;
對不同平台生成的程序,分別處理:
一、VB, Delphi, CBuilder 程序:
3 在CallWindowProcA入口下條件斷點: [esp+8]==xxxxxxxx && [esp+0c]==202;直接在olldbg窗口下面的命令行,bp CallWindowProcA [esp+8]==xxxxxxxx && [esp+0c]==202
4 F9繼續程序,點擊目標按鈕,程序中斷;
5 Alt+M 打開內存區,在代碼段(.text)上下訪問斷點;
6 F9執行程序,程序中斷,
1). VB程序中斷在下面代碼
PUSH DWORD PTR DS:[EAX+EBX] ; yyyyyyy
上面[EAX+EBX]的值(yyyyyy)就是我們要找的位置。
2). Delphi, CBuilder 的程序
程序直接斷在我們要找的位置。
借moon一句,這姑妄稱作CallWindowProcA條件斷點加上code段內存斷點法吧。
二、VC程序
又分MFC和Win32兩種情況,二者相同之處:
3 在IsDialogMessageW入口下條件斷點: [[esp+8]]==xxxxxxxx && [[esp+8]+4]==202
4 F9繼續程序,點擊目標按鈕,程序中斷;
5 Alt+M 打開內存區,在代碼段上下訪問斷點;
6 F9執行程序,程序中斷, 注意這里雖然中斷在code段,但卻不是處理Button點擊事件的代碼處
這時:
對Win32程序,只需要按幾下F7,當回到User32.dll領空后再重復一次第 5、6步就可以了;
而對於MFC程序,我們不得不多次重復這樣的操作:單步回到MFC領空,再第 5、6步。好在已經看到大陸啦!
類比,這就叫IsDialogMessageW條件斷點加上code段內存斷點法了。