iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0

GDB

GDB(GNU Debugger)常被用於除錯、檢視程式執行流程、以及逆向工程中分析二進位檔案。GDB 支援多種語言(如 C、C++),能在多種平台上運行。當 source code 不可得時。透過反組譯分析執行檔,以了解程式行為。

常用功能:

  • 程式除錯:
    能夠動態調試運行中的程式,逐行分析程式碼或二進位檔。
  • 設置斷點:
    在指定的程式行數或函式處暫停程式執行,以檢查變數和內部狀態。
  • 檢視記憶體與暫存器:
    可以檢查程式運行中的記憶體內容和 CPU 暫存器值,有助於了解程式的內部運行。

安裝 GDB

在 Linux 系統中,GDB 可以直接透過系統的套件管理器安裝:

sudo apt install gdb

常用的指令

  • 啟動 GDB 並載入程式:
gdb ./[檔案名稱]
  • 設置斷點在 main 函式:
break main
  • 執行程式並暫停在斷點:
run
  • 查看暫存器內容:使用 info registers 查看當下所有暫存器的資訊。

https://ithelp.ithome.com.tw/upload/images/20241002/20169462YF19DAil57.png

  • 查看暫存器中的數值:繼續執行程式並使用 print $eax 查看 eax 暫存器中的數值。

https://ithelp.ithome.com.tw/upload/images/20241002/20169462VZhAC7mF1X.png

  • q 離開 gdb

利用這些來進行今天的 Lab 吧

Lab - GDB baby step 1
https://ithelp.ithome.com.tw/upload/images/20241002/20169462Y7SwWDoxIq.png

題目給了一個檔案,先用 file [檔案名稱],來查看有關檔案的資訊。可以看到這是一支可執行檔

https://ithelp.ithome.com.tw/upload/images/20241002/20169462mkgApLmcae.png

使用 info functions 來查看有哪些函式。可以看到裡面有一個 main,這是主程式。

https://ithelp.ithome.com.tw/upload/images/20241002/20169462Wu15uDtIQF.png

接下來用 ddisassemble main 的指令來看看反組譯後的 main 函式。可以看到出現跟昨天我們的主題組合語言的內容,其中 <+15> 那行的 eax 暫存器,題目說他把 flag 放在那邊了。mov $0x86342,%eax0x86342 這個值賦予 eax 暫存器。

https://ithelp.ithome.com.tw/upload/images/20241002/201694622RIZNxgOZT.png

依照題目敘述,把 0x86342 這個值轉換成 10 進制就是我們想要的答案。用 picoCTF{} 的格式包起來就是 flag 惹

https://ithelp.ithome.com.tw/upload/images/20241002/20169462SDWWwx9Heq.png

今天的練習就到這邊,以下是參考資料,請搭配服用:

gdb 筆記
gdb 指令
GDB 使用教學

內文如有錯誤,還請不吝指教~


上一篇
Day17 - [Reverse] 組合語言
下一篇
Day19 - [Forensics] 隱寫術
系列文
新手村預備,CTF 小菜雞跌跌撞撞的旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言