ファイル flag.png
が与えられた。
identify -verbose
コマンドで調べると、以下の出力がされた。
A file flag.png
was given.
Investigating the file using identify -verbose
command from
flag.png
には IDAT
チャンクが1個しかないことがわかった。
そこで、
その結果、7,079,040バイトのデータが得られ、これはIHDR
チャンクの値から計算できる大きさと同じだった。
展開後のデータには余計なデータは無いようなので、展開前のデータを調べることにした。
Zlib Inflate の前に Drop bytes を追加してデータの最後を削り、Zlib Inflate がエラーにならない最小の Start の値を探した。
その結果、45370 まではエラーにならないことがわかった。
Checking with flag.png
contains only one IDAT
chunk.
Seeing this, I used
This resulted in 7,079,040 bytes of data. This size is the same as the expected size calculated from values in the IHDR
chunk.
Finding that the extracted data doesn't have extra part, I moved to investigate data before extracting.
I added "Drop bytes" before "Zlib Inflate" to remove the last part of data and searched for the minimum value of "Start" that doesn't make "Zlib Inflate" throw an error.
As a result, I found that it doesn't cause error until the value becomes less than 45370.
Drop bytes, Drop bytes, Zlib Inflate - CyberChef
そこで、この Drop bytes を Take bytes に変え、この無くても Zlib Inflate がエラーにならない部分のデータを取り出した。
After that, I replace this "Drop bytes" with "Take bytes" to extract this data removing which doesn't make "Zlib Inflate" throw an error.
Drop bytes, Take bytes - CyberChef
取り出したデータを
これらの文字を書き起こし、FLAG{}
を加えることで、flagが得られた。
I tried opening extracted data with
I obtained the flag by writting down these characters and adding FLAG{}
.