[轉載]OllyDbg知識專題

[轉載]OllyDbg知識專題

信息來源:霏凡論壇(bbs.crsky.com)

轉Draren總結的ollydbg v1.09d 中文版使用說明

一點一滴的積累,也就會了.

之所以選擇ollydbg

1.我的os是winXP,無法使用trw2000,而softice裝了多次均未成功,還藍屏死機多次.鬱悶.

2.友好的gui界面,不像softice.可以邊幹活邊聽歌,不像softice,把整個os都掛起了.多用兩次,連時間都不知道了.

3.強大的內存查看功能,再不用什麼-d了,而且跳轉方便,爽!一目瞭然.

4.強大的右鍵菜單功能

ollydbg的界面:

菜單:

文件:
  1.其中包括該菜單的下部有上次打開的紀錄,該紀錄保存有上次未清除的斷點.
  2.附加.對付那些Anti-Debug程序.先運行程序,再運行od,文件-->附加.
查看:
  1.執行模塊(Alt+E),查看程序使用的動態鏈接庫
  2.查看斷點.Alt+B
調試:
  1.運行(F9)加載程序後,運行!
  2.暫停(F12)
  3.單步進入(F7)遇見CALL進入!進入該子程序.
  4.單步跳過(F8)遇見CALL不進去!
  5.執行到返回(ALT+F9)就是執行到該子程的返回語句

ollydbg的16進制編輯功能.類似與hiew,hex workshop

查看-->文件

二進制文件編輯功能.查看-->文件,打開的文件是二進制顯示.選中要改變的機器指令,空格,修改,右擊-->保存.

ollydbg的四個區域

左上角是cpu窗口,分別是地址,機器碼,彙編代碼,註釋;註釋添加方便,而且還能即時顯示函數的調用結果,返回值.
右上角是寄存器窗口,但不僅僅反映寄存器的狀況,還有好多東東;雙擊即可改變Eflag的值,對於寄存器,指令執行後發生改變的寄存器會用紅色顯示.
cpu窗口下面還有一個小窗口,顯示當前操作改變的寄存器狀態. 不錯;
左下角是內存窗口.可以ascii或者unicode兩種方式顯示內存信息;
右下角的是當前堆棧情況,還有註釋啊.

F3選擇打開程序.

使用

F9執行程序.

下斷點:

1.對函數下下斷點

在代碼區右擊-->搜索-->當前模塊中的名稱(ctrl+N),在跳出來的對話框中選擇需要下的斷點函數.->右擊->查找導入參考(enter),按F2下斷點.如果有多個地方調用了該函數就這樣操作。

2.在需要的地方下斷點 F2

添加註釋:

在代碼區第四列,右擊-->註釋

查看內存地址

右擊內存地址列-->前往-->輸入要查看的內存地址

在函數lstrlen的註釋的上方,有一個變量string,當執行到該函數的時候,string後面會出現lstrlen函數的參數字符串.在實際使用中一般是輸入的字符串.(很好用哦)

類似的還有lstrcmp,上面有string1,string2能夠顯示將要比較的兩個字符串.

另外,一般在執行getwindowtext等函數後,右邊寄存器列,eax會顯示函數的返回值,即取到的內容.同時內存中也會有顯示.

在反彙編中選中一條命令,如果其中有用到內存中的地址,右擊-->在轉存中跟隨-->直接常數
此時內存地址會顯示指令中引用到的內存字符

拷貝功能十分強大.直接選擇要拷貝的內容.右擊-->複製-->文件or剪貼板

ollydbg的條件斷點可以按寄存器,存儲器,消息(必須是消息的數字,如wm_command就是111)等等設斷,非常強大,一旦設了之後記錄到文件中,下次restart程序還能用,不用拿筆記,很方便。

顯示跳轉路進:
選項-->調試設置-->cpu頁-->顯示跳轉的方向,顯示跳轉的路徑,如果跳轉沒有實現則顯示灰色路徑。在cpu窗口中,機器碼的 前面顯示">"符號.同時,在cpu窗口下的小縫中會顯示跳轉路徑,從何跳轉而來.右擊-->前往...一般都是條件跳轉,上面的內容就是比 較的地方啦。:)

跟蹤功能:
選項-->調試跟蹤-->跟蹤:設置運行跟蹤的緩存大小.越大越好.
調試-->打開或清除運行跟蹤
然後我們就可以用CTRL+F11或CTRL+F12開啓“跟蹤進入”和“ 跟蹤跳過”了。當我們暫停程序的時候,可以用小鍵盤上的“+”,“-”,“*”來控制跟蹤功能了。
其中,“跟蹤進入”和運行類似,但是記錄所有指令以及寄存器變化。並且會自動進入所有的CALL中。
“ 跟蹤跳過”和“跟蹤進入”類似,但是不進入CALL
“+”用來顯示跟蹤緩衝區中的下一條指令
“-”用來顯示跟蹤緩衝區中的上一條指令
“*”用來發返回當前指令

