先說一點 ALT+L 看記錄~
在某條語句上按了SHIFT+F4後出現了個對話框,
1)第一行是"條件": 要輸入的確定是你感興趣的條件啦,好比說下面的倆句
0041150 push eax
0041151 call [TranslateMessage]
你在0041150處下條件記錄中斷,假如這時候你要是想知道ESI等不等於0,那就能夠設置條件 ESI==0 或ESI!=0 反正是關於ESI的條件了而不是隻能利用這行的EAX. 固然同樣能夠在0041150處下斷追消息,好比說你想知道按了 老鼠標移動消息,那麼就設置 MSG==WM_MOUSEMOVE 或是 MSG==0200(移動的數字代碼). 有人該問了,消息記錄好象應該在下一行有函數的下斷才正確吧?其實不必定非要在傳遞消息的那行0041151下斷的,但在那行下斷的好處是能夠記錄到函數參數,這在下面會講到~
"條件"這的書寫是按照 MASM32彙編的形式書寫的,好比 == != > <
2)"說明"="表達"
"解碼錶達式的值"
"說明"就是個註釋啦,添不添無所謂了,除非你下的記錄中斷比較多,這樣在記錄裏能看的明白~
"表達"其實就是咱們記錄的核心啦,程序在咱們第1小條裏的"條件"爲真的時候,就會記錄咱們在"表達"裏填的內容,好比說ESI==0的時候,咱們記錄 [eax+4]的值
反正是你感興趣的內容啦,如果想記錄消息就添 MSG 啦,不少時候咱們只添了"條件"而沒有添"表達",程序中斷後就會顯示"未知的函數或標識符!",這就是緣由了.
至於下面的"解碼錶達式的值"你能夠隨便選了,他不過是把記錄後的數據又分析了一下, 好比說咱們記錄了[eax+4]的值是 201 ,那麼當你選"信息代碼(WM_XXX)"的時候那麼你在記錄(ALT+L看記錄)裏看到的就是被分析成了 201 WM_LBUTTONDOWN
當你選"布爾數值",那麼記錄裏數值201後面就會跟個 TRUE了,其實就是OD對這個數據按照咱們選擇的類型又進行了一次分析而已~~
3)暫停程序 => 永不 條件知足時 永遠
這三個選擇就是條件爲真記錄表達的時候程序暫不暫停程序,那就看你調試的須要了~
4)記錄表達式的值 => 永不 條件知足時 永遠
呵呵,要是選"永不",那麼咱們設立記錄"表達"還有啥意義啊, 如果選"永遠",那麼條件彷佛不就沒意義了,由於記錄的時候已經無論條件了,只要運行到這就記錄表達.不過好象也能夠利用的,本身去想一想啦..我不說.
通常都是選"條件知足"啦.
5)記錄函數參數 => 永不 條件知足時 永遠
這個要是你下在沒函數的那行,那麼這行就變灰了~~ 記錄函數的參數頗有意義啊,直接能夠看到不少信息,咱們好比說在有函數的那行下條件記錄."條件"是 EAX==0 "表達"是 [EAX+4],而後在這選擇記錄函數參數在"條件知足時";固然你若只想記錄運行到此處的函數參數,那麼就空着"條件"和"表達"吧,同時3)和4)的選擇也要變爲"永不"了...也許你在記錄了啥也看不到,由於運行到這行可能EAX總不=0 ,那麼好換換 EAX>0 ,好象看了到一堆,而後還有PMSG=XXXX Hw=XXXX,這就是運行到這裏這個函數的參數啦~~ 咱們也能夠記錄 CREATFILEA 函數,那麼就知道都打開什麼文件了~~
6) "運行次數":0爲無限次
7) "若是程序暫停,發動以下參數到插件中..."
我不會,我就會上面那些,但願高手給補充一下,好讓咱們這些菜鳥學學~~
注意一點: 咱們在OD菜單"查看"=>"窗口"裏也能夠用老鼠標右鍵給窗口過程下消息斷點,下完後你能夠用SHIFF_F4打開那個消息斷點,發現它其實就是條件記錄斷點的一種形式而已~~~
舉個例子吧:
好比說一個程序要求註冊,點後出現一個註冊窗口那麼咱們就要對點註冊按鈕下斷,看看它以後執行了什麼~~
註冊窗口若是是對話框,那麼確定要用函數 CreatDialoParam或DialogBoxParam 若你對這倆函數都不瞭解的話,那就去看看書吧...首先用OD裏的插件"窗口工具"得到註冊按鈕的標識(即ID),好比說是0422,記錄下來備用啦~,
在OD裏對這倆函數下斷,而後執行程序,讓註冊窗口顯示就會中斷,OD裏看堆棧,此函數的第4個參數pDlgProc就是對話框的過程入口了,這裏是0041b0b0是入口
去對話框入口處,SHIFT+F4,在"條件"裏輸入 [ESP+8]==0111 && [ESP+C]==0422
"表達"能夠空着,暫停程序在"條件知足時"
又該問了,爲何這麼寫? 請記住: 因爲是過程調用,確定要先向堆棧裏壓數據的,也就是標準說法:傳遞參數! 對於對話況過程或窗口過程,執行到入口處的時候堆棧內確定壓入的是MSG消息結構的數據,那麼 [ESP+8]正好是WM_xxx消息,因爲點了按鈕咱們確定要抓的是WM_COMMAND消息 也就是111啦,這個不明白去看書~ [ESP+C]是Wparam參數,就是窗口的ID號了,這個條件就是當你按下了ID爲422的註冊按鈕的時候中斷,接下來你就能夠單步看了~~ 固然,你用窗口工具的時候也能看到按鈕的子窗口句柄,這時候 {ESP+10]就是它的數值了,也同樣能夠代替 {ESP+C]==0422的條件了.其實都同樣的,
友人該說了,不會用工具怎麼辦啊,那就直接在過程入口下SHIFT+F4啦,條件和表達都空着,只選記錄函數參數,那麼就能獲得一堆記錄了,找到顯示有 WM_COMMAND的消息,把他的內容裏的ID作爲[ESP+C]==的數值,一個個試啦web