滲透之OllyDbg逆向分析動態調試工具使用


文章目錄

  • 一.OllyDbg界面介紹和配置
  • 二.經常使用快捷鍵
  • 三.OllyDbg動態爆破軟件演示
  • 四.總結

PS:本文參考了B站漏洞銀行、安全網站和參考文獻中的文章(詳見參考文獻),並結合本身的經驗和實踐進行撰寫,也推薦你們閱讀參考文獻,在此感謝這些大佬們。git

作者的github資源:
軟件安全:https://github.com/eastmountyxz/Software-Security-Course
其余工具:https://github.com/eastmountyxz/NetworkSecuritySelf-study
逆向分析:https://github.com/eastmountyxz/Reverse-Analysis-Case

一.OllyDbg界面介紹和配置

OllyDbg是一個動態追蹤工具,將IDA與SoftICE結合起來的思想,Ring 3級調試器,很是容易上手,是當今最為流行的調試解密工具之一。它還支持插件擴展功能,是目前最強大的調試工具之一。shell

OD和IDA能夠說是逆向分析的“倚天”和“屠龍”,一個動態分析,一個靜態分析。數據庫

在這里插入圖片描述

該系列文章參考B站漏洞“游戲逆向交流”大佬的視頻,主要內容包括:編程

  • OllyDbg界面介紹和配置
  • 經常使用快捷鍵
  • OllyDbg基本操做
  • 經常使用斷點INT 3斷點原理解析
  • INT 3斷點的反調試與反反調試
  • 經常使用斷點之硬件斷點原理解析
  • 經常使用斷點以內存斷點原理解析
  • 經常使用斷點之消息斷點原理解析
  • 經常使用斷點之條件斷點原理解析
  • 內存訪問一次性斷點和條件記錄斷點
  • 插件
  • Run trace 和Hit trace
  • 調試符號
  • OllyDbg的常見問題

推薦你們學習,參考網址:https://www.bilibili.com/video/BV1cE411f7sE

 

OllyDbg是逆向分析經常使用的調試工具,打開主界面以下圖所示,包括反匯編窗口、寄存器窗口、信息窗口、數據窗口、堆棧窗口。

  • 常見動態調試工具:OllyDbg、WinDbg、x64Dbg
  • 經常使用靜態調試工具:IDA

在這里插入圖片描述

若是咱們打開的界面很亂像下圖同樣,能夠點擊頂部快捷鍵C,而后主窗口最大化便可優化布局。

在這里插入圖片描述

在這里插入圖片描述

接着隨便打開一個EXE程序,顯示以下圖所示:

在這里插入圖片描述

 

下面先講解各個窗口的含義:

  • 反匯編窗口: 顯示被調試程序的反匯編代碼,包括地址、HEX數據、反匯編、注釋
  • 寄存器窗口: 顯示當前所選線程的CPU寄存器內容,點擊標簽可切換顯示寄存器的方式
  • 信息窗口: 顯示反匯編窗口中選中的第一個命令的參數及跳轉目標地址、字符等
  • 數據窗口: 顯示內存或文件的內容,右鍵菜單可切換顯示方式
  • 堆棧窗口: 顯示當前線程的堆棧,記錄傳遞的參數或局部變量
  • 子窗口的快捷方式

在這里插入圖片描述

接着補充界面選項知識點,點擊 “選項” -> “界面”,設置UDD路徑和插件路徑。

在這里插入圖片描述

UDD路徑用於保存咱們調試的信息。

在這里插入圖片描述

插件路徑包含了各類插件,而且能夠直接使用。

在這里插入圖片描述

若是你想選中一個EXE文件,右鍵直接可以用OllyDbg打開,怎么設置呢?

在這里插入圖片描述

點擊 “選項” -> “添加到瀏覽器”,添加OllyDbg到系統資源管理器菜單。

在這里插入圖片描述

若是咱們每次運行OD都提示管理員權限運行,則能夠進行快捷鍵簡單的設置。

