@port139 Blog

基本的にはデジタル・フォレンジックの技術について取り扱っていますが、記載内容には高確率で誤りが含まれる可能性があります。

FAT 種別の識別方法

2008年12月頃の話題なんですけど、別のところに書いた内容をコピペ。
ここから---

GSI のフォーラムで話題に上がっていた件ですが、FAT の種別をどのように識別するか興味深い話題なのでこちらにも投げておきます。
まず EnCase が仕様上 FAT 12/16/32 をどのように識別しているかは、手元の検証結果によるとマイクロソフトが出している FAT32 仕様書の記載と同じ判断をしていると思われます。

FAT32 File System Specification
http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx

この資料のP14〜15で計算式を含めて解説されていますが、以下の記述で簡単に説明されています。

P15より引用ここから

This is the one and only way that FAT type is determined. There is no such thing as a FAT12 volume that has more than 4084 clusters. There is no such thing as a FAT16 volume that has less than 4085 clusters or more than 65,524 clusters. There is no such thing as a FAT32 volume that has less than 65,525 clusters. If you try to make a FAT volume that violates this rule, Microsoft operating systems will not handle them correctly because they will think the volume has a different type of FAT than what you think it does.

ここまで

クラスタ数が 4084 以下になっている場合には、FAT 12 であると識別するので、例えば EnCase で以下の実験を行うと確認できます。

1. 32メガのFAT16領域を作成する、クラスタサイズを 512byte として 1クラスタ 1セクタとする 
2. ボリュームブートレコードでバイトオフセット13 の位置にある BPB_SecPerClus の値を「1」から「8」に変更 
3. クラスタ数の変更により、全クラスタ数が 4085 以下になる 
4. EnCase にボリュームを追加すると FAT 12 と認識する 

ちなみに、仕様書にもありますが VBR のオフセット位置 53 にある BS_FilSysType の値は FAT タイプの識別では無意味なので、ここに FAT16 と書いてあってもクラスタ総数で判断しているようです。
※試しに BS_FilSysType だけ FAT12 とかに変更しても EnCase は FAT16 として識別する

仕様書に従ってない値で構成された FAT ファイルシステムがあるとすると、恐らく一般的なフォレンジック製品だと上記計算式で判断してしまう気がしていますが、不具合というよりは仕様に従っているだけですかね。
同じ構成になっている VBR を FTK とか他の製品がどう識別するのかも興味あるところです ;-)