因為賽後才寫,比賽早就關了,所以沒圖
丟個 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

驗證成功
