- C++反匯編與逆向分析技術揭秘(第2版)
- 錢林松 張延清
- 1555字
- 2021-09-27 17:05:07
1.3 調試工具OllyDbg
在軟件的開發過程中,程序員會使用一些調試工具,以便高效地找出軟件中存在的錯誤。而在逆向分析領域,分析者也會利用調試工具來分析軟件的行為并驗證分析結果。由于操作系統提供了完善的調試接口,所以通過各類調試工具可以非常方便靈活地觀察和控制目標軟件。在使用調試工具分析程序的過程中,程序會按調試者的意愿,以指令為單位執行。調試者可以隨時中斷目標的指令流程,以觀察相關計算結果和當前設備狀況,也可以隨時執行程序的后續指令。像這樣使用調試工具加載程序并一邊運行一邊分析的過程,我們稱之為動態分析。
對于有源代碼的程序,我們使用Visual Studio 2019進行調試,它可以將C++源碼反匯編;對于無源碼的程序,我們使用OllyDbg進行調試分析,它的調試功能十分強大。Visual Studio 2019的調試功能相對簡單,同時有源碼作對照,故不過多講解。OllyDbg的默認功能界面如圖1-20所示。

圖1-20 OllyDbg的默認功能界面
圖1-20中的標號說明如下。
1:匯編代碼對應的地址窗口。
2:匯編代碼對應的十六進制機器碼窗口。
3:反匯編窗口。
4:反匯編代碼對應的注釋信息窗口。
5:寄存器信息窗口。
6:當前執行到的反匯編代碼的信息窗口。
7:數據窗口,數據所在的內存地址。
8:數據窗口,數據的十六進制編碼信息。
9:數據窗口,數據對應的ASCII碼信息。
10:棧窗口,棧地址。
11:棧窗口,棧地址中存放的數據。
12:棧窗口,對應的說明信息。
熟悉了各窗口視圖的功能之后,我們來進一步了解OllyDbg的操作方法。首先介紹一下OllyDbg的快捷鍵。掌握各個快捷鍵,可以提高分析效率。OllyDbg的基本快捷鍵及其功能如表1-1所示。
表1-1 OllyDbg的基本快捷鍵及其功能

通過實際操作演練,我們可以進一步熟悉OllyDbg。調試一個簡單的“Hello world”
程序,將對話框標題“Hello world”修改為“I Like C++”,步驟如下。
1. 加載可執行程序
選擇調試程序的方式有以下3種。
- 使用快捷鍵F3選擇要調試程序的路徑。
- 在菜單選項中(“文件”→“打開”)選擇調試程序路徑。
- 將OllyDbg加入系統資源管理菜單中,鼠標右鍵“打開”。
依次選擇OllyDbg菜單“選項”→“添加到瀏覽器”→“添加OllyDbg到系統資源管理菜單”→“完成”,即可將OllyDbg加入系統資源管理菜單中,如圖1-21所示。

圖1-21 初識OllyDbg
在圖1-21中,代碼運行到地址0x00401000處,對應反匯編指令PUSH 0,此匯編指令對應的機器碼為6A 00(匯編指令對應的機器碼可查詢Intel的指令幫助手冊)。在OllyDbg的注釋窗口中,已經分析出此匯編指令的含義:OllyDbg根據CALL指令的地址,得知這個函數的首地址為API MessageBoxA的首地址,進而分析出對應的參數個數和參數功能。
2. 查看API MessageBoxA各參數的功能
查看MSDN文檔,獲取MessageBoxA各參數的功能,找到彈出對話框的標題參數(PUSH Hello.00403000),此參數保存了字符串“Hello world”的首地址。
3. 定位數據
選中數據窗口,使用快捷鍵Ctrl+G,彈出數據跟隨窗口。輸入查詢地址0x00403000,單擊“確定”快速定位到該地址處。
4. 修改數據
找到要修改數據的地址對應的HEX數據,在圖1-22中,地址0x00403000對應的十六進制數據為0x48。雙擊HEX數據窗口中“48”處,彈出對應的編輯數據對話框,如圖1-23所示。

圖1-22 初識數據窗口

圖1-23 數據編輯對話框
去掉“保持大小”的勾選,可向后修改數據。在ASCII文本編輯框中,輸入“I Like C++”,由于C\C++中字符串以00結尾,需要將字符串最末尾的數據修改為00。選擇十六進制編碼文本框,在末尾處插入00。單擊“確定”按鈕,完成對字符串的修改。
5. 調試程序
使用快捷鍵F8單步調試運行,連續按4次F8鍵,單步運行4條匯編指令,觀察棧窗口變化,如圖1-24所示。函數MessageBoxA所需參數都已被保存在棧中。按快捷鍵F7可跟進到函數MessageBoxA的實現代碼中,這個API為一個間接調用,須再次按快捷鍵F7,程序運行到函數MessageBoxA的首地址處。MessageBoxA的實現代碼較多,不適合初學者學習,使用快捷鍵Alt+F9返回到用戶代碼處,MessageBoxA運行結束,彈出運行結果對話框,查看是否修改成功。

圖1-24 棧窗口信息
如圖1-25所示,標題已經修改成功。到此,OllyDbg的初識之旅就結束了。本節我們初步認識了OllyDbg,在后面的章節中,還會進一步介紹它的強大功能。

圖1-25 運行結果
- Clojure Programming Cookbook
- 大學計算機基礎實驗教程
- 動手玩轉Scratch3.0編程:人工智能科創教育指南
- 深入實踐Spring Boot
- Mastering Ubuntu Server
- TypeScript圖形渲染實戰:基于WebGL的3D架構與實現
- Java軟件開發基礎
- MySQL從入門到精通(軟件開發視頻大講堂)
- 從零開始學C#
- 移動增值應用開發技術導論
- PrimeFaces Blueprints
- 從零開始學Android開發
- Delphi開發典型模塊大全(修訂版)
- Drupal 8 Development:Beginner's Guide(Second Edition)
- Python預測分析與機器學習