どうも初めまして1回生のlufeです。とりあえずバイナリアンになりたい。そんなときにseccamp2020でバイナリかるたの話を聞きました!話を聞いてバイナリかるたに惹かれてしまった私でございます。
ではまずバイナリかるたってなんだろうってところからご紹介します。
バイナリかるたはその名の通りバイナリをみてどのファイルか当てるゲームです。
公式HP(https://kozos.jp/binary-karuta/)でもあるように簡単に説明しますと、

上記のような取り札がありまして、それに対応したバイナリがあります。例えばpngファイルを例に出すと

このバイナリを見て「スパーン!」ととるということです!
なので今回はまずはpngファイルをとる能力を得るということで

早速簡単にpngファイル解析

ここで実際にバイナリファイルを見ていこうと思います。今回取り上げるのは大阪大学CTFサークルのWani hackase様主催のWaniCTF2020の問題にもなりましたpngファイルのバイナリを解説させていただきます。
実際の問題はpngファイルのバイナリのチャンクを「WANI」と書き換えられていたとう問題でした。まずこれを直すには「WANI」の場所をどのように直すかを知っていなければ解けません。実際は「WANI」という文字列を検索して置き換えるだけですが、では実際にpngファイルのバイナリを見ていきましょう!

今回は上記の「いらすとや」のフリー素材を使わさせていただきます!では早速このpngファイルの画像をバイナリエディタで見ていきましょう!(バイナリエディタはBz)バイナリは16進数です。

実際にバイナリエディタで開いてみるとこのように表示されます。ここでまずpngファイルの基本データ構造を見ていきましょう!

基本データ構造

名前サイズ解説
PNGヘッダー8bytePNGファイルあることを示す
IHDRチャンク25bytePNGファイルの情報
IDATチャンクnbyte画像のデータ
IENDチャンク12bytePNGファイルの最後

pngファイルは最初の8byte以外チャンクと呼ぶ構造でなりたちます。大体のファイルはヘッダーというものがありましてそこで大体のことは識別できます。PNGファイルでは最初の8byteは89 50 4E 47 0D 0A 1A 0Aであらわしています。しかしpngファイルはASCIIコードで.pngと書いているためバイナリかるたでは最初に示したバイナリを見ていただくと、ここがXX XX XX XX 0D 0A 1A 0Aとあらわされていることが多いです… 残念です。
参考までに0D 0A 1A 0Aは大体書き換えられたことを検知するために利用されるものです。

チャンク構造

名前サイズ説明
Length4byteデータ長
Chunk Type4byteチャンクの種類
Chunk DataLength byteチャンクデータ
CRC(Cyclic Redundancy Check)4byte巡回冗長検査

※一応バイトオーダーはビックエンディアンです。
Lengthは上の表のとおりChunk Dataの長さを表します。0 ~ 2^31-1までの値が入ります

チャンクの種類

上記に紹介したIHDR・IDAT・IENDと他にもIPLTは必須チャンクって言います。CTFではIPLT以外がすべて「WANI」になっていました!
なのでここをどのようにすればいいのか!
※カーソル位置がチャンクの最初のbyteです。

IHDR

PNGヘッダーの直後に必要なチャンクです。

サイズ名前説明
4byteLengthData長 常に13
4byteChunk Type49 48 44 52 (IHDR)
4byteChunk Data画像の横幅
4byteChunk Data画像の縦幅
5byteChunk Dataビット深度・カラータイプやいろいろな手法
4byteCRCChunk TypeとChunk Dataで決まる
IDAT

画像のデータで、最低で1個は必要です。

サイズ名前説明
4byteLengthData長
4byteChunk Type49 44 41 54 (IDAT)
nbyteChunk Dataイメージデータ
4byteCRCChunk TypeとChunk Dataで決まる
IEND

PNGファイルの最後を教えてくれるチャンクです。(全て同じ値)
これより先は読み込まれない。
この後ろになんか隠してもいいかも・・・?

サイズ名前説明
4byteLength0000
4byteChunk Type49 45 4E 44 (IEND)
4byteCRCAE 42 60 82

結果

以上のことを覚えていればもし、バイナリかるたでバイナリを表示させられてもすぐにpngファイルである!ってわかりスパーン!ととることができます!これでまた一つ成長!
他のファイルも調べてみればいろいろとでてくるのでバイナリを愛しましょう♡!

Twitterでフォローしよう

おすすめの記事