在這里插入圖片描述

設置方式以下:兼容性中選擇“以管理員身份運行此程序”。

在這里插入圖片描述

 


二.經常使用快捷鍵

下面簡單講解經常使用的快捷鍵調試方式。

F2:設置斷點
設置斷點,只要在光標定位的位置按下F2鍵便可,再按一次F2鍵會刪除斷點。以下圖所示的紅色位置,程序運行到此處會暫停。

在這里插入圖片描述

 

F9:運行
按下F9鍵運行程序,若是沒有設置相應的斷點,被調試的程序直接開始運行。

在這里插入圖片描述

 

F8:單步步過
單步步過,每按一次這個按鍵,將執行反匯編窗口中的一條指令,遇到CALL等子程序不進入其代碼。

在這里插入圖片描述

 

F7:單步步入
單步步入,功能通單步步過(F8)相似,區別是遇到CALL等子程序時會進入其中,進入后首先停留在子程序的第一條指令上。以下圖進入CALL子程序。

在這里插入圖片描述

CALL表示進入函數,RETN表示返回。

在這里插入圖片描述

 

F4:運行到選定位置
運行到選定位置,做用就是直接運行到光標所在位置處暫停。好比光標在0x00401034位置,咱們接着從0x00401027運行,這會直接跳轉到光標處。當咱們調試過程當中遇到循環,能夠調至光標跳過循環。

在這里插入圖片描述

 

CTRL+F9:執行到返回
執行到返回,按下此鍵會執行到一個返回指令時暫停,經常使用於從系統領空返回到咱們調試的程序領空。在調試程序時,按下CTRL+F9會一直運行程序,直到一個RETURN返回,好比咱們進入下圖所示的子程序,會運行至RETN 10。

在這里插入圖片描述

再在RETN 10位置按下F8,則會返回以下圖所示的位置,執行完CALL函數進入下一句。

在這里插入圖片描述

 

CTRL+F2:從新開始
當程序想從新調試時,按下CTRL+F2便可。

ALT+F9:執行到用戶代碼
執行到用戶代碼,從系統領空快速返回咱們調試的程序領空。

在這里插入圖片描述

 


三.OllyDbg動態爆破軟件演示

下面以《加密與解密》的“TraceMe.exe”程序為例。
程序下載地址:https://github.com/eastmountyxz/Reverse-Analysis-Case

在這里插入圖片描述

當咱們輸入錯誤的用戶名和序列號,點擊“Check”按鈕會顯示輸入錯誤。

在這里插入圖片描述

接下來咱們須要用OD爆破,該程序的基本流程以下圖所示,只有輸入正確的用戶名和序列號才能顯示正確對話框。

在這里插入圖片描述

接着經過OD打開該程序,它會自動定位到模塊入口點0x004013A0位置。做者github資源提供了各類OD版本供讀者使用。

在這里插入圖片描述

 

第一步,首先按下F9程序就會運行起來,而且彈出對話框

在這里插入圖片描述

 

第二步,咱們須要知道輸入對話框輸入值的函數都有哪些
點擊 “API斷點設置工具” -> “經常使用斷點設置”。

在這里插入圖片描述

勾選獲取對話框的輸入值的兩個函數“GetWindowTextA”和“GetDlgItemTextA”,這意味着給這兩個函數下斷點,當程序運行到某個函數即會中止。若是讀者不肯定對應的函數,能夠勾選全部的函數。

在這里插入圖片描述

 

第三步,輸入用戶名和序列號並點擊“Check”按鈕
此時程序進入0x75CA4390位置,而且顯示調用GetDlgItemTextA函數。

在這里插入圖片描述

咱們先按下F2將斷點去掉,再按下F9執行代碼,能夠看到“序列號錯誤,再來一次!”的彈框。從而證實咱們剛才的斷點是有效果的。

GetDlgItemTextA的四個參數:對話框句柄,控件標識(ID號),緩沖區指針,緩沖區最大字符數,參考Win32.API手冊。

