---
# System prepended metadata

title: '[[Rev] be-quick-or-be-dead-1 [200]](https://bamboofox.cs.nctu.edu.tw/courses/6/challenges/119)'

---

# [[Rev] be-quick-or-be-dead-1 [200]](https://bamboofox.cs.nctu.edu.tw/courses/6/challenges/119)

1. 存檔案到虛擬機
![](https://i.imgur.com/6Mxc66X.png)
 
2. 使用IDA Pro開啟並按F5彙編成C黨
![](https://i.imgur.com/cI6qT1r.png)

3. 雙擊方法可以打開裡面內容
![](https://i.imgur.com/QCVcFBU.png)
![](https://i.imgur.com/lISJBeq.png)
![](https://i.imgur.com/E1aGxjH.png)
![](https://i.imgur.com/a1HB8Qr.png)
▲ 從上得知在獲取 print_flag 之前，我們需要運行 get_key 函數。因此，要獲取密鑰，我們需要運行 calculate_key 函數。


4. GDB是什麼
   - [GDB介紹](https://b8807053.pixnet.net/blog/post/336154079-%5B%E8%BD%89%E8%B2%BC%5Dgdb-%E4%BB%8B%E7%B4%B9)
> GDB 全稱“GNU symbolic debugger”，從名稱上不難看出，它誕生於GNU 計劃（同時誕生的還有GCC、Emacs 等），是Linux 下常用的程序調試器。發展至今，GDB 已經迭代了諸多個版本，當下的GDB 支持調試多種編程語言編寫的程序，包括C、C++、Go、Objective-C、OpenCL、Ada 等。實際場景中，GDB 更常用來調試C 和C++ 程序。
>> Windows 操作系統中，人們更習慣使用一些已經集成好的開發環境（IDE），如VS、VC、Dev-C++ 等，它們的內部已經嵌套了相應的調試器。

> ![](https://i.imgur.com/05KwELb.png)
  ▲ GDB的吉祥物：弓箭魚

> 總的來說，借助GDB 調試器可以實現以下幾個功能：
> 1. 程序啟動時，可以按照我們自定義的要求運行程序，例如設置參數和環境變量；
> 2. 可使被調試程序在指定代碼處暫停運行，並查看當前程序的運行狀態（例如當前變量的值，函數的執行結果等），即支持斷點調試；
> 3. 程序執行過程中，可以改變某個變量的值，還可以改變代碼的執行順序，從而嘗試修改程序中出現的邏輯錯誤。

5. 開始使用gdb
![](https://i.imgur.com/VgMAUXy.png)
* 設置斷點 -> 設在main(從main開始執行)
    * ![](https://i.imgur.com/CUPEsrt.png)
* 開始執行 -> 會先跑到main的一開始
    * ![](https://i.imgur.com/RrWfKwl.png)
    ![](https://i.imgur.com/7klTgrn.png)

* 如上所述，要獲取print_flag，我們需要先運行get_key函數。在get_key執行之後，我們調用函數print_flag

* 使用命令```call (int)get_key()```或```call get_key()```來調用key函數。
    * ![](https://i.imgur.com/4uPHNA7.png)

* 使用命令```call (int)print_flag()```成功取得flag。
![](https://i.imgur.com/burloC0.png)

6. 此題flag需要刪除後面的值
![](https://i.imgur.com/cCWCU6b.png)
* flag: picoCTF{why_bother_doing_unnecessary_computation}
