体験を伝える―『ガジェット通信』の考え方

面白いものを探しにいこう 本物を体験し体感しよう 会いたい人に会いに行こう 見たことのないものを見に行こう そしてそれをやわらかくみんなに伝えよう [→ガジェ通についてもっと詳しく] [→ガジェット通信フロアについて]

【謎解きプログラム】データをバイナリで見てみよう【バイナリ】解答と解説

【謎解きプログラム】データをバイナリで見てみよう【バイナリ】

本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。

それでは以下、各問題とその解答を見ていきましょう。

問題のオープニング

ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。

「24時間以内に謎が解けない場合は、このPCのデータは消失する。

 謎は、あなたが真のプログラマーなら解けるものだ」

これは挑戦状ではなく脅迫状だ!

そこには、見たことのない謎が掲載されていた。

あなたは歴戦のプログラマーとして、データを救うために、この謎に挑むことになった。

問題1

あなたは、あるファイルを、バイナリエディタで開きました。その先頭数バイトのデータは、以下のようになっていました。

// 先頭数バイト
47 49 46 38 39 61

このデータのファイル形式は、以下の選択肢のいずれかとします。選択肢の中から、ファイル形式を当てて下さい。

ヒント:「A」のASCIIコードは「0x41」、「a」のASCIIコードは「0x61」、「0」のASCIIコードは「0x30」です。

// 選択肢
GIF
PDF
BMP

この問題は、ヒントを元にして、先頭数バイトのうち文字に変換できる場所を、文字に置き換えると答えを推測することができます。

特定のファイル形式の先頭に、こうしたファイルの内容を識別する情報が入っている場合、そうしたものを、マジックナンバーや、フォーマット識別子などと呼びます(参考:マジックナンバー (フォーマット識別子) – Wikipedia)。

それでは、この問題の先頭数バイトを見て、文字に変換できる部分を置き換えていきましょう。

// 文字に変換できる部分を置き換え
47 49 46 38 39 61

G I F 8 9 a

「47 49 46 38 39 61」は、GIFのフォーマット識別子の1つ「GIF89a」です。分かりやすく「GIF」が入っていることから、このファイルは「GIF」だと分かります。

というわけで、1番目の選択肢「GIF」が答えになります(参考:Graphics Interchange Format – Wikipedia)。

ちなみにPDFは「%PDF-」になります(参考:Portable Document Format – Wikipedia)。

BMPは「BM」になります(参考:Windows bitmap – Wikipedia)。

問題2

あなたは、あるファイルを、バイナリエディタで開きました。その先頭数バイトのデータは、以下のようになっていました。

// 先頭数バイト
89 50 4E 47 0D 0A 1A 0A

このデータのファイル形式は、以下の選択肢のいずれかとします。選択肢の中から、ファイル形式を当てて下さい。

ヒント:「A」のASCIIコードは「0x41」、「a」のASCIIコードは「0x61」、「0」のASCIIコードは「0x30」です。

// 選択肢
WAV
AVI
PNG

この問題も、ヒントを元にして、先頭数バイトのうち文字に変換できる場所を、文字に置き換えると答えを推測することができます。

それでは、この問題の先頭数バイトを見て、文字に変換できる部分を置き換えていきましょう。

// 文字に変換できる部分を置き換え
89 50 4E 47 0D 0A 1A 0A

89 P N G 0D 0A 1A 0A

「89 50 4E 47 0D 0A 1A 0A」は、PNGのフォーマット識別子「0x89 PNG 0x0d 0x0a 0x1a 0x0a」です。分かりやすく「PNG」が入っていることから、このファイルは「PNG」だと分かります。

というわけで、3番目の選択肢「PNG」が答えになります(参考:Portable Network Graphics – Wikipedia)。

1 2次のページ
CodeIQ MAGAZINEの記事一覧をみる
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。