[TDOHConf] Challenge #11: fuzz macOS 算號器
這一題好像沒人解出來, 想說大家快破台了這樣不行, 所以結算成績前一個小時臨時加了這一題。 首先這個題目點進來看到是一張圖片連結,不過點開基本上是個損毀的圖片: 接著可以把這個圖片載下來,然後用 file 指令看看這是什麼鬼: 會發現其實是 mach-O 格式的 macOS 執行程式,接著你可以用反組譯器去看這隻執行程式,我這邊用的是 IDA Pro,不過如果你手上沒有 IDA Pro 其實拿免費版的 IDA 也可以看程式邏輯流程圖啦...XD 記憶體變數排列圖: 第一個流程圖部分你可以看到它用 scanf 把文字儲存在區域變數 ebp+0x20 處,接著取出第一個 char 值去做右移一次、左移一次去判斷是否等於自己當前值 - 1,其實這很明顯就是在判斷奇數啦XD(比方說 31:(31 /2) * 2 = 30 正好就會是 31-1,因為有 1 在除法乘法時候被捨去了) 第二個流程圖去比對 var_11 是否等於 var12+3,也就是第二個 char 的值必須為第一個值 +3。 第三個流程圖則是:var_10 必須為 var_11 + 0x0e,第三個 char 必須為第二個 + 0x0e(14) 第四個流程圖: var_f 則是判斷第四個 char 是否為 null(字串結尾)所以可以確定 input 必須為三個字的長度。 所以算號器算法都出來了,接著就是寫腳本去爆啦~ 寫個三層 for 迴圈,然後去暴力跑 ASCII 整張表可顯示字元部分,然後找出匹配上述三個規則的字串: 你會發現有很多符合規則的三個字元結果,這些結果都是剛剛那支算號器認證通過的字串XD 所以得一個個去帶,最後 flag 會是 TDOHCONF{ADR} 我知道還有另一組大家很感興趣的是在: 抱歉,這一組字串從頭到尾都沒被用到XD 純粹騙你用的(誰說擺了這個字串就一定要用呢?:P)