チュートリアル 1: Java クラスファイルの検出
このチュートリアルでは、データセットを分析してマジックバイトを判断するために File Type Analyzer ユーティリティを使う手順を提供します。また、スクリプト言語を使ってソリューションを作成してテストする方法も示します。
この最初のチュートリアルでは Java クラスファイルを分析し、検出します。このチュートリアルは、File Type Analyzer ユーティリティの Windows ベースの GUI バージョンを使っていることを想定しています。
- File Type Analyzer ユーティリティをインストールします。
- File Type Analyzer ユーティリティを起動します。
- この例のためにデータセットを準備します。ファイルシステム上のディレクトリに、複数の (15 個以上の) Java クラスファイル (*.class) をコピーします。(このチュートリアルでは、使われるディレクトリは C:\temp\JavaClassFiles です。)さらに、スクリプトが Java クラスファイルにのみ一致することを確認するために、同じディレクトリに Java クラスファイル以外のファイルを少し追加します。
- データセットのディレクトリを File Type Analyzer ユーティリティに追加します。File Type Analyzer ユーティリティで[Add Directory]をクリックします。ファイルをコピーしたディレクトリを参照して選択し、[Open]をクリックします。
- [File Name Filter]フィールドに、ファイルをフィルタ処理するための正規表現を入力します。たとえば、正規表現[\w\s]+.[\w]+は選択したディレクトリのすべてのファイルをスクリーニングします。
- (\w) 任意の英数字または下線文字
- (\s) 任意の空白
- (+) 直前の文字が 1 つ以上一致する必要がある
- (.) それ自体を含む任意の 1 文字
指定されたディレクトリで分析したいファイルを見つけるために、この式を調整する必要がある場合もあります。たとえばファイル名がハイフン (-) を含んでいたら、[\w\s-]+.[\w]+のように式を調整します。 - [Number of Bytes]フィールドに1024と入力します。ただし、ファイルのマジックバイトは、ほとんどの場合ファイルの最初の 1024 バイト以内に含まれています。データの最初の 1024 バイトよりも多くを分析したい場合には、File Type Analyzer ユーティリティが読み込んで表示できるバイト数を増やします。
- [Chunk Size]に1と入力します。
- [Parser Type]で[BYTE]を選択します。
- スクリーニングしたいファイルが入れ子のディレクトリに格納されている場合、[Recursive Scan]オプションを選択します。[Recursive Scan]オプションを選択した場合、またはデータセットが大きい場合は、File Type Analyzer ユーティリティに割り当てられた Java ヒープサイズを増やします。
- [Analyze Dataset]をクリックします。このユーティリティはディレクトリのすべてのファイルを分析し、結果を表示します。ユーティリティはファイルをその拡張子に従って、タブで編成します。[All]タブには、スクリーニングされたファイルがすべて表示されます。[.class]タブには、Java クラスファイルのみが表示されます。
- [Analyze Table Data]を再びクリックします。今度は、ユーティリティは各ファイル内のバイトのうちすべてのファイルにわたって一致するものをハイライトします。ここでわかるように、Java クラスファイルには、最初の 4 バイト (0 から 3) のCA FE BA BEを含む、いくつかのバイトが共通しています。これらのバイトは Java クラスファイルのマジックバイトです。下部のドロップダウンメニューで、ユーティリティが表のデータをどのように分析するかを変更できます。デフォルトオプションは、一般に最も正確な一致を提供する[COLUMN_MATCH]です。この分析モードに切り替えた場合、一致するバイトを行ごとに参照するには、[Analyze Table Data]を再びクリックする必要があります。
- Java クラスファイルのマジックバイトが判明したので、このファイルの種類を検出するためのスクリプトを作成できます。その後、File Type Analyzer ユーティリティを使ってスクリプトをテストできます。[Solution]フィールドに、Java クラスファイルを検出するための次のスクリプトを入力します。$Int1 = getHexStringValue('CAFE'); $Int2 = getBinaryValueAt($data, 0x0, 2); assertTrue($Int1 == $Int2); $Int3 = getHexStringValue('BABE'); $Int4 = getBinaryValueAt($data, 0x2, 2); assertTrue($Int3 == $Int4);
- [Test Solution]をクリックします。インターフェースの上部に[Matched Files]が表示されます。マジックバイト CAFE BABE を含んでいるファイルのみが、インターフェースの[Matched Files]セクションに表示されます。これらのマジックバイトを含んでいないファイルは、インターフェースの下半分にある[Mismatched Files]セクションに表示されます。
- データセットを分析すると、File Type Analyzer ユーティリティは Java クラスファイルの最初の 2 バイトが CA FE であることを示します。したがって、スクリプトの最初の文で変数$Int1に 16 進文字列としてこの値を割り当てます。
- スクリプトの第 2 文で各ファイルの最初の 2 バイトを取得し、変数$Int2にその値を割り当てます。文の「0x0, 2」という部分は、スクリプトエンジンに、最初のバイトから開始し、最初の 2 バイトを取得するように指示します。
- 第 3 文で 2 つの変数の値を比較し、一致しているかどうかを調べます。
- 第 3 バイトと第 4 バイトについて処理が繰り返され (「0x2, 2」)、BA BE に対する一致が検索されます。両方の評価と一致するファイルはスクリプトによって検出され、インターフェースの[Matched Files]の部分に表示されます。
- [Notes]セクションには、「Java クラスファイルを検出するためのカスタムスクリプト」のような、ソリューションについてのコメントを入力します。
- File Type Analyzer インターフェースで、[File] > [Save]の順に選択します。C:\temp\JavaClassFiles.fgiのように、ファイルに名前を付けてローカルディレクトリに保存します。
- File Type Analyzer インターフェースを閉じ、再起動します。[File] > [Open]の順に選択し、JavaClassFiles.fgiファイルを参照して選択します。データセットパラメータとスクリプトソリューションがインターフェースに表示されます。ここからデータセットを再分析し、必要に応じてソリューションを調整できます。分析したいファイルがあるディレクトリを追加または削除するには、[Edit Dataset]をクリックします。また、行を右クリックしてデータセットから個々のファイルを削除することもできます。
- ソリューションをデバッグしたら、[カスタムファイル種類のシグネチャ]ルールのインスタンスにスクリプトを配備します。その後、このルールを使ってカスタムファイルの種類を検出する新しいポリシーを作成し、配備できます。