MediBangファイルフォーマットの解析(バイナリの部分抽出)

続きです。


レイヤー3のブロックの追加されたバイト数は、塗り絵の結果を見ると、0x70バイトとなっています。
そこでバイナリ数値の中から、0x70増加している数字を探しました。赤色で塗っているか箇所が、ちょうど0x70増えた数値です。おそらくこれらがデータ長になるかと思います。
最初に見つかるデータ長の前に、PACという文字列(水色塗り)がありますが、こちらはマジックナンバーかと思います。マジックナンバーPACを先頭に、空白、データ長、のように並んでいるのでしょう。

元々の絵では、レイヤー1から、3までは何も描いていないので、このPACから始まるバイナリデータも同じになるかと思います。
確認するため、まずは、PACのオフセットをstringsコマンドで抜き出します。

takk@deb8:~/Desktop$ strings -tx file-layer3.mdp | grep PAC
    528 PAC M
    675 PAC 
    6fd PAC 
    785 PAC 
takk@deb8:~/Desktop$ 

各オフセットを指定して、odコマンドでPACに続く数値も抽出しましょう。

takk@deb8:~/Desktop$ for i in 528 675 6fd 785;do od -tx1 -j 0x$i -N 10 -Ax file-layer3.mdp;done
000528 50 41 43 20 4d 01 00 00 01 00
000532
000675 50 41 43 20 88 00 00 00 00 00
00067f
0006fd 50 41 43 20 88 00 00 00 00 00
000707
000785 50 41 43 20 88 00 00 00 00 00
00078f
takk@deb8:~/Desktop$ 

PACに続くデータ長がわかったので、それぞれのバイナリを16進ダンプの形で抜き出します。

takk@deb8:~/Desktop$ od -tx1z -j 0x675 -N 0x88 -An -v file-layer3.mdp > no1
takk@deb8:~/Desktop$ od -tx1z -j 0x6fd -N 0x88 -An -v file-layer3.mdp > no2
takk@deb8:~/Desktop$ od -tx1z -j 0x785 -N 0x88 -An -v file-layer3.mdp > no3
takk@deb8:~/Desktop$ 

では、レイヤー1から3までが一致しているかdiffするためにVimを起動しましょう。

takk@deb8:~/Desktop$ vi -o no[123]

:windo difft


文字列が一部異なっていますが、それ以外のバイナリは一致しますので、予想は的外れではないようです。

続く。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA