MFCTF 2021 – ⒸⓄⓋⒾⒹ-①⑨

因為賽後才寫,比賽早就關了,所以沒圖
丟個 watame 鎮樓


題目給了一個 program “task”
作為 reverse 題,第一件事就是丟進 ida

檢查個 main function ,前面大部分都是在處理使用者輸入
當使用者輸入達到 19 個字元就檢查使用者輸入的答案
77 行的 if 看起來像判斷輸入正不正確
所以 76 行呼叫的 function 應該是檢查輸入 ( check_flag_is_correct 是自己取的)

function 內部長這樣 ( variable 的重命名都是自己取的 )

 i 從0開始一直到 25,對輸入字串的每個字元做 xor,且要與 target 字串相同
isCorrect 預設是 1,且每次前面的 == 運算完後還要跟 前一次運算的結果 and
也就代表 str 與 i XOR 後要完全等於 target

看一下 target 的值

恩….. ida 不容易看清楚

換個 readelf

target 的 hex 值就是 0x4010 ~0x4027  這個區間

簡單的寫個 script

target = "414851307f3031337156623b613e72782325604c7921237c65"

for i in range(0,len(target)//2):  # target 兩個字為一個 byte,所以 // 2
    print(chr(int(target[:2],16) ^ i),end="")
    target = target[2:]Code language: PHP (php)

得到密碼 : 574y_h0m3|w34r_m45k

驗證成功