转Draren总结的ollydbg v1.09d 中文版使用说明
轉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 ****硬件斷點
以上只是我的總結,本想每個方法用一段例子,無奈時間有限,請大家原諒了。
當然,還是許多的下中斷的方法,本人水平有限,不能一一盡述。只當拋磚引玉,請大俠們賜教。
????????????????????????????????????Fxyang
????????????????????????????屬于中國破解組織[OCN][BCG][FCG]
?????????????????????????????????????? 2003-10-1
歡迎!我高興地為你推出命令行插件的初始版本,功能很有限但非常適用。它的源代碼是自由的,因此你可以添加任意的命令和修改現存的功能。插件所使用的 OllyDbg 新函數在PDK 1.08中有詳細的描述。 注意該插件不能工作在1.08及以前版本的 OllyDbg中。
命令行插件的快捷組合鍵:Alt+F1。目前,它支持如下的命令:
表達式??
CALC 表達式???? 計算表達式的值
? 表達式????????同上
表達式 (第一個字符不能是字母)?? 同上
WATCH 表達式????添加監視
W 表達式????????同上
反匯編器????????
AT 表達式?????? 在反匯編中跟隨
FOLLOW 表達式?? 同上
ORIG????前往實際的 EIP
*?????? 同上
轉存和堆棧??????
D 表達式????????在轉存中跟隨
DUMP 表達式???? 同上
DA [表達式]???? 轉存為匯編格式
DB [表達式]???? 轉存為十六進制(hex)字節格式
DC [表達式]???? 作為ASCII 文本轉存
DD [表達式]???? 作為地址(堆棧格式)轉存
DU [表達式]???? 作為 UNICODE 文本轉存
DW [表達式]???? 轉存為十六進制(hex)字格式
STK 表達式??????在堆棧中跟隨
匯編????
A 表達式 [,命令]????????在地址處匯編
標號和注釋??????
L 表達式, 標號??為地址指派符號標號
C 表達式, 注釋??在地址處作注釋
斷點命令????????
BP 表達式 [,條件]?????? 在地址處設置 INT3 斷點
BPX 標號????????在當前模塊內部的每個調用外部'標號'處設置斷點
BC 表達式?????? 刪除地址處的斷點
MR 表達式1 [,表達式2]?? 設置訪問范圍的內存斷點
MW 表達式1 [,表達式2]?? 設置寫入范圍的內存斷點
MD??????移除內存斷點
HR 表達式?????? 在訪問地址處設置一個字節的硬件斷點
HW 表達式?????? 在寫入地址處設置一個字節的的硬件斷點
HE 表達式?????? 在執行地址處設置硬件斷點
HD [表達式]???? 移除地址處的硬件斷點
跟蹤命令????????
STOP????暫停執行
PAUSE?? 同上
RUN???? 運行程序
G [表達式]??????運行到地址處
GE [表達式]???? 跳過意外的句柄并運行到地址處
S?????? 單步進入
SI??????同上
SO??????單步跳過
T [表達式]??????跟蹤進入到地址處
TI [表達式]???? 同上
TO [表達式]???? 跟蹤跳過到地址處
TC 條件 跟蹤進入到條件處
TOC 條件????????跟蹤跳過到條件處
TR??????執行到返回
TU??????執行到用戶代碼
OllyDbg 窗口????
LOG???? 查看日志窗口
MOD???? 查看可執行模塊
MEM???? 查看內存窗口
CPU???? 查看 CPU 窗口
CS??????查看調用堆棧
BRK???? 查看斷點窗口
OPT???? 編輯選項
雜項命令????????
EXIT????關閉 OllyDbg
QUIT????同上
OPEN [文件名]?? 打開待調試的可執行文件
CLOSE?? 關閉調試的程序
RST???? 重新載入當前程序
HELP????顯示本幫助
HELP OllyDbg????顯示 OllyDbg 幫助
HELP API函數幫助完整文件名??????顯示 API 函數幫助
命令不區分大小寫, 中括號中的參數是可選的。表達式可以包含常量, 寄存器和內存參考并支持所有標準的算術和邏輯操作符。默認情況下,所有常量都是十六進制的數。要標記為十進制的常量,緊接著使用十進制標明。例如:
?2+2 ?計算該表達式的值;
?AT [EAX+10] ?在地址EAX+0x10處開始的雙字長度內存的內容反匯編;
?BP KERNEL32.GetProcAddress ?設置 API 函數斷點。注意:你僅可以在基于NT 系統的系統 DLL 上設置斷點;
?BPX GetProcAddress ?在當前所選模塊中的每個調用外部函數 GetProcAddress 處設置斷點;
?BP 412010,EAX==WM_CLOSE - 在 0x412010 處設置條件斷點。當 EAX 的值等于WM_CLOSE 時程序暫停。
你可以在 OllyDbg 幫助中找到 OllyDbg??支持的完整的表達式描述。
譯者注:由于本人的“E”文水平有限,加之對該插件和與之相關的ollydbg 軟件以及其他知識的理解深度不足,譯文難免在很多地方產生歧義甚至在語義上根本不通順,鑒此,歡迎各位專業人士積極修正。漢化:張小平 網絡浪子工作室
如何添加新命令:
要添加新命令,首先你必須在數組 cmdlist[] 里注冊它。數組的元素是結構類型的 t_command. 第一個元素是大寫字母的命令,第二個元素描述它的操作數。當前版本的插件只支持三種類型的操作數:
A ?在 address 中使用值的地址表達式 address. 插件檢查為它已分配內存的指針。
a ?等同于 A 但可選。如果未指定表達式,address 被置為0。
V ?在value 中任意類型的表達式。如果你期望整數表達式,檢查 value.dtype 是 DEC_DWORD 并使用 value.u 的內容。
v ?等同于 V 但可選。如果未指定表達式,value.dtype 是 DEC_UNKNOWN 并 value.u 為 0。
S - 在 string 中的 ASCII 串,可能為空。
第三個元素是將被跳過命令過程的常量,第四個是執行命令的過程地址:
typedef int t_exefunc(char *answer,ulong parm);
如果可識別命令的所有操作數被正確解析和評估,插件調用該過程。首先是變元,answer,是長256個字節的串指針。命令被執行后它的內容會被顯示在命令行窗口中。第二個變元是從 cmdlsit[] 取出的參數。如果函數的返回值為 0,說明命令正確執行并將其添加到歷史列表中。
ollydbg1.10漢化版有些地方意思翻譯得不準確
例如“調試選項”中的"sfx"中的“停止在自釋放解釋器的入口”這句話的翻譯根本就是錯的。原文是Stop at entry of self-extractor,原文意思為“OllyDbg doesn't attempt to trace real entry.”就是“Ollydbg不試圖跟蹤真實入口”。還有一些類似的翻譯也是錯的。容易引起誤解,建議大家還是用英文原版,不懂的看幫助文件。
請教:怎么在OLLYDBG中保存當前正在調試的程序?
在代碼區修改程序后,點右鍵-》復制到可執行文件-》選擇部分,在彈出的窗口里點右鍵-》保存文件。起個文件名吧。
OllyDbg 常用快捷熱鍵
聆風聽雨整理
===============================================================
打開一個新的可執行程序 (F3)
重新運行當前調試的程序 (Ctrl+F2)
當前調試的程序 (Alt+F2)
運行選定的程序進行調試 (F9)
暫時停止被調試程序的執行 (F12)
單步進入被調試程序的 Call 中 (F7)
步過被調試程序的 Call (F8)
跟入被調試程序的 Call 中 (Ctrl+F11)
跟蹤時跳過被調試程序的 Call (Ctrl+F12)
執行直到返回 (Ctrl+F9)
顯示記錄窗口 (Alt+L)
顯示模塊窗口 (Alt+E)
顯示內存窗口 (Alt+M)
顯示 CPU 窗口 (Alt+C)
顯示補丁窗口 (Ctrl+P)
顯示呼叫堆棧 (Alt+K)
顯示斷點窗口 (Alt+B)
打開調試選項窗口 (Alt+O)
我想知道在OD中如何下地址斷點
比如bpx 5022e2
是不是在命令行中?有其他辦法沒?
命令行在98下不能用
ctrl+g輸入地址,F2下斷
請問用ollydbg如何跟蹤被跟蹤進程的子進程
我在跟蹤一個程序的時候,它用CreatProgressA產生了一個子進程,然后關閉父進程,請問我如何在子進程的入口處下斷?請高手指教!
指令為:
00454476?? 50?????????????? PUSH EAX
00454477?? 6A 00????????????PUSH 0
00454479?? E8 C218FBFF??????CALL kernel32.CreateProcessA
00454479處堆棧內容如下:
0012FD40?? 00000000??|ModuleFileName = NULL
0012FD44?? 00956B94??|CommandLine = "C:/QXJDGL/QXJDGL.DLL 2"
0012FD48?? 00000000??|pProcessSecurity = NULL
0012FD4C?? 00000000??|pThreadSecurity = NULL
0012FD50?? 00000000??|InheritHandles = FALSE
0012FD54?? 00000020??|CreationFlags = NORMAL_PRIORITY_CLASS
0012FD58?? 00000000??|pEnvironment = NULL
0012FD5C?? 00000000??|CurrentDir = NULL
0012FD60?? 0012FD84??|pStartupInfo = 0012FD84
0012FD64?? 0012FD74??/pProcessInfo = 0012FD74
飛葉流楓回答:
C:/QXJDGL/QXJDGL.DLL 2,這個程序是一個EXE程序,你可以改入口點為INT 3,也就是CCh,將OD設為最終異常處理程序。當程序啟動的時候會產生一個INT 3非法操作,你點調試就可以中斷在QXJDGL.DLL中了。
轉OllyDbg實用技巧六則
標題: OllyDbg實用技巧六則
作者:??dOSKEY lEE
關鍵詞: OllyDbg、OD、技巧
1、讓跳轉路徑顯示出來
?? 打開Options/Debugging Option。彈出Debugging Option對話框,選擇CPU頁,選定“Show direction to jumps”、“Show jump path”和“Show grayed path if jump is not taken”。如此以來在??Disassembler窗口就會顯示跳轉的路徑了。
2、讓OD顯示MFC42.DLL中的函數
?? 如果程序是用MFC進行的動態編譯,那么在OD中將只能顯示MFC42.DLL中的函數為:
00410E40??|.??E8 43000000??CALL????<JMP.&MFC42.#1576> 1576是函數在MFC42.DLL中的序號。打開Debug/Select import libraries,單擊彈出的對話框中“Add”,在彈出的打開文件對話框中選擇“MFC42.LIB”并打開,重新載入MFC程序,你就可以看見函數名稱變為:
00410E40??|.??E8 43000000??CALL????<JMP.&MFC42.#1576_?AfxWinMain@@Y>
IDA中分析出了來的東西一樣了!呵呵,以后不用等待IDA的“細嚼慢咽”也可以輕松搞定MFC程序了。其他的DLL類似,如果有序號,可以在VC的LIB目錄中找到相關的.LIB文件,加到OD中便可。如果你沒有“MFC42.DLL”,你可以的到看學論壇的下載區找,我已經上傳到那里了。
3、讓OD輕松躲過“ANTI-DEBUG”
??
?? 很多“ANTI-DEBUG”的程序都是在程序開始時來檢查是否安裝調試器的。用這種特性我們可以輕松的用OD的“Attach”繞過檢查部分。如“X語言”,如果你喲內TRW2K/S-ICE/OD 直接加載它的話,程序回警告你安裝了調試器并結束。但是我們在“X語言”開啟后再運行OD,并用“Attach”系上它就就可以了,輕松通過檢查。而且在OD系上它后仍然可以用CTRL+A進行分析。如此一來,快哉!:)
4、輕松對付調用“MessageBoxA”以及類似的模態對話框的程序
????
?? 很多人都認為OD不好攔截“MessageBoxA”這類API函數。其實我們有個很簡單的辦法將API攔截下來,并且快速找到比較地點/主算法地點。首先用OD加載目標程序,如果不能加載,用上面的方法“Attach”目標程序。然后,F9運行目標程序,并且有意讓目標程序顯示“ MessageBox”,然后切換到OD中,F12暫停,如
0041201F??|>??53????????????PUSH????EBX????????????????????; /Style
00412020??|.??57????????????PUSH????EDI????????????????????; |Title
00412021??|.??FF75 08?????? PUSH????[ARG.1]????????????????; |Text
00412024??|.??FF75 F4?????? PUSH????[LOCAL.3]??????????????; |hOwner
00412027??|.??FF15 A8534100 CALL????DWORD PTR DS:[4153A8]??; /MessageBoxA
0041202D??|.??85F6??????????TEST????ESI, ESI??????????????; 停在此處
0041202F??|.??8BF8??????????MOV????EDI, EAX
00412031??|.??74 05???????? JE??????SHORT 1551-CRA.00412038
F8單步一下,切換到“MessageBox”中,確認,被OD中斷。我們可以看見上面的代碼41201F處有一個“〉”,說明可以從某段代碼跳轉到此處,我們選擇41201F這一行,在“Information”欄看見一句“JUMP FROM 412003”,右鍵單擊,選擇“GO TO JUMP FROM 412003”。回到412003,一般都是條件跳轉,上面的內容就是比較的地方啦。:)
5、使用OD的TRACK功能
????
?? OD擁有強大的TRACK功能,在分析算法時十分有用。首先我們要設定OD的TRACK緩沖區大小,選擇Option/Debugging Option,在彈出的對話框中選擇TRACK頁,“Size of run track buffer(byte/record)”,緩沖區大小,當然約大約好。其他的設置在我以前的OLLYDBG.INI中都已經設置好了。然后,開啟目標程序,在DEBUG中選擇“Open or clear run track”。然后我們就可以用CTRL+F11或CTRL+F12開啟“Track into”和“Track over”了。當我們暫停程序的時候,可以用小鍵盤上的“+”,“-”,“*”來控制TRACK功能了。
“Track into”和運行類似,但是記錄所有指令以及寄存器變化。并且會自動進入所有的CALL中。
“Track over”和“Track into”類似,但是不進入CALL
“+”用來顯示TRACK緩沖區中的下一條指令
“-”用來顯示TRACK緩沖區中的上一條指令
“*”用來發返回當前指令
6、不是技巧的技巧
?? 當你遇到花指令的時候一定會很頭痛。但是如果你用OD進行分析的時候就會輕松得多。OD會自動標識出無效指令,即花指令。如果OD沒有正確識別,你還可以用CTRL+↑/↓來單個 字節的移動。可以很有效的識別出花指令的所在。
總結
以上是生活随笔為你收集整理的转Draren总结的ollydbg v1.09d 中文版使用说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电商api数据接口,淘宝item_cat
- 下一篇: kotlin——数组(增删改查)、has