web-dev-qa-db-ja.com

ディープインスペクションのためのより洗練されたファイルコマンド?

標準の fileコマンド (私のUbuntuシステムでは5.04)が十分に洗練されていないように見えることがあります(または、間違って使用しているだけです。

たとえば、.exeファイルで実行し、アーカイブが含まれていることを確信している場合、次のような出力が期待されます。

$ improved-file foo.exe
foo.exe: PE32 executable for MS Windows (GUI) Intel 80386 32-bit
         .Zip archive included (just use unzip to extract)

その他の問題:

  • 異なる形式の連結は検出されません
  • 一般的なファイル形式は検出されません。 .epubは、いくつかの標準化された.xmlファイルなどが内部にある単なる.Zipコンテナです(fileは 'data'を表示します)

そのような.exeファイルの例 アーカイブを含む-いくつかのアーカイブ形式を推測し、対応するunpack-commandsを試行 'n'エラーアプローチで試しました-これは最終的には機能しました-しかし、私はそうしますむしろ、より自動検査指向のワークフローを好みます。

5
maxschlepzig

オールインワンのツールは考えられませんが、特定のカテゴリの多数のファイルに対応できるプログラムがあります。

たとえば、 p7Zip は多数のアーカイブ形式を認識するため、ファイルがアーカイブであると思われる場合は、そのファイルで7z lを実行してみてください。

$ 7z l ta12b563enu.exe
…
Type = Cab
Method = MSZip
…

ファイルが画像であると思われる場合は、 ImageMagick を試してください。

$ identify keyboard.jpg.gz
keyboard.jpg.gz=>/tmp/magick-XXV8aR5R JPEG 639x426 639x426+0+0 8-bit DirectClass 37.5KB 0.000u 0:00.000

オーディオファイルまたはビデオファイルの場合は、mplayer -identify -frames 0を試してください。

fileが識別できないファイルを見つけた場合は、 マジックライブラリの作成者 に機能リクエストを行うことができます。

fileには何の問題もありません。 magic(5)ファイルのルールに基づいてファイルを調べるという、本来の目的を果たしています。これらのタイプのファイルを識別する一般的な方法を考え出したい場合は、新しいマジックルールを送信できます。詳細については、magicのマンページをお読みください。

fileがこれまでに行うとは思えないことの1つは、「連結の検出」です。ファイル内のすべてのバイトをスキャンせずに次のセグメントがいつ開始するかを判断する方法はありません。fileが実行しない、または実行したいことです。

ちなみに、epubファイルを区別するには、同じ基本構造を使用するearファイルとの違いを検出する必要があります。

6
Arcege