---
# System prepended metadata

title: 程式安全 Reverse Homework Write-Up

---

# 程式安全 Reverse Homework Write-Up
## **[0x03] fifo**
首先使用readelf檢查是否有藏東西，看起來是沒有因此使用IDA直接跳到main做靜態分析
![](https://i.imgur.com/lAohLqA.png)
整個流程大概是fifo執行擋會去開檔/tmp/khodsmeogemgoe並且寫入一段data(byte_4040)使其成為執行檔，接下來透過fork()函數
執行/tmp/khodsmeogemgoe子程序，那首先先繼續trace父程序

父程序會新增資夾/tmp/bnpkevsekfpk3並且在資料夾裡面使用mkfifo()創建一個FIFO檔案aw3movsdirnqw後開檔在寫入一些data(byte_2020)

接下來使用IDA打開子程序可以看到/tmp/khodsmeogemgoe會去讀aw3movsdirnqw檔案裡的東西後並把FIFO檔移除並對讀到的資料做一些處理，如下圖
![](https://i.imgur.com/3pB4Nst.png)

從decompiler的結果就可以很輕易的看出a1是傳入的24byte資料，會對a1的每一byte做4次XOR，這4個XOR的對象分別是剛剛父程序傳給子程序的那一串data(byte_2020，因此直接去父程序找那串data，如下圖
![](https://i.imgur.com/UiL2X7k.png)

做完就可以的得到`FLAG{FIFO_1s_D1sGVsTln9}`了

比較要注意的是他是data讀到第65個的時後要從頭開始讀data，所以a1的第17byte要跟data[64]、data[0]、data[1]、data[2]做XOR

然後我是手動做的，並未寫script，所以沒有script檔。