OD使用笔记
Alt+F9: 直接從系統模塊飛回程序模塊
Ctrl+F9: 執行到當前函數的結尾
Ctrl+B: 搜索二進制字符串
F4: 執行到選中的語句處
F9: 運行
F12: 暫停
Shift+F2: 條件斷點(軟件斷點的一種)
軟件斷點,硬件斷點以及內存訪問斷點(一次只能設置一個):
內存斷點的利用:?
在數據上下的斷點,如果讀取或寫入該數據則會斷下來。
在內存窗口右鍵選Search,?
在ASCII上輸入內容,然后輸入搜索內容
搜索到后,找到地址
下內存斷點后點擊運行即可
下斷點的方法:
1. 命令方式
2. 搜索API設斷點:
給API設置斷點,一旦調用就會斷下
搜索機器碼
搜索Jmp命令
搜索命令
點擊Find即可找到了
按鈕事件斷點:
該斷點分不同語言不同情況
下面僅以易語言做例子:
易語言要在按下按鈕前,位于主模塊內搜索Binary String然后搜索FF 55 FC 5F 5E。就可以按鈕事件的call處斷下。
如何查看堆內存:
?或者直接d eax即可, 因為堆空間分配好后是從eax返回的
設置OD調試程序第一次中斷的時機:
有3種模式,可以是在進程啟動第一條啟動代碼處即System breakpoint或main函數的入口點。又或者WinMain處
?
?為被調試程序加上參數的方法:
可以在調試前便設置:
這樣添加的參數會在程序一開始就輸入
?
?如果程序已經調試了想要再給入參數:
這種方法加入參數實際上還是要重新調試程序,但也是一種方法
?
?調試運行中進程的方法:
?
?然后選中一個進程進行附著調試即可
?查看進程的內存映射方法:
選擇View->Memory或者直接點藍色的M圖標都可以看到內存映射
?查看線程和堆棧:
可以通過View->Threads來查看線程或者直接按藍色T按鈕。
?這個進程只有1個線程,一般復雜程序都有多個線程,選中一個線程右擊可以對其進行調度
?通過內存映射頁面可以獲取主線程堆棧的內存地址進而查看其內存內容
?調試DLL的方法:
dll是無法運行的,但Ollydbg使用一個叫loaddll.exe的虛擬程序加載被調試的dll。進入調試后dll會斷在DllMain函數入口處:
?如果希望調試dll內的函數, 可以按下F9使dll的初始化運行結束, OD又會被再次斷下:
?此時選擇Debug->Call DLL export:
?選擇你要調試的函數, 比如我調試的是ws2_32.dll我選擇了socket():
?輸入對應參數然后按下call即可:
?標準回溯跟蹤:
+: 回退到下一條指令的位置
-: 回退到上一條指令的位置
?調用堆棧跟蹤:
查看當前函數的調用序列:
?運行跟蹤:
選中一條代碼然后右擊,選擇Run Trace->Add selection。
?接著View->Run trace后獲取Trace窗口后繼續調試:
?就可以發現運行過的指令被記錄下來了。利用+和-可以上下挪動指令來動態獲取其寄存器的值。其中Run Trace的Back代表上第幾條指令,其中0代表當前指令。
?還有另外一種運行跟蹤的方式, Debug中首先選中Set Condition:
?這里會選擇追蹤的條件,比如我這里是EIP位于0x400000~0x402000之間就進行追蹤
?完成之后, 可以通過Trace into和Trace over來進行追蹤調試(其作用和Step into和Step over是一樣的, 區別僅僅是它會追蹤), 當然可以使用Ctrl+F11和Ctrl+F12熱鍵來方便操作:
?當然了它的效果和之前的方法是一樣的。
?異常處理:
對于惡意代碼的分析,異常能越過就越過能不處理就盡量不處理,因為我們的目的不是為了修bug。基于這個原則在Debug->Debug Options中的Exceptions選項頁中可以選擇忽略異常。這里忽略了基本上所有的異常。
如果遇到不得不處理的情況, 在OD中可以使用如下方法:
Shift+F7: 進入異常
Shift+F8: 跳過異常
Shift+F9: 運行異常處理程序
用OD分析一段十六進制shellcode:
把shellcode復制到如何一種十六進制編輯器上:
?選中后右擊->Edit:
?以16進制方式復制:
在OD內打開內存映射界面, 選擇類型為Priv的段,Priv類型的段是分配給進程的私有內存,可被多個進程共享:
?右擊后選中Set Access并賦予Full access權限,即讀寫執行都可以
?完成后選Dump:
Dump是進入該段查看其內存,選一段全為0并且足夠大的空間, 右擊后Binary->Binary copy:
?
?即可把shellcode復制過去,記住shellcode的首地址
?跳轉到shellcode首地址處,右擊后選擇New origin here將EIP指向它:
這樣就可以調試shellcode了,查看下機器碼是一模一樣的。
?
?日志功能:
日志記錄你執行過的操作,方法有View->Log或者直接按下藍色L按鈕即可
?幫助文檔:
?
?監視功能:
監視你寫得表達式
?比如這樣:
?OllyDump插件:
OllyDump可以把一個被調試的進程轉儲成PE文件, 在脫殼中比較常用:
?
?調試器隱藏插件使用: IsDebuggerPresent檢測, FindWindow檢測, 未處理異常欺騙以及OutputDebugString反OllyDbg調試等技術來實現對抗反調試技術
命令行:
BP 表達式[,條件]? # 設軟件斷點
BC 表達式 # 移除斷點
HW 表達式 # 設運行硬件斷點
BPX 標注 # 設置調用標注函數時的斷點
STOP/PAUSE # 暫停運行
RUN # 運行程序
G [表達式] # 運行到地址
S # Step-into
SO # Step-over
D 表達式 # 轉儲內存
轉儲內存, 即跳轉到指定內存位置
在命令行內使用命令dump(d)后接地址,即可在內存區顯示該位置內存內容
?
?(未完)
總結
- 上一篇: win10安装虚拟机vm遇到的坑
- 下一篇: 199的Eagle一点都不香了!这款Bi