在這里插入圖片描述

接着咱們再勾選“GetDlgItemTextA”函數,再點擊“Check”按鈕,它會繼續定位到0x75CA4390位置,以下圖所示。

在這里插入圖片描述

在這里插入圖片描述

 

第四步,接着按下Ctrl+F9執行到返回位置。
此時顯示地址0x75CA43C1。

在這里插入圖片描述

 

第五步,再按下F8鍵執行返回
此時咱們看到了GetDlgItemTexeA函數執行的位置,它會返回調用函數的下一行代碼,注意是下一行。咱們程序是有兩個對話框值,因此會有兩個GetDlgItemTexeA函數的調用。

在這里插入圖片描述

接着咱們繼續按F8往下走,這兩個值獲取完成,接下來應該會是計算序列的過程,再進行判斷是否正確。

在這里插入圖片描述

繼續往下走,來到0x004011E4位置,咱們能夠看到右上角EDX和EAX的值就是咱們輸入的“eastmount”和“123456”。同時,右下角顯示兩個值都已經壓到棧里面了。

  • EAX:123456
  • EDX:eastmount

在這里插入圖片描述

 

第六步,訪問TraceMe.00401340函數
咱們能夠猜想調用的“call TraceMe.00401340”函數是作判斷,並添加以下注釋。但也可能不是,咱們在進行軟件逆向分析或爆破時,一般須要依靠邏輯能力和編程能力來推測。

在這里插入圖片描述

按下F7進入該程序,位置0x00401340。

在這里插入圖片描述

再按F8執行,能夠發現這里存在一個循環,判斷輸入的值是否與它原始的值一致。

在這里插入圖片描述

循環完以后,繼續執行能夠看到一些序列號“123456”的判斷信息。

在這里插入圖片描述

最終它會返回一個值放到EAX中,該值等於0,而后繼續執行返回該值。

在這里插入圖片描述

返回值就是0,而后繼續執行。

在這里插入圖片描述

 

第七步,跳轉函數分析
若是這個函數就是判斷函數的話,那么下面這個跳轉極可能就是關鍵跳轉。就是咱們須要修改的跳轉,利用其來進行爆破。位置:0x004011F5

在這里插入圖片描述

增長斷點,接着按F8繼續運行。

在這里插入圖片描述

發現其直接跳轉至0x0040122E,而后提示“序列號錯誤,再來一次!”。

在這里插入圖片描述

再按下F9運行,后面果真彈出錯誤對話框,從而肯定上面為關鍵跳轉。

在這里插入圖片描述

 

第八步,按下Ctrl+F2從新運行程序
接着按F9執行程序,在彈出的對話框中輸入內容,點擊“check”。

在這里插入圖片描述

繼續按下F9運行程序跳轉到咱們剛剛下斷點的“關鍵跳轉”位置。

在這里插入圖片描述

關鍵步驟:修改匯編代碼,JE是實現跳轉,修改成JNZ不跳轉。

在這里插入圖片描述

繼續按F8執行,或者直接按下F9,能夠提示“恭喜你,成功”的對話框。這就是爆破的基本流程。

在這里插入圖片描述

 

第九步,保存爆破軟件
選擇修改的幾行內容,而后右鍵鼠標,點擊“復制到可執行文件”。

在這里插入圖片描述

選擇“TraceMe.exe”文件右鍵保存文件,如“TraceMe_PO2.exe”。

在這里插入圖片描述

保存成功后,隨便輸入用戶名和序列號,都提示成功!

在這里插入圖片描述

同時,該程序輸入長度還有一個判斷,咱們也能夠嘗試進行爆破。

在這里插入圖片描述

但其原理是什么呢?后續的文章咱們會繼續介紹。

 


四.總結

寫到這里,這篇文章就介紹完畢,但願您喜歡~

  • OllyDbg界面介紹和配置
  • 經常使用快捷鍵
  • OllyDbg動態爆破軟件演示

在這里插入圖片描述

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM