CodeIQ MAGAZINECodeIQ MAGAZINE

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

2017.03.21 Category:CodeIQ問題解説・リーダーボード Tag:

  • 3
  • このエントリーをはてなブックマークに追加

言語不問で、プログラムにちなんだ謎を解く「謎解きプログラム」。

あなたは見事、謎を解けましたか? というわけで、出題者の柳井さんによる解答と解説をどうぞ!
by CodeIQ運営事務局

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

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

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

問題のオープニング

ある日、出社すると、あなたの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)。

ちなみにWAVは、8バイト目から「WAVE」になります(参考:WAV – Wikipedia)。

AVIは、8バイト目から「AVI 0x20」になります(参考:Audio Video Interleave – Wikipedia)。

問題3

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

// 先頭数バイト
50 4B 03 04

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

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

// 選択肢
RAR
ZIP
CAB

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

しかし、置き換えただけでは、答えを導きだすことができません。圧縮ファイルの先頭の数バイトが、どのようになっているのか、知識が必要です。

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

// 文字に変換できる部分を置き換え
50 4B 03 04
↓
P  K  03 04

「50 4B 03 04」は、あるファイル形式のフォーマット識別子の1つ「PK 0x03 0x04」です。これは「ZIP」ファイルの識別子になります。

というわけで、2番目の選択肢「ZIP」が答えになります(参考:ZIP (ファイルフォーマット) – Wikipedia)。

ちなみにRARは「Rar! 0x1A 0x07 0x00」になります(参考:RAR – Wikipedia)。

CABは「MSCF 0x00 0x00 0x00 0x00」になります(参考:CAB – Wikipedia)。

CodeIQ運営事務局より

柳井さん、ありがとうございました!
現在、柳井さんの最新問題が出題中です。
ぜひ挑戦してみてくださいね!

  • 3
  • このエントリーをはてなブックマークに追加

■関連記事

【謎解きプログラム】どう防ぐ?【無限ループ】解答と解説... 【謎解きプログラム】どう防ぐ?【無限ループ】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24時間以内に謎...
数学の問題をプログラミングで解こう!「タワー・ビルディング」問題解説... 問題のおさらい A を一辺が 1 の立方体のブロックとし、B を縦が 1、横が 1、高さが 2 の直方体のブロックとします。 (下は横から見た図です。) 自然数 n, a, b に対し、A を最大 a 個、B を最大 b 個使って、縦が 1、横が 1、高さが n の直方体の塔を作ります。 こ...
【謎解きプログラム】正しいコードは?【一人すごろく】解答と解説... 【謎解きプログラム】正しいコードは?【一人すごろく】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24時間...
数学の問題をプログラミングで解こう!「ペア・ドロップ」問題解説... 問題のおさらい n を自然数とします。1 から n までの自然数が 1 つずつ書かれた n 枚のカードが 2 組あります。 これら 2n 枚のカードをよく混ぜ、A と B の 2 人に n 枚ずつ配ります。 A と B は、それぞれ自分の持ち札の中に番号が一致するカードがあればその 2 枚を捨...
【謎解きプログラム】中身はどうなる?【出し入れ】解答と解説... 【謎解きプログラム】中身はどうなる?【出し入れ】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24時間以内...
【謎解きプログラム】座標の移動【Matrix】解答と解説... 【謎解きプログラム】座標の移動【Matrix】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24時間以内に...

今週のPickUPレポート

新着記事

週間ランキング

CodeIQとは

CodeIQ(コードアイキュー)とは、自分の実力を知りたいITエンジニア向けの、実務スキル評価サービスです。

CodeIQご利用にあたって
関連サイト
codeiq

リクルートグループサイトへ