讓OD顯示MFC42.DLL中的函數
打開調試-->選擇導入庫-->添加-->選擇MFC43.LIB加入.重新載入MFC程序,就可以看到call後面的api函數了.

動態暫停以messagebox爲例)
先運行目標程序,再運行od,選擇文件-->附加.在目標程序運行出現對話框時,切換至od,F12暫停.

字符串參考:
在彙編代碼區,右擊-->搜索-->字符參考

更改二進制文件:

方法1.查看-->文件,打開文件,找到欲修改的偏移,使用機器碼修改,然後右擊保存文件.缺點是需要使用其他軟件來獲取偏移地址.

方法2.直接在反彙編代碼區更改,這時可以使用匯編代碼更改,不用記機器碼.完了.右擊-->複製到可執行文件-->保存文件.很是方便哪!

關於虛擬地址和偏移地址:
ollydbg果然強大,太強大了,在欲修改的指令處右擊-->複製到可執行文件,彈出窗口中光標所在行即是欲修改的指令所在的偏移地址,右擊-->彙編,直接修改彙編指令,不用記機器碼,又不用虛擬地址到偏移地址的轉換.改完後保存文件.爽丫!
olldbg 下怎麼下消息斷點?

如在softice 中下 BMSG 0084 WM_DESTROY,在olldbg下該怎麼做?

不如下斷 SendMessage,PostMessage,程序中的消息不一定都經過消息循環。

Ollydbg下消息斷點的一個方法

原文:
SoftIce can trace application messages. And Olly?
by FuZzYBiT

SoftIce can trace application messages. And Olly?
And so does OllyDbg. That’s a very “hidden feature”. I guess it is sooo useful.
1. Open program
2. Names window [CTRL+N in CPU Window]
3. Find User32.TranslateMessage API
4. right click/FindReferences
5. conditional breakpoint [SHIFT+F4]
6. expression: MSG
7. Log function arguments: Always
If you cannot find it, try right click SEARCH FOR-> ALL INTERMODULAR CALLS.
But if I want to trap a specific message like WM_COMMAND?
To Log Only WM_COMMAND
Do it in this fashion:
1. Open program
2. Names window [CTRL+N in CPU Window]
3. Find User32.TranslateMessage API
4. right click/FindReferences
5. conditional breakpoint [SHIFT+F4]
6. Condtion box: MSG==WM_COMMAND
7. Log function arguments: On Condition
If you can’t find User32.TranslateMessage API, do the same as above.

翻譯:

SoftIce 能夠跟蹤應用程序的消息,那麼OllyDbg呢?
by FuZzYBiT

OllyDbg也是可以的,那是一個非常"隱蔽的功能"。它是如此的有用。
1. 打開程序
2. 名字窗口[ 在CPU窗口中按CTRL+N ]
3. 查找 User32.TranslateMessage API
4. 右擊/FindReferences(查找參考)
5. 下條件斷點 [SHIFT+F4]
6. 表達式: MSG
7. 記錄函數參數:永遠

如果你不能找到它,試試右擊鼠標,然後搜索全部模塊中的名稱。
但是如果我想要捕捉一個特定的消息如WM_COMMAND呢?
只對WM_COMMAND記錄
用這個方法做:
1. 打開一個程序
2. 名字窗口[ 在CPU窗口中按CTRL+N ]
3. 查找 User32.TranslateMessage API
4. 右擊/FindReferences(查找參考)
5. 下條件斷點 [SHIFT+F4]
6. 條件框:MSG==WM_COMMAND
7. 記錄函數參數: 條件滿足時
如果你不能找到User32.TranslateMessage API,象上面那樣做。
以下命令適用於 OllyDbg 的命令行插件 Cmdline.dll(顯示於程序的插件菜單中)
聆風聽雨整理
===============================================================
命令行插件支持的命令

CALC
判斷表達式

WATCH
添加監視表達式

AT
在指定地址進行反彙編

FOLLOW
跟隨命令

ORIG
反彙編於 EIP

DUMP
在指定地址進行轉存

DA
轉存爲反彙編代碼

DB
使用十六進制字節格式轉存

DC
使用 ASCII 格式轉存

DD
轉存在堆棧格式

DU
轉存在 UNICODE 格式

DW
使用十六進制字詞格式轉存

STK
前往堆棧中的地址

