CodeIQ MAGAZINECodeIQ MAGAZINE

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

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

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

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

あなたは見事、謎を解けましたか? というわけで、出題者の柳井さんによる解答と解説をどうぞ!
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時間以内に謎...
数学の問題をプログラミングで解こう!「ロンリー・ルーク」問題解説... 問題のおさらい 自然数 n, k に対し、縦横 n×n のマス目にチェスのルークの駒を k 個配置することを考えます。 このとき、自身から見て上下方向・左右方向のいずれにも他の駒が存在しないような駒を「はぐれルーク」と呼びます。 例えば以下は、(n, k)=(4, 5) のときの駒の配置例を示...
【謎解きプログラム】どんな数字になる?【整数のキャスト】解答と解説... 【謎解きプログラム】どんな数字になる?【整数のキャスト】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24...
【謎解きプログラム】テキストのバイナリは?【テキスト バイナリ】解答と解説... 【謎解きプログラム】テキストのバイナリは?【テキスト バイナリ】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 ...
【謎解きプログラム】条件に当てはまる文字列は?【正規表現】解答と解説... 【謎解きプログラム】条件に当てはまる文字列は?【正規表現】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「2...
【謎解きプログラム】乱数で発生する数値は?【組み合わせ】解答と解説... 【謎解きプログラム】乱数で発生する数値は?【組み合わせ】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24...

今週のPickUPレポート

新着記事

週間ランキング

CodeIQとは

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

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

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