Odrrere這題拿到的原圖如下
參考先前CTF png-uncorrupt writeup來了解png的結構
PNG會由下圖的格式組成
分為四個部分DATA長度(4Bytes)、資料類型(4Bytes)、DATA、Checksum(4Bytes)
或是IEND的形式只有三個部分
例如開頭0000 00b8為資料長度184 Bytes
4944 4154 是IDAT – Chunk Type
後面一大串則是DATA
最後4 Bytes 810e 463b為Checksum
解題過程
剛拿到圖片第一眼明顯此題是要修復PNG
基於先前的writeup 先檢查CRC是否有錯誤
此部分可以用PNGchecksum工具檢查
但是仍然沒異狀
因此跑pngcheck -vvf odrrere.png來檢查是否有資料錯誤
發現在第二個IDAT的部分有error
因此過程中也猜測Error是否DATA超出length但也不是
後來修修補補某些Byte拿到了下面破碎的圖
其實當下沒有想到是圖片IDAT的順序錯誤所以先拼拼湊湊補了起來
更好的解法可以參考asis-ctf-quals-2016-odrrere
將13個IDAT用hexedit依照正確順序0,12,8,4,9,10,6,7,3,5,2,11,1擺放後Flag顯而易見
搶先發佈留言