Hệ thống quản lý tập tin NTFS
Mở đầu
NTFS (New Technology File System) là một trong những hệ
thống quản lý tập tin được Microsoft phát triển từ năm 1993. Hiện nay đã qua
một số phiên bản như: 1.0, 1.1, 1.2, 3.0, và hiện nay (2014) là 3.1.
Tài liệu này sẽ trình bày về hệ thống quản lý tập tin NTFS ở
mức đơn giản, để người đọc có những hình dung ban đầu về nó.
Để dễ theo dõi, và tiện cho người đọc tự kiểm tra, tài liệu
sẽ vừa trình bày nội dung lý thuyết, vừa minh họa trên dữ liệu được trích ra từ
một máy tính đang chạy hệ điều hành Windows 7, có ổ đĩa logic định dạng NTFS.
Phần mềm để đọc đĩa cứng dạng thô (hex) được sử dụng là
Norton Disk Editor 2002, phần mềm này có trong đĩa Hiren’s Boot 10.1. Đọc thêm
phần “Hướng dẫn đọc đĩa cứng bằng phần mềm Disk Editor” ở phần Phụ lục.
Phần mềm WinHex đọc đĩa cứng tiện hơn nhiều so với Norton Disk Editor (bổ sung 2016)
Tình huống ví dụ được sử dụng để minh
họa là:
-
Trong ổ đĩa logic C:\, được định dạng theo NTFS, tạo
tập tin Test.txt.
-
Nhập nội dung cho tập tin là một vài dòng văn bản tiếng
Việt không dấu.
-
Sử dụng phần mềm Disk Editor đọc đĩa cứng dạng hex,
phân tích theo cấu trúc tổ chức của NTFS để làm sao đọc được phần văn bản trong
tập tin Test.txt (Hình 1).
Tài liệu sẽ viết dựa
trên tình huống này.
Tổ chức của đĩa cứng
Đĩa cứng vật lý thường được chia thành các phân vùng (partition).
Có hai loại phân vùng là: phân vùng chính (primary
partititon) và phân vùng mở rộng (extended partition). Hình 2 là một ví dụ về
đĩa cứng có hai phân vùng. Phân vùng chính không thể chia nhỏ, được xem như một
ổ đĩa logic, trong trường hợp này là ổ đĩa C:\. Phân vùng mở rộng có thể chia
tiếp thành các vùng nhỏ hơn gọi là các ổ đĩa logic (D:\, E:\).
Dưới cái nhìn của người sử dụng, đĩa cứng sẽ gồm ba ổ đĩa
logic (C:\, D:\, E:\) như trong Hình 2.
Thực tế, thông tin về tổ chức của đĩa cứng đã bị ẩn đi đối
với người sử dụng. Để quản lý tổ chức của đĩa cứng có thể sử dụng cấu trúc MBR,
EBR. Tất nhiên, ngoài cấu trúc này còn có nhiều cấu trúc khác.
Đĩa cứng tổ chức theo cấu trúc MBR, EBR được thể hiện trong
Hình 3.
Master Boot Record
Tổ chức của MBR
Master Boot Record (MBR) là bản ghi khởi động chính. Một đĩa cứng vật lý chỉ có một MBR. MBR là sector vật lý đầu tiên của đĩa cứng, thường gọi là sector 0.
MBR chứa: mã khởi động (code area), bảng thông tin về các
phân vùng trên đĩa cứng (partition table)...v.v.
Trong quá trình khởi động, sau quá trình POST, máy tính sẽ
đọc và thực thi đoạn mã khởi động trong MBR. Nhiệm vụ của đoạn mã này là xác
định xem đĩa cứng đã được chia thành mấy phân vùng, phân vùng nào đã được thiết
lập là phân vùng khởi động chính (active). Nếu không tìm thấy phân vùng khởi
động chính, hệ thống sẽ báo lỗi. Nếu có phân vùng khởi động chính, hệ thống sẽ
tìm kiếm và chạy đoạn mã khởi động trong phân này, để tiếp tục quá trình tìm và
nạp hệ điều hành.
Cấu trúc của MBR được minh họa trong bảng sau:
Địa chỉ (dạng
offset)
|
Mô tả
|
Số byte
|
|||
Hệ 16
|
Hệ 8
|
Hệ 10
|
|||
0000
|
0000
|
0
|
Vùng mã khởi động
(Code area)
|
440
(tối đa 446) |
|
01B8
|
0670
|
440
|
Mô tả đĩa (Optional disk signature)
|
4
|
|
01BC
|
0674
|
444
|
Không sử dụng (0x0000)
|
2
|
|
01BE
|
0676
|
446
|
Bảng thông tin về các phân vùng
(Partition table)
|
64
|
|
01FE
|
0776
|
510
|
55h
|
Dấu hiệu nhận biết MBR (0xAA55)
|
2
|
01FF
|
0777
|
511
|
Aah
|
||
Tổng kích thước của MBR
|
512
|
Hình 4 là nội dung của MBR dạng hex. Trong đó, vùng màu
trắng là Code area, vùng màu đỏ là Optional Disk signature, vùng màu xám không
sử dụng, vùng màu vàng là Partition table, và vùng màu xanh là dấu hiệu nhận
biết MBR.
Bảng thông tin phân vùng
Bảng thông tin phân vùng (Partition table) là bảng thông tin về các phân vùng trên đĩa cứng. Nó cho biết đĩa cứng vật lý hiện tại được chia thành mấy phân vùng, bắt đầu từ đâu, kết thúc ở đâu, kích thước mỗi phân vùng là bao nhiêu…v.v.
Theo tình huống ví dụ, tập tin Test.txt được tạo ra trong ổ
đĩa logic C:\. Vì vậy, cần phải định vị xem ổ đĩa C:\ bắt đầu ở đâu?
Dựa vào cấu trúc của MBR, định vị được vùng Partition table
(màu vàng) bắt đầu tại địa chỉ (offset) 0x01BE.
Partition table gồm 64 byte, được chia thành bốn phần bằng
nhau, các phần bằng nhau này gọi là các entry. Mỗi entry có kích thước 16 byte,
mô tả thông tin về một partition.
-
Entry 1: bắt đầu tại địa chỉ 0x01BE, kết thúc tại
0x01CD.
-
Entry 2: bắt đầu tại địa chỉ 0x01CE, kết thúc tại
0x01DD.
-
Entry 3: bắt đầu tại địa chỉ 0x01DE, kết thúc tại 0x01ED.
-
Entry 4: bắt đầu tại địa chỉ 0x01EE, kết thúc tại
0x01FD.
Cấu trúc của mỗi entry gồm:
(offset)
|
Số
byte
|
Mô tả
|
0x00
|
1
|
Trạng thái khởi động:
- 0x80:
có khả năng khởi động.
- 0x00:
không có khả năng khởi động.
- Giá
trị khác: không hợp lệ.
|
0x01
|
3
|
Địa chỉ bắt đầu của partition. Sử dụng địa chỉ
dạng CHS. Giá trị CHS được mô tả cụ thể trong ba byte dưới đây.
|
0x01
|
1
|
Chỉ số head của CHS, kí hiệu là H.
|
0x02
|
1
|
Chỉ số sector của CHS, được lưu trong sáu
bit thấp (bit 5–0); hai bit: thứ 6 và thứ 7 được chuyển qua thành bit thứ 8
và thứ 9 của chỉ số cylinder.
|
0x03
|
1
|
Tám bit thấp của chỉ số cylinder (chỉ số
của cylinder gồm 10 bit).
|
0x04
|
1
|
Kiểu
của partition (partition type).
|
0x05
|
3
|
Địa chỉ kết thúc của partition. Sử dụng địa
chỉ dạng CHS. Giá trị CHS được mô tả cụ thể trong ba byte dưới đây.
|
0x05
|
1
|
Chỉ số
head của CHS, kí hiệu là H.
|
0x06
|
1
|
Chỉ
số sector của CHS, được lưu trong sáu bit thấp (bit 5–0); hai bit: thứ 6 và
thứ 7 được chuyển qua thành bit thứ 8 và thứ 9 của chỉ số cylinder.
|
0x07
|
1
|
Tám bit
thấp của chỉ số cylinder (chỉ số của cylinder gồm 10 bit).
|
0x08
|
4
|
Sector bắt đầu của partition (địa chỉ dạng LBA
– Logical Block Address).
|
0x0C
|
4
|
Tổng số khối (block, sector) của partition,
được lưu trữ theo định dạng little-endian.
|
Theo tình huống ví dụ, Entry 1 trong partition table là
entry mô tả cho ổ đĩa C:\. Ổ đĩa C:\ chính là primary partition. (Hình 5).
Nội dung cụ thể của Entry 1 được thể hiện trong bảng sau:
Địa chỉ
(offset)
|
Số
byte
|
Mô tả
|
0x00
|
1
|
“80”: có khả năng
khởi động, đã được thiết lập là active.
|
0x01
|
3
|
“01 01 00”: ba
byte địa chỉ bắt đầu - dạng CHS.
|
0x01
|
1
|
1 (head)
|
0x02
|
1
|
1 (sector)
|
0x03
|
1
|
0 (cylinder)
|
0x04
|
1
|
“07”: NTFS
|
0x05
|
3
|
“FE FF FF”: ba
byte địa chỉ kết thúc - dạng CHS.
|
0x05
|
1
|
254 (head)
|
0x06
|
1
|
63 (sector)
|
0x07
|
1
|
1023 (cylinder)
|
0x08
|
4
|
“3F 00 00 00”: sector bắt đầu là 63.
|
0x0C
|
4
|
“01 3A 83 02”: tổng
số sector của ổ đĩa C:\ là 42154497; tính ra kích thước là ~20GB.
|
---------------------
Tài liệu đã tham khảo
[2] Lê Gia Công, FAT32, Khoa CNTT, Đại học Đà Lạt
[3] Brian Carrie, File System Forensic Analysis, Addison Wesley Professional, 2005
[3] Brian Carrie, File System Forensic Analysis, Addison Wesley Professional, 2005
-------------------
Cập nhật 2014/5/28
-------------------
Đọc thêm
He thong quan ly tap tin NTFS - 2 - MBR (tt)