GDB(GNU Debugger)常被用於除錯、檢視程式執行流程、以及逆向工程中分析二進位檔案。GDB 支援多種語言(如 C、C++),能在多種平台上運行。當 source code 不可得時。透過反組譯分析執行檔,以了解程式行為。
在 Linux 系統中,GDB 可以直接透過系統的套件管理器安裝:
sudo apt install gdb
gdb ./[檔案名稱]
break main
run
info registers
查看當下所有暫存器的資訊。print $eax
查看 eax 暫存器中的數值。q
離開 gdb利用這些來進行今天的 Lab 吧
Lab - GDB baby step 1
題目給了一個檔案,先用 file [檔案名稱]
,來查看有關檔案的資訊。可以看到這是一支可執行檔
使用 info functions
來查看有哪些函式。可以看到裡面有一個 main
,這是主程式。
接下來用 ddisassemble main
的指令來看看反組譯後的 main
函式。可以看到出現跟昨天我們的主題組合語言的內容,其中 <+15> 那行的 eax
暫存器,題目說他把 flag 放在那邊了。mov $0x86342,%eax
把 0x86342 這個值賦予 eax
暫存器。
依照題目敘述,把 0x86342 這個值轉換成 10 進制就是我們想要的答案。用 picoCTF{} 的格式包起來就是 flag 惹
今天的練習就到這邊,以下是參考資料,請搭配服用:
內文如有錯誤,還請不吝指教~