NTFSフォーマット 1 / 8 ページ $BOOT ファイル構造 No オフセット

NTFSフォーマット
$BOOT ファイル構造
No
オフセット
サイズ
説明
1
0
3
ジャンプコード
2
3
8
OEM名
3
11
2
1セクタのバイト数
4
13
1
1クラスタのセクタ数
4
14
7
未使用
5
21
1
メディアディスクリプタ(0xF8: ハードディスク)
6
22
2
未使用
7
24
2
1トラックのセクタ数
8
26
2
ヘッド数
9
28
8
未使用
10
36
4
通常 80 00 80 00
11
40
8
ボリュームの合計セクタ数
12
48
8
$MFTファイルのクラスタ開始番号
13
56
8
$MFTMirrファイルのクラスタ開始番号
14
64
4
FILEレコードのサイズ
15
68
4
Indexレコードのサイズ
16
72
8
ボリュームシリアル番号
510
2
シグネチャ(55 AA)
~
18
ボリュームシリアル番号の例
79 41 DE 98 4F DE 98 82
↓
8298DE4F98DE4179
↓
98DE-4179
1 / 8 ページ
NTFSフォーマット
FILE レコード構造
No
オフセット
サイズ
説明
1
0
4
マジックナンバー 'FILE' (不良レコードは 'BAAD')
2
4
2
Fixupのオフセット位置
3
6
2
Fixupの配列数
4
8
8
$LogFileシーケンス番号 (LSN)
5
16
2
シーケンス番号(Sequence Number, レコード再利用回数)
6
18
2
ハードリンク数
7
20
2
最初の属性値へのオフセット位置
8
22
2
フラグ
9
24
4
FILE レコードの使用サイズ
10
28
4
FILE レコードの割り当てサイズ
11
32
8
基準となるFILEレコードへの参照
12
40
2
次の属性ID
13
42
2
4バイト単位に揃えるためのパディング
14
44
4
MFTレコード番号
15
48
2
Fixup値
ファイルレコードのフラグ値(オフセット 22)
ビット
No
データ
パターン
説明
1
00 00
0000 0000
ファイル、削除
2
01 00
0001 0000
ファイル、割り当て
3
02 00
0010 0000
ディレクトリ、削除
4
03 00
0011 0000
ディレクトリ、割り当て
2 / 8 ページ
NTFSフォーマット
$STANDARD_INFORMATION属性構造(レジデント)
No
オフセット
サイズ
説明
1
0
4
属性タイプ(10 00 00 00)
2
4
4
属性の長さ
3
8
1
内蔵フラグ (00-Resident, 01-Non resident)
4
9
1
名前の長さ
5
10
2
名前のオフセット
6
12
2
Flags
7
14
2
属性ID
8
16
4
属性の長さ(オフセット0x18が始点)
9
20
2
コンテンツのオフセット位置
10
22
1
インデックスフラグ
11
23
1
パディング(0x00)
12
24
8
作成日時
13
32
8
更新日時
14
40
8
エントリ更新日時
15
48
8
アクセス日時
16
56
4
フラグ
17
60
4
Maximum Number of Versions
18
64
4
バージョン番号
19
68
4
クラスID
20
72
4
オーナーID(バージョン3.0以上)
21
76
4
セキュリティID(バージョン3.0以上)
22
80
8
Quota Charged(バージョン3.0以上)
23
88
8
アップデートシーケンス番号(USN) (バージョン3.0以上)
フラグ値(オフセット 56)
No
データ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
0x0001
0x0002
0x0004
0x0010
0x0020
0x0040
0x0080
0x0100
0x0200
0x0400
0x0800
0x1000
0x2000
0x4000
データ
(4バイト表現)
01 00 00 00
02 00 00 00
04 00 00 00
10 00 00 00
20 00 00 00
40 00 00 00
80 00 00 00
00 01 00 00
00 02 00 00
00 04 00 00
00 08 00 00
00 10 00 00
00 20 00 00
00 40 00 00
説明
読み取り専用
隠し
システム
ディレクトリ
アーカイブ
デバイス
ノーマル
テンポラリ
スパースファイル
リパースポイント
圧縮
オフライン
未インデックス
暗号化
3 / 8 ページ
NTFSフォーマット
$FILE_NAME属性構造(レジデント)
No
オフセット
サイズ
説明
1
0
4
属性タイプ(30 00 00 00)
2
4
4
属性の長さ
3
8
1
内蔵フラグ (00-Resident, 01-Non resident)
4
9
1
名前の長さ
5
10
2
名前のオフセット
6
12
2
Flags
7
14
2
属性ID
8
16
4
属性の長さ(オフセット0x18が始点)
9
20
2
コンテンツのオフセット位置
10
22
1
インデックスフラグ
11
23
1
パディング(0x00)
12
24
8
親フォルダへの参照 *1
13
32
8
作成日時
14
40
8
更新日時
15
48
8
エントリ更新日時
16
56
8
アクセス日時
17
64
8
物理ファイルサイズ
18
72
8
論理ファイルサイズ
19
80
4
フラグ
20
84
4
Reparse Value
21
88
1
ファイル名の長さ(L )
22
89
1
名前空間( 0=Posix, 1=Win32, 2=DOS, 3=Win32&DOS)
23
90
L
名前
*1 (6バイト 親レコード、2バイト 親レコードのMFTレコードシーケンス番号)
フラグ(オフセット 80)
No
データ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
0x0001
0x0002
0x0004
0x0010
0x0020
0x0040
0x0080
0x0100
0x0200
0x0400
0x0800
0x1000
0x2000
0x4000
データ
(4バイト表現)
01 00 00 00
02 00 00 00
04 00 00 00
10 00 00 00
20 00 00 00
40 00 00 00
80 00 00 00
00 01 00 00
00 02 00 00
00 04 00 00
00 08 00 00
00 10 00 00
00 20 00 00
00 40 00 00
説明
読み取り専用
隠し
システム
ディレクトリ
アーカイブ
デバイス
ノーマル
テンポラリ
スパースファイル
リパースポイント
圧縮
オフライン
未インデックス
暗号化
4 / 8 ページ
NTFSフォーマット
$DATA属性構造(レジデント)
No
オフセット
サイズ
説明
1
0
4
属性タイプ(80 00 00 00)
2
4
4
属性の長さ
3
8
1
内蔵フラグ (00-Resident, 01-Non resident)
4
9
1
名前の長さ
5
10
2
名前のオフセット
6
12
2
Flags
7
14
2
属性ID
8
16
4
属性の長さ(ヘッダの終わりから)
9
20
2
属性ストリームの開始オフセット
10
22
1
Index Flag
11
23
1
Padding
12
24
属性ストリームの開始(名前なし)
13
24
属性の名前(名前あり)
5 / 8 ページ
NTFSフォーマット
$DATA属性構造(ノンレジデント)
No
オフセット
サイズ
説明
1
0
4
属性タイプ(80 00 00 00)
2
4
4
属性の長さ
3
8
1
内蔵フラグ (00-Resident, 01-Non resident)
4
9
1
名前の長さ
5
10
2
名前のオフセット
6
12
2
Flags
7
14
2
属性ID
8
16
8
Runリストの開始VCN(Virtual Cluster Number)
9
24
8
Runリストの終了VCN
10
32
2
Data Runへのオフセット(通常0x40)
11
34
2
圧縮ユニットサイズ
12
36
4
パディング(0x00)
13
40
8
属性の物理サイズ(ファイルの物理サイズ)
14
48
8
属性の論理サイズ(ファイルの論理サイズ)
15
56
8
ストリームの初期化サイズ
16
64
Data Run(no name), Attribute name(Named)
※基本的にはData Runへのオフセットを利用
DataRun の構造
4 1
17
BC
8B
9A
08
1byte
①先頭の1バイトをニブル単位で解釈
②下位4bit が Run (クラスタ数)の長さのバイト長を示す
③上位4bit が Run のオフセット(クラスタ番号)を示す
④次の Run は先の値からのオフセット(+ or -)の値を取る
⑤Run のオフセット値がマイナスの場合には補数を計算
例)
41 10 81 62 CE 04 41 10 99 30 37 FB 00
(開始クラスタ位置) 0x04CE6281 -> CL 80,634,497、長さ 16クラスタ
(次のデータラン) 0xFB373099 -> 11111011001101110011000010011001
11111011001101110011000010011001 -1 = 11111011001101110011000010011000
反転 00000100110010001100111101100111 -> 80269159
80634497 - 80269159 = CL 365,338、長さ 16クラスタ
6 / 8 ページ
NTFSフォーマット
インデックスレコードヘッダ
No
オフセット
サイズ
説明
1
0
4
マジックナンバー"INDX"
2
4
2
アップデートシーケンス(Fixup)のオフセット位置
3
6
2
アップデートシーケンス番号(USN)と配列(S )
4
8
8
$LogFileシーケンス番号 (LSN)
5
16
8
当該Index AllocationのINDXバッファ内のVCN
6
24
4
インデックスエントリのオフセット (オフセット0x18が始点)
7
28
4
インデックスエントリサイズ (オフセット0x18が始点)
8
32
4
インデックスエントリの割当サイズ (オフセット0x18が始点)
9
36
1
葉ノードでない場合に1
10
37
3
パディング(全て0)
11
40
2
アップデートシーケンス
12
42
2S -2
インデックスエントリ
No
オフセット
アップデートシーケンス配列
サイズ
説明
~
~
インデックスレコードヘッダ
1
0
8
対象MFT番号
2
8
2
インデックスエントリサイズ
3
10
2
ファイル名へのオフセット
4
12
2
インデックスフラグ
5
14
2
パディング
6
16
8
親のMFTファイル参照番号
7
24
8
作成日時
8
32
8
更新日時
9
40
8
エントリ更新日時
10
48
8
アクセス日時
11
56
8
物理ファイルサイズ
12
64
8
論理ファイルサイズ
13
72
8
フラグ
14
80
1
ファイル名の長さ(F )
15
81
1
名前空間( 0=Posix, 1=Win32, 2=DOS, 3=Win32&DOS)
16
82
2F
名前
17
82+2F
P
パディング
18
82+2F +P
8
サブノードのインデックスバッファのVCN
7 / 8 ページ
NTFSフォーマット
属性ヘッダ構造
No
オフセット
サイズ
説明
1
0
4
属性識別番号
2
4
4
属性全体のサイズ
3
8
1
Non Resident Flag(00 Resident, 01-Non resident)
4
9
1
名前の長さ(Unicode)
5
10
2
名前のオフセット位置
4
12
2
Flags(0100 圧縮、0040 暗号化、0080 スパース)
5
14
2
属性ID
6
以降、以下のいずれかに続く
属性コンテンツ構造(レジデント、フラグが 00 の場合)
No
オフセット
サイズ
説明
7
16
4
属性の長さ(ヘッダの終わりから)
8
20
2
属性ストリームの開始オフセット位置
9
22
1
インデックスフラグ
10
23
1
パディング
11
24
属性名(名前あり)
12
24
コンテンツ(名前なし)
属性コンテンツ構造(ノンレジデント、フラグが01の場合)
No
オフセット
サイズ
説明
13
16
8
VCN開始番号
14
24
8
VCN終了番号
15
32
2
Data Run へのオフセット値
16
34
2
圧縮ユニットサイズ
17
36
4
パディング
18
40
8
属性の物理サイズ
19
48
8
属性の論理サイズ
20
56
8
ストリームの初期化サイズ
21
64
属性名(名前あり)
22
64
DataRun(名前なし)
8 / 8 ページ