fileコマンドとは
ファイルタイプを識別するものです!
拡張子の有無にかかわらず調べてくれます
CTFではよく使うコマンドではないでしょうか?
#使い方
使い方はシンプルで以下のようにコマンドを入力するだけです
$ file [解析したいファイル]
#実際に使ってみる
今回使っているファイルはすべてGitHubに載せています。手元でも動かしてみてください!
###実行環境
- Windows10 Pro
- WLS2 Ubuntu(20.04)
##file1の解析:テキストファイル
$ file file1
###実行結果
file1: ASCII text
※環境によってはwith CRLF line terminators
が追加で表示されるかもしれません
出力よりこのファイルはアスキーコードで書かれたテキストファイルであることが分かりました!
catで内容を見てみます
$ cat file1
Hello World
##file2の解析:実行ファイル(Windows)
$ file file2
###実行結果
file2: PE32+ executable (console) x86-64, for MS Windows
PE32+ executable
の部分は実行ファイルの形式を示しています。PE
とはwindows上で使用される実行ファイルです
executable
は「実行可能」という意味の英単語ですね!
(console)
とあることからコンソールを利用することが分かります
##file3の解析:実行ファイル(Linux)
$ file file3
###実行結果
file3: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=6bfad10dfc5d45f9218806fe0c7cc6e6d9049ddc, for GNU/Linux 3.2.0, not stripped
さっきよりも少し長いですね。。。
ELF
とはLinuxなどで用いられる実行ファイル形式です。よって、このファイルはLinux上で実行されるものであることが分かります!
LSB
とはエンディアンがリトルエンディアンであることを示しています。エンディアンとはバイトオーダーのことです
末尾のnot stripped
は実行ファイル内のシンボル情報が削除されずに残っていることを意味します
シンボル情報が残っていると内部の関数名や変数名の情報が得られることがあります!
####実際に実行することもできます
$ ./file3
Hello World
##file4の解析:画像(PNG)
$ file file4
###実行結果
file4: PNG image data, 200 x 200, 8-bit/color RGB, non-interlaced
fileコマンドでは画像ファイルであることも特定できます!
今回の場合はPNG
形式の200 x 200
の画像ファイルであることが分かりました!
#終わりに
file
コマンドでは様々なファイルの種類を特定することができることが分かったと思います!
実際に手元で色々なファイルでどのような出力が出るか試してみてください!
より詳しいことはここ↓に乗っています
#参考文献
碓井利宣・竹迫良範・廣田一貴・保要隆明・前田優人・美濃圭佑・三村聡志・八木橋優(2015)『セキュリティコンテストチャレンジブック:CTFで学ぼう!情報を守るための戦い方』マイナビ出版