fteを実行すると、対象ファイルのパス情報(path)とタイムスタンプ(atime, mtime, ctime, crtime)の他にタイプ(type)という項目を出力します。記録されている4つのタイムスタンプ値から、ファイルがどこで、どのようにして生成されたか、最も妥当と判断した情報をtypeとして出力しています。
fteが扱う分類について以下に記載します。
- FAT
FAT上で保持するタイムスタンプの精度に一致する場合です。
- atime - 日単位
- mtime - 2秒単位
- ctime - なし (fte上は1601/01/01 00:00:00+タイムゾーンの表示)
- crtime - 10ミリ秒単位
exFAT上で保持するタイムスタンプの精度に一致する場合です。
- atime - 2秒単位
- mtime, crtime - 10ミリ秒単位
- ctime - なし (fte上は1601/01/01 00:00:00+タイムゾーンの表示)
ctimeを除く3つのタイムスタンプ全てがUnix(POSIX)形式、すなわち秒未満の情報を持たない場合です。
- atime, mtime, ctime, crtime - 秒単位
Unix系ファイルシステム(Ext2/3やHFS+など)上のファイルをネットワーク経由で参照するとこのタイプになります。
ctimeはNTFS上の精度(100ナノ秒単位)でそれ以外の3つのタイムスタンプがDOS形式(2秒単位)の場合です。
- atime, mtime, crtime - 2秒単位
- ctime - 100ナノ秒単位
アプリケーションによってはこの型を採用しているかもしれないため用意しました。実際にこのようなタイプで保存され
ている例はまだ見たことがありません。
mtimeがDOS形式(2秒単位)でそれ以外の3つのタイムスタンプはNTFS上の精度(100ナノ秒単位)の場合です。
- atime, ctime, crtime - 100ナノ秒単位
- mtime - 2秒単位
普通にコピーするとmtimeは更新されませんので、FAT上にあるファイルをNTFS上にコピーした場合はこのタイプになります。
また、ZIPやLZHの仕様ではヘッダ情報として対象ファイルのmtimeをDOS形式で格納するように定められています。圧縮時に対象ファイルのmtimeをDOS形式で取っておき、展開時にその形式(DOS)でmtimeをセットします。よって、ZIPやLZHから展開されたファイルも大抵このタイプになります。
ただしZIPやLZHのヘッダは拡張版としてUnix(POSIX)やFILETIMEで保存できるようにもなっているため、最終的には圧縮/展開に使用したツールの実装にも依存します。いくつかのツールの検証結果はhttp://www.ji2.co.jp/forensics/seminer/20091204/20091204_03.pdfのスライド34に記載しています。
mtimeが10ミリ秒単位で、それ以外の3つのタイムスタンプはNTFS上の精度(100ナノ秒単位)の場合です。
- atime, ctime, crtime - 100ナノ秒単位
- mtime - 10ミリ秒単位
exFAT上にあるファイルをNTFS上にコピーした場合はこのタイプになります。
ctimeを除く3つのタイムスタンプがSYSTEMTIME形式(ミリ秒単位)の場合です。
- atime, mtime, crtime - ミリ秒単位
- ctime - 100ナノ秒単位
ツールによってはSYSTEMTIME形式で時間情報を扱います。調べた限りではChange File Time StampやFileTouchがSYSTEMTIME形式で扱っていましたので、例えばこれらのタイムスタンプ変更ツールを使って変更されたファイルはこのタイプになります。
上記のいずれのタイプにも当てはまらない場合です。
- atime, mtime, ctime, crtime - 100ナノ秒単位
他に役に立ちそうなタイプが見つかったら随時組込んでいきたいと思います。