2013年2月19日火曜日

ファイルの判別について

フォーマット識別子はフォーマット識別子とも言われ、ファイルの種類を判断するために使用される。
代表的なファイル識別子を記載する(今後も追加していく予定)

実行ファイル

・Windows 実行ファイル(PE ファイル、exe ファイル)
0x4d 0x5a で始まるファイル、文字列としては MZ 。

オフィスファイル

・DOC/XLS/PPT ファイル、いわゆるマイクロソフトオフィス
OLE2 と呼ばれるフォーマットで記述されており、先頭 16Byte が "d0 cf 11 e0 a1 b1 1a e1" であるかどうかで OLE2 ファイルであるかどうかを判別する。
オフィス関連のファイルだと分かった後の判別方法は若干手間なので、直接オフィスファイルで開いて調べるのが早い。

・PDF ファイル
0x25 0x50 0x44 0x46 となり、%PDF の後にバージョンが記載されている。

圧縮ファイル

・zip ファイル
0x50 0x4b で始まるファイル、文字列としては PK となる。
なお、Microsoft office の pptx や xlsx などは zip ファイルのため先頭バイトは zip と同様に 0x50 0x4b となる。

・gzip ファイル
先頭から2バイトが 0x1F 0x8B であるファイルはgzip圧縮ファイル


暗号・難読ファイル

・Base64
アルファベット、数字、+と/と=が基本。
ただし、拡張版もあるので異なる場合もある。

・Windows Script Encoder
Windows で使われる難読化
ファイルの中身が #@~^ で始まっている。

・GnuPG を使っての暗号ファイル
先頭ビットが、0x84 or 0x85 or 0x86 の場合は公開鍵暗号で暗号化されたファイルの可能性が高い
先頭ビットが、0x8C or 0x8D or 0x8E の場合は共通鍵暗号方式で暗号化されている可能性が高い

・openssl の共通鍵暗号方式を使ったファイル
Salted__ から始まる

画像ファイル

・PNGファイル
マジックナンバーは 89 50 4E 47 0D 0A 1A 0A (制御文字で表すと HTJ "PNG" CR LF SUB LF)。ファイルヘッダの後には IHDR が必ず来るので、その次の 8 バイトも 00 00 00 0D 49 48 44 52 で固定されている。

・JPEG
マジックナンバーは FF D8。ファイルの終了は FF D9。


2013年2月7日木曜日

難読プログラミング

難解プログラミング言語とは、意図的に読解が困難なように設計されたプログラミング言語。
Wiki によるとハッカーのたしなみらしいので、どこかでお目にかかるかもしれない。

http://ja.wikipedia.org/wiki/%E9%9B%A3%E8%A7%A3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E

興味深い言語としては以下のようなものがある。

Piet http://ja.wikipedia.org/wiki/Piet
文字ではなく色を組み合わせて記述する、
そのためソースコードが絵になる。

Brainfuck http://ja.wikipedia.org/wiki/Brainfuck
コンパイラが非常に小さい。
派生言語として「ジョジョ言語」などいろいろ考えられている。