AS
(AS + 地址 + 字符串)
在指定地址進行彙編

BP
進行條件中斷(有條件的斷點)

BPX
中斷在全部調用 (Call)

BPD
清除全部調用中的斷點

BC
清除斷點

MR
內存斷點於訪問時

MW
內存斷點於寫入時

MD
清除內存斷點

HR
訪問時進行硬件中斷

HW
寫入時進行硬件中斷

HE
執行時進行硬件中斷

HD
清除硬件斷點

STOP
停止運行程序調試

PAUSE
暫停執行程序調試

RUN
運行程序進行調試

GE
運行和通過例外

SI
單步進入 Call 中

SO
步過 Call

TI
跟蹤進入直到地址

TO
跟蹤步過直到地址

TC
跟蹤進入直到滿足條件

TOC
跟蹤步過直到滿足條件

TR
運行直到返回

TU
運行直到用戶代碼

LOG
查看記錄窗口

MOD
查看模塊窗口

MEM
查看內存窗口

CPU
查看 CPU 窗口

CS
查看 Call 堆棧

BRK
查看斷點窗口

OPT
打開選項設置窗口

EXIT
退出 OllyDbg

QUIT
退出 OllyDbg

OPEN
打開一個可執行文件

CLOSE
關閉可執行文件

RST
重新運行當前程序

HELP
查看 API 函數的幫助

OllyDbg應用方法大全--請補充!

所有文章均爲散落在DFCG論壇各處或其他網絡文集的經典。
雪很冷蒐集整理於學習筆記或與朋友討論之中


Ollydbg 中斷方法


Quote:
Originally posted by dong at 2004-6-1 10:29 PM:
我問個問題
在od中怎麼下斷點呢??
現在有的程序一點註冊就沒反映了
這樣的怎麼下斷點呢??
能介紹下什麼情況下什麼斷點嗎?
在轉存中下硬件訪問->Word"斷點,下斷之後,怎麼取消!
9398944(老菜鳥) 11:09:59
alt+D 按H 然後刪除


這個沒有萬能的方法,只能視具體情況而定,就我的經驗而言:
第一步,反彙編找有用信息,有時候雖然點擊註冊按鈕後,沒有任何反映,但軟件也許包含了可用的信息,比如“未註冊”,“已註冊”等等之類的,都可用做斷點的。
第二步,如果反彙編也找不到有用信息,如果用OD可以下HMEMECPY斷點,在每個調用的函數上下斷,雖然這個法子太笨,但我試過,幾乎有70%以上的機會可找到斷點,找到斷點後再慢慢跟吧!這只是個人的看法,關鍵只要找到斷點,有什麼辦法都無所謂。
在命令行下bpx hmemcpy斷點,然後回車,在每個調用的函數上下斷。
有的程序甚至無法用API中斷,可以在OD載入程序後上下翻動反彙編窗口查看字符串參考下斷,在反彙編窗口裏直接找到的,右鍵查找那裏找不到


轉發Ollydbg 中斷方法淺探-各種斷點常識知識

Ollydbg 中斷方法淺探
               ――國慶節小禮

Ollydbg是一個新的32位的彙編層調試軟件。適應於windows98、me、2000、xp和2003操作系統。由於他具有圖形窗口界面,所以操作方便、直觀,是cracker的好工具。
由於Ollydbg沒有了TRW2000的萬能斷點,所以許多的新手感覺到用Ollydbg斷點不好找。現在我來的說說Ollydbg下中斷的幾種方法。本人是個菜鳥,水平有限,可能不能完整的寫出來,也可能存在錯誤。請大家指正。
我所表述的是Ollydbg v1.09d中文版,其他版本和英文版下自己參考。

第一 尋常斷點
Ollydbg中一般下中斷的方法,就是在程序的地址處用鼠標選擇這一行。然後按F2鍵,這時被選擇的那一行的地址會變成別的顏色,就表示這個地址處下了中斷。然後運行程序時只有到這個地址處就會被Ollydbg中斷。
這個方法用的比較多,所以把他稱作尋常斷點。
如果有命令行插件,就可以在命令窗口中輸入BPX xxxxxxxx 下斷點。
優點:只要自己懷疑是重要的代碼處都可以下這種下斷點,不受條件的限制,所以方便實用。
缺點:如果不知道代碼功能下斷點具有盲目性。

