Void. Empty. Null. Downoad

This challenge does not have a specific flag format.
PNG画像のようですが表示することができません。バイナリエディタで確認してみると、"89 50 4E 47"で始まっていますので、PNGフォーマットで間違いなさそうです。
 ADDRESS   00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F   0123456789ABCDEF
------------------------------------------------------------------------------
 00000000  89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52   臼NG........IHDR
 00000010  00 00 02 9A 00 00 02 07 08 06 00 00 00 35 46 89   .............5F.
 00000020  13 00 00 00 04 67 41 4D 41 00 00 B1 8F 0B FC 61   .....gAMA..ア..��
PNGファイルシグネチャは必ず"89 50 4E 47 0D 0A 1A 0A"ですので間違いありません。IHDRチャンクを見てみましょう。
オフセットサイズ名称内容
0x00004Length00 00 00 0D
0x00044Chunk Type49 48 44 52(IHDR)
0x00084画像の幅
00 00 02 9A(666)
0x000C4画像の高さ
00 00 02 07(519)
0x00101ビット深度
08
0x00111カラータイプ
06
0x00121圧縮手法
00
0x00131フィルタ手法
00
0x00141インターレース手法
00
0x00154CRC35 46 89 13
Lengthからインターレース手法までは特に問題ないようです。CRCが正しいかどうか見てみましょう。下記のRubyコードでCRCを計算してチャンクデータを生成することができます。
# coding: UTF-8
require "zlib"

width, height = 666, 519
depth, color_type = 8, 6

# チャンクのバイト列生成関数
def chunk(type, data)
  [data.bytesize, type, data, Zlib.crc32(type + data)].pack("NA4A*N")
end

File.open("test_a.dat", "w") do |io|
  io.binmode
  io.write chunk("IHDR", [width, height, depth, color_type, 0, 0, 0].pack("NNCCCCC"))
end
これで計算してみると、CRCは"3F F4 FC 62"になります。CRCが誤っているようですので、該当箇所を修正して表示してみますが、まだ表示できません。次に怪しいのは画像の幅、高さですかね。

画像の幅、高さが合っているかIDATチャンクを展開して確認してみましょう。IDATデータはdeflate圧縮されていますので、次のRubyコードでIDATデータ部分のみ展開して別ファイルに保存します。
# coding: UTF-8
require "zlib"

File.open("m100.png", "r") do |io|
  io.binmode
  io.seek(0x73, IO::SEEK_SET)
  File.open("test_b.dat", "w") do |io2|
    io2.binmode
    io2.write Zlib::Inflate.inflate(io.read(0xfdf2))
  end
end
PNGのデータは1ラインごとに先頭に圧縮タイプを表すFilter Typeが設定されています。このFilter Typeの間隔を数えれば画像の幅が分かります。
 ADDRESS   00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F   0123456789ABCDEF
------------------------------------------------------------------------------
 00000000  00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF   ................
 00000010  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF   ................
Filter Typeについては以下のサイトが分かりやすいです。
http://hoshi-sano.hatenablog.com/entry/2013/08/18/113434

Filter Typeを調べると、アドレス0000、0a71(=2673)、14e2(=5346)、・・・の位置に出現します。ということで、画像の幅は2672(=0a70)バイトであることが分かります。画像データサイズが1472823バイトなので、画像の高さは1472823÷2673=551(=0227)バイトになります。

画像の幅、高さが分かりましたので、IHDRチャンクを修復してみましょう。
1バイトを画像の1ピクセルと仮定して、ビット深度8ビット、カラータイプ0(グレースケール)でIHDRチャンクを生成します。
 ADDRESS   00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F   0123456789ABCDEF
------------------------------------------------------------------------------
 00000000  89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52   臼NG........IHDR
 00000010  00 00 0A 70 00 00 02 27 08 00 00 00 00 87 30 DA   ...p...'......0レ
 00000020  75 00 00 00 04 67 41 4D 41 00 00 B1 8F 0B FC 61   u....gAMA..ア..��
赤字の箇所が修正した箇所になります。
修正した画像ファイルを表示すると、下図のとおり表示されました。
m100_3

したがって、フラグは、
Flag:s1z3_d03s_ma773r_baby
です。

LHAとZIP―圧縮アルゴリズム×プログラミング入門
山崎 敏
ソフトバンククリエイティブ
2003-12