(tiếp theo của He thong quan ly tap tin NTFS - 5 - VBR - BPB vi du)
MFT
MFT (Master File Table) là thành phần quan trọng nhất trong
hệ thống NTFS. MFT chứa thông tin về tất cả các tập tin và thư mục trong ổ đĩa
logic.
Khi đĩa được định dạng theo NTFS, Microsoft sẽ khởi tạo MFT
với kích thước nhỏ nhất có thể, sau này sẽ mở rộng thêm khi có nhu cầu. Cách
làm này giúp tăng tính linh hoạt của hệ thống NTFS, MFT có thể mở rộng một cách
dễ dàng khi người dùng tăng dung lượng của ổ đĩa logic.
MFT được xem là điểm bắt đầu để đi đến các tập tin trên một
ổ đĩa logic, có thể xem nó như là “mục lục” của ổ đĩa logic, xem Hình 20.
Vị trí bắt đầu của MFT được tính bằng cluster, được lưu trong BPB tại
offset 30h, là một số kích thước 8 byte.
Đọc MFT
Từ bảng thông tin của BPB trong VBR, xét 8 byte tại offset
30h, giá trị của 8 byte này cho biết MFT bắt đầu tại cluster: 0x0000 0000 000C
0000 = 786 432.
Đổi sang sector: (lưu ý, số sector của một cluster được lưu
trong BPB)
Sector = Cluster * số sector của một cluster
= 786 432 * 8
= 6 291 456
Lưu ý: đây là sector bắt đầu logic, tức là tính từ đầu ổ đĩa
logic. Như vậy, sector vật lý sẽ là: 6 291 456 + 63 = 6 291 519 (63 là số
sector đứng trước ổ đĩa logic C:\).
Hình 21 dưới đây là một phần nội dung của MFT bắt đầu tại
sector 6 291 519.
MFT entry
MFT được chia nhỏ thành các phần bằng nhau gọi là MFT entry. Kích thước của một MFT entry được quy định trong BPB, thường là 1024 byte.
Khi một tập tin hoặc thư mục được tạo ra, sẽ có ít nhất một MFT
entry được tạo ra trong MFT, để mô tả thông tin cho tập tin hoặc thư mục đó.
Trong các hệ thống của Microsoft, MFT entry sẽ không bị xóa,
khi đã được tạo ra. Ví dụ, khi người dùng tạo tập tin A, một MFT entry cho tập
tin A sẽ được tạo ra trong MFT. Khi tập tin A bị xóa, hệ thống sẽ không xóa MFT
entry thuộc về tập tin A, mà nó chỉ đánh dấu MFT entry đó là chưa có tập tin
nào sử dụng và có thể cấp cho các tập tin khác.
MFT bản chất là một tập tin, do vậy cũng có một MFT entry mô
tả cho chính nó, đó chính là MFT entry đầu tiên trong MFT, có tên là $MFT. $MFT
mô tả về kích thước và tổ chức của MFT.
Có hai loại MFT entry:
-
MFT
entry cho tập tin siêu dữ liệu (metadata file): chứa các thông tin mô tả về cấu
trúc tổ chức của hệ thống NTFS.
-
MFT
entry cho tập tin dữ liệu (data file): chứa thông tin mô tả cho các tập tin dữ
liệu, có thể chứa cả phần dữ liệu của tập tin.
Windows dành một số MFT entry đầu tiên trong MFT cho các tập
tin siêu dữ liệu. Các MFT entry còn lại cho các tập tin dữ liệu.
Cấu trúc của MFT
entry
MFT entry gồm hai thành phần: header và các attribute.
Header gồm 42 byte đầu tiên được sử dụng để chứa một số
thông tin mô tả cho MFT entry.
Phần còn lại của MFT entry được sử dụng để chứa các
attribute. Nếu các attribute không sử dụng hết 1024 byte, hệ thống sẽ sử dụng
giá trị 0xffffffff để đánh dấu kết thúc.
Hình 22 dưới đây minh họa tổ chức của một MFT entry, gồm
header và ba attribute.
Các trường cụ thể của header được thể hiện trong bảng sau.
Offset
|
Số byte
|
Mô tả
|
0x0 – 0x03
|
4
|
Dấu hiệu nhận
biết MFT entry.
|
0x04 – 0x05
|
2
|
Địa chỉ (offset)
của Update sequence.
|
0x06 – 0x07
|
2
|
Số phần tử của
mảng Fixup, mảng này chứa các giá trị bị thay thế trong quá trình thao tác
với Update sequence.
|
0x08 – 0x0F
|
8
|
$LogFile Sequence
Number (LSN): mã định danh MFT entry của file log (log record).
|
0x10 – 0x11
|
2
|
Sequence Number:
cho biết số lần MFT entry này đã được sử dụng lại. Giá trị này được tăng lên một
đơn vị sau mỗi lần tập tin tương ứng với MFT entry này bị xóa. Mang giá trị 0
nếu MFT entry này chưa được sử dụng.
|
0x12 – 0x13
|
2
|
Reference Count:
cho biết số thư mục mà tập tin này được hiển thị trong đó, hay nói cách khác
là số thư mục tham chiếu đến tập tin này. Trường này còn có tên gọi khác là
hard link count.
|
0x14 – 0x15
|
2
|
Địa chỉ (offset)
bắt đầu của các attribute.
|
0x16 – 0x17
|
2
|
Flags:
- giá trị 0x01: MFT
entry đã được sử dụng
- giá trị 0x02: MFT
entry của một thư mục
- giá trị 0x04,
0x08: không xác định
|
0x18 – 0x1B
|
4
|
Số byte đã được
sử dụng trong MFT entry.
|
0x1C – 0x1F
|
4
|
Kích thước vùng
đĩa đã được cấp cho MFT entry.
|
0x20 – 0x27
|
8
|
Tham chiếu đến MFT
entry cơ sở của nó (Base MFT Record).
Mang giá trị 0 nếu là MFT entry cơ sở. MFT entry cơ sở dùng để chứa các thông
tin về các MFT entry mở rộng (Extension Record).
|
0x28 – 0x29
|
2
|
Next attribute ID:
mã định danh của attribute kế tiếp sẽ được thêm vào MFT entry.
|
Ví dụ
Tập tin được tạo trong tình huống ví dụ là Test.txt, như vậy
sẽ có một MFT entry cho tập tin Test.txt được tạo ra trong MFT. Để xác định MFT
entry này, cách đơn giản nhất là duyệt qua các khối 1024 byte (đây là kích
thước của một MFT entry) bằng mắt thường, tại mỗi MFT entry quan sát giá trị
tại offset 0x00F2, nếu thấy chuỗi Test.txt thì đó chính là MFT entry cho tập
tin Test.txt. Ngoài ra, có thể sử dụng chức năng tìm kiếm của công cụ Disk
Editor.
Hình 23 dưới đây là một phần nội dung MFT entry của tập tin
Test.txt, nằm tại sector vật lý 6 321 933.
Header của MFT entry này gồm 42 byte đầu tiên, phần tô vàng
ở Hình 23. Giá trị của các trường được minh họa ở bảng sau.
Offset
|
Số byte
|
Giá trị
|
Ý nghĩa
|
0x0 – 0x03
|
4
|
“FILE”
|
Dấu hiệu nhận
biết MFT entry là “FILE”, nếu MFT entry bị lỗi giá trị của trường này sẽ là
“BAAD”.
|
0x04 – 0x05
|
2
|
0x0030
|
Địa chỉ (offset)
của Update sequence.
|
0x06 – 0x07
|
2
|
0x0003
|
Số phần tử của
mảng Fixup, mảng này chứa các giá trị bị thay thế trong quá trình thao tác
với Update sequence
|
0x08 – 0x0F
|
8
|
0x0000 0000 0934
357B
|
$LogFile Sequence
Number (LSN): mã định danh MFT entry của file log (log record).
|
0x10 – 0x11
|
2
|
0x000B
|
Sequence Number:
cho biết số lần MFT entry này đã được sử dụng lại. Giá trị này được tăng lên một
đơn vị sau mỗi lần tập tin tương ứng với MFT entry này bị xóa. Mang giá trị 0
nếu MFT entry này chưa được sử dụng. MFT entry này đã được sử dụng 11 lần.
|
0x12 – 0x13
|
2
|
0x0001
|
Reference Count:
cho biết số thư mục mà tập tin này được hiển thị trong đó, hay nói cách khác
là số thư mục tham chiếu đến tập tin này. Trường này còn có tên gọi khác là
hard link count.
|
0x14 – 0x15
|
2
|
0x0038
|
Địa chỉ (offset)
bắt đầu của attribute đầu tiên, trong MFT entry này là byte thứ 56.
|
0x16 – 0x17
|
2
|
0x0001
|
Flags:
- giá trị 0x01: MFT
entry đã được sử dụng
|
0x18 – 0x1B
|
4
|
0x0000 0168
|
Số byte trong MFT
entry đã được sử dụng. Ví dụ, trong trường hợp này đã sử dụng 0x0168 = 360
byte.
|
0x1C – 0x1F
|
4
|
0x0000 0400
|
Kích thước vùng
đĩa đã được cấp cho MFT entry, Ví dụ: 0x0400 = 1024 byte.
|
0x20 – 0x27
|
8
|
0x0000 0000 0000
0000
|
Tham chiếu đến MFT
entry cơ sở của nó (Base MFT Record).
Mang giá trị 0 nếu là MFT entry cơ sở. MFT entry cơ sở dùng để chứa các thông
tin về các MFT entry mở rộng (Extension Record).
|
0x28 – 0x29
|
2
|
0x0004
|
Next attribute ID:
mã định danh của attribute kế tiếp sẽ được thêm vào MFT entry.
|
-------------------
Tài liệu đã tham khảo:
Brian Carrie, File System Forensic Analysis, Addison Wesley Professional, 2005
-------------------Cập nhật 2014/5/29
----------------------
Đọc thêm
He thong quan ly tap tin NTFS - 7 - Attribute
-----
Bạn muốn tự học HTML bài bản? Xem thêm