絵の練習でMediBang Paint Proを使っていますが、初めて見る拡張子なので、どんなフォーマットなのか確認していきたいと思います。
まずは、MediBangを起動して、A4サイズの白いキャンバスのまま保存します。
ファイル名は、file1.mdpとしました。
そしてしばらく待ってから、ファイル名を変えて(file2.mdp)保存します。
時間を置いて、2つのファイルに保存したのは、データの中にタイムスタンプが存在するか確認するためです。
まずは、ls -lで、ファイルサイズを確認。
takk@deb8:~/Desktop$ ls -l file[12].mdp -rw-r--r-- 1 takk takk 1195 3月 12 2017 file1.mdp -rw-r--r-- 1 takk takk 1195 3月 12 2017 file2.mdp takk@deb8:~/Desktop$
同じサイズのようです。
次に、テキストかバイナリか確認します。
takk@deb8:~/Desktop$ file file[12].mdp file1.mdp: data file2.mdp: data takk@deb8:~/Desktop$
textではなくdataと表示されましたので、バイナリもしくは、テキストとバイナリの混在のようです。
バイナリ差分があるか確認しましょう。cmpを使います。
takk@deb8:~/Desktop$ cmp file[12].mdp file1.mdp file2.mdp 異なります: バイト 269、行 4
差分がありました。時間をおいて保存しただけなのに差分があるということは、タイムスタンプが埋め込まれている可能性が大きいです。
cmpはデフォルトで8進表示なので、これ以上cmpで調べても面倒ですので、バイナリをテキストに変換し、diffをかけることにします。
odを使って16進ダンプのテキストに変換。
takk@deb8:~/Desktop$ od -tx1z file1.mdp > 1.txt takk@deb8:~/Desktop$ od -tx1z file2.mdp > 2.txt
変換したテキストをdiffします。
takk@deb8:~/Desktop$ diff -C1 [12].txt *** 1.txt 2017-03-12 12:24:27.180582421 +0900 --- 2.txt 2017-03-12 12:24:31.970976457 +0900 *************** *** 16,21 **** 0000360 20 20 3c 55 70 64 61 74 65 54 69 6d 65 20 74 69 > <UpdateTime ti< ! 0000400 6d 65 3d 22 31 34 38 39 32 38 38 38 33 38 22 20 >me="1489288838" < 0000420 74 69 6d 65 53 74 72 69 6e 67 3d 22 32 30 31 37 >timeString="2017< ! 0000440 2d 30 33 2d 31 32 54 31 32 3a 32 30 3a 33 38 22 >-03-12T12:20:38"< ! 0000460 20 72 65 76 3d 22 31 22 20 2f 3e 0a 20 20 20 20 > rev="1" />. < 0000500 3c 54 68 75 6d 62 20 77 69 64 74 68 3d 22 31 38 ><Thumb width="18< --- 16,21 ---- 0000360 20 20 3c 55 70 64 61 74 65 54 69 6d 65 20 74 69 > <UpdateTime ti< ! 0000400 6d 65 3d 22 31 34 38 39 32 38 38 38 35 37 22 20 >me="1489288857" < 0000420 74 69 6d 65 53 74 72 69 6e 67 3d 22 32 30 31 37 >timeString="2017< ! 0000440 2d 30 33 2d 31 32 54 31 32 3a 32 30 3a 35 37 22 >-03-12T12:20:57"< ! 0000460 20 72 65 76 3d 22 32 22 20 2f 3e 0a 20 20 20 20 > rev="2" />. < 0000500 3c 54 68 75 6d 62 20 77 69 64 74 68 3d 22 31 38 ><Thumb width="18< takk@deb8:~/Desktop$
やはり、タイムスタンプが更新されてます。しかもテキストで格納されています。
バイナリとテキストの混在書式ですね。
stringsコマンドで、文字列の位置を確認しておきましょう。stringsコマンドに-t dオプションをつけると、文字列が存在するオフセットがわかります。
takk@deb8:~/Desktop$ strings -t d file1.mdp 0 mdipack 20 <?xml version="1.0" encoding="UTF-8" ?> 60 <Mdiapp width="2893" height="4092" dpi="350" checkerBG="true" bgColorR="255" bgColorG="255" bgColorB="255"> 168 <CreateTime time="1489288838" timeString="2017-03-12T12:20:38" /> 238 <UpdateTime time="1489288838" timeString="2017-03-12T12:20:38" rev="1" /> 316 <Thumb width="180" height="256" bin="thumb" /> 367 <Snaps /> 381 <Layers active="0"> 405 <Layer ofsx="0" ofsy="0" width="2893" height="4092" mode="normal" alpha="255" visible="true" protectAlpha="false" locked="false" clipping="false" masking="false" maskingType="0" group="-1" id="0" draft="false" parentId="-1" name=" 655 1" binType="2" bin="layer0img" type="32bpp" /> 702 </Layers> 716 </Mdiapp> 726 PAC M 794 thumb 1054 g KZ 1059 PAC 1127 layer0img
ファイルサイズは1195でしたので、この保存データ(白いキャンバスデータ)は、ほぼ文字列で構成されているようです。
続く。
コメント
[…] ← MediBangファイルフォーマットの解析(stringsコマンドを使う) […]