第二 API斷點
Ollydbg中一般下API中斷的方法,有二種。
1. 在代碼窗口中點鼠標右鍵,出現功能菜單。在[搜索]選擇項下有〔當前模塊的名稱〕和〔全部模塊的名稱〕倆項,選擇其中的一項就打開了程序調用API的窗 口,在這個窗口中選擇你要跟蹤的API函數名。雙擊這個函數就能到程序的調用地址處。然後用F2下中斷。也可以在API窗口中選擇需要跟蹤的函數點鼠標右 鍵出現功能菜單,選擇〔在每個參考設置斷點〕。同樣下了斷點。                 
快捷方式:Ctrl+N
2. 在命令行窗口中輸入BPX API函數名或者BP API函數名 後回車。這時出現了所有調用這個函數的地址的窗口,在這個窗口中可以看到調用這個API函數的地址已改變了顏色。說明下好了斷點。
說明一下:BPX一般中斷在程序調用API的地址處。BP會中斷在API的寫入地址處。二這有所不同,根據需要選擇。
  優點:這種方法下的斷點是針對每一個API函數的,所以具有明確的目的。
  缺點:關鍵的API函數不容易找到。所以有時下的斷點沒有作用。

  第三 內存斷點(跟蹤關鍵數據的斷點)
  Ollydbg中的內存斷點相當於TRW中的bpm 斷點。
下斷點的方法是:在程序運行中斷時選擇界面中的轉存窗口,用光標選擇內存中的一段關鍵數據(顏色會改變),然後右擊鼠標出現功能菜單。選擇〔斷點〕項,其中有二個選擇〔內存訪問〕和〔內存寫入〕。
〔內存訪問〕斷點是程序運行時要調用被選擇的內存數據時就會被Ollydbg中斷,根據這個特點在破解跟蹤時只要在關鍵數據內存中下中斷就可以知道程序在 什麼地方和什麼時候用到了跟蹤的數據。對於一些複雜算法和流程變態的算法跟蹤有很大的幫助。從破解上講,一個註冊碼的生成一定是由一些關鍵數據或者原始數 據計算來的。所以在內存中一定要用到這些關鍵數據。那麼〔內存訪問〕斷點就是最好的中斷方法。
〔內存寫入〕斷點是程序運行時向被選擇的內存地址寫入數據時就會被Ollydbg中斷。根據這個特點在破解時可以跟蹤一個關鍵數據是什麼時候生成的,生成的代碼段在那個地方。所以一個關鍵的數據如果不知道他的由來就可以用〔內存訪問〕斷點查找計算的核心。
內存中斷的下斷點還有另外的一種方法:程序運行時如果知道關鍵的數據,比如我們輸入的試驗碼、程序生成的序列號等。這時在內存中一定存在這些數據。用 Alt+M打開內存窗口,在這個窗口中搜索知道的關鍵數據。用光標選擇這些數據同樣下內存中斷,這種方法更容易找的關鍵的數據。
優點:斷點是直接面向關鍵數據的,所以比較容易到核心部分。
缺點:內存斷點重新運行後會消失,干擾比較多。

第四 硬件斷點(跟蹤關鍵標誌的斷點)
硬件斷點是Olldbg所特有的斷點,他不會因爲重新運行就銷燬,只要不刪除。跟蹤這個程序時就有效。但他在98系統下會不起作用。
硬件斷點是根據關鍵標誌回逆到關鍵代碼的好方法。下中斷的方法和內存斷點的方法相同,有三個方式〔硬件訪問〕、〔硬件寫入〕、〔硬件執行〕。一般用前2 個。他也同樣有內存斷點的特性,所以可以用內存斷點的地方也可以用硬件斷點。這裏介紹利用他來跟蹤註冊標誌的使用方法,一般軟件的註冊都用到了標誌比較。 即在內存地址中有一個標誌,在判斷是不是註冊時比較標誌的值。不同的值表示不同的註冊狀態。這個標誌的地址一般比較固定。根據這個特點可以下硬件斷點來跟 蹤標誌位是什麼地方被標誌的。
方法:在轉存窗口中選擇到標誌存放的內存地址處,然後選擇標誌值。下〔硬件寫入〕中斷(根據標誌的字節下不同的長度)。重新運行程序你會發現 Ollydbg會不斷的中斷在這個標誌的內存地址處。在功能菜單的〔調試〕選項下選擇〔硬件斷點〕就打開了硬件斷點的窗口,在這個窗口中選擇〔跟蹤〕,這 時轉存窗口就會來到被下中斷的內存地址處。運行程序跟蹤內存地址中的值就會知道被賦標誌的代碼,跟蹤到計算的核心。〔硬件訪問〕的使用可以知道程序在運行 時多少地方用到了這個註冊標誌。對於破解複雜效驗的程序十分的有效。
直接在命令欄裏下bh ****硬件斷點
 
發佈了7 篇原創文章 · 獲贊 1 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章