FAT32 File Structure

g0ni·2024년 11월 18일

FAT32 File

목록 보기
1/2

FAT32


MS-DOS 파일 시스템 중 하나, 크게 FAT 12, 16, 32 로 나눌 수 있으며 FAT 뒤에 붙는 숫자의 경우 클러스터 번호의 비트와 같기 때문에 종류 별로 파일 시스템에서 관리하는 최대 클러스트의 개수가 달라짐.

FAT32 방식으로 포맷을 할 경우 지원하는 드라이브의 최대 크기는 32GB.
개별 파일 하나당 저장할 수 있는 최대 크기는 4GB. (고용량 파일을 다루는데에 단점이 있음.)

FAT32 파일 시스템 구조


Reserved Area / FAT Area #1, #2 / Data Area 로 나뉘어져 있다.

1. Reserved Area (= VBR?)


Volume Boot Record 로 부팅 가능한 파티션(볼륨)의 첫 번째 섹터에 존재.
Boot Sector, Volume size, FAT 위치, $MFT 위치 등 볼륨에 관한 정보를 포함.

Boot Sector / FSINFO / Boot Strap / More reserved sectors 로 나뉜다.

0, 6번 섹터의 경우 Volume Boot Sector (원본과 백업본 위치)
1, 7번 섹터의 경우 FSINFO(File System Information) 구조체
2, 8번 섹터의 경우 Boot Strap Code

※ BIOS Parameter Block을 포함하는 섹터를 VBR이라고 부르나?

1.1 Boot Sector (0, 6 Sector)


OffsetSize (byte)Field Name
0x0000 ~ 0x00023Jump command to Boot Code
0x0003 ~ 0x005957BPB (BIOS Parameter Block)
0x005A ~ 0x01FD420Boot Code / Error msg
0x01FE ~ 0x01FF2Signature (0x55AA)

Boot Sector는 다시 Jump command, BIOS Parameter Block, Error message, signature 영역으로 구분.
Jump command와 BIOS Parameter Block 영역으로 부터 볼륨에 대한 정보를 얻을 수 있음.

1.1.1 BPB (BIOS Parameter Block)**


OffsetSize (byte)Field NameDescription
0x0003 ~ 0x000A8OEM ID운영체제 버젼별 ID
0x000B ~ 0x000C2Bytes Per sector섹터 당 바이트 수
0x000D1Sectors Per cluster클러스터 당 섹터 수
0x000E ~ 0x000F2Reserved sector count예약된 영역 섹터의 수 (FAT Area 시작)
0x00101Number of FAT tablesFAT 테이블의 수
0x0011 ~ 0x00122Root directory entry count
0x0013 ~ 0x00142Total sector 16
0x00151Media Type
0x0016 ~ 0x00172FAT size 16
0x0018 ~ 0x00192Sector Per track
0x001A ~ 0x001B2Number of heads
0x001C ~ 0x001F4Hidden sectors
0x0020 ~ 0x00234Total sector 324Byte크기의 파티션 총 섹터 수
0x0024 ~ 0x00274FAT size 32FAT 하나의 영역이 가지는 4Byte크기의 섹터수
0x0028 ~ 0x00292Ext flags
0x002A ~ 0x002B2FAT32 system version파일시스템의 주버전과 하위버전
0x002C ~ 0x002F4Root directory cluster offsetroot 디렉토리가 위치한 클러스터 값
(FAT32 경우 정해져있지않지만 보통 클러스터 2번 사용)
0x0030 ~ 0x00312FSINFO offset
(= File System Information)FSINFO 구조체가 저장된 섹터 번호
(보통 0x01)
0x0032 ~ 0x00332Backup boot sector백업된 부트 섹터의 위치
(보통 0x06)
0x0034 ~ 0x003F12Reserved Area
0x00401INT 0x13 drive number
0x00411Not used
0x00421Boot signature
0x0043 ~ 0x00464Volume serial number
0x0047 ~ 0x005111Volume label (ASCII)
0x0052 ~ 0x00598File system type해당 파일 시스템의 타입

1.2 FSINFO (File System Information)


OffsetSize (byte)Field NameDescription
0x0000 ~ 0x00034Signaturesignature (0x52526141)
0x0004 ~ 0x01E3480Not UsedNot Used
0x01E4 ~ 0x01E74Signaturesignature (0x72724161)
0x01E8 ~ 0x01EB4Number of free Clusters사용 가능한 클러스터 수
0x01EC ~ 0x01EF4Next tree Cluster사용 가능한 클러스터 시작 위치
0x01F0 ~ 0x01FD14Not UsedNot Used
0x01FE ~ 0x01FF2Signaturesignature (0x55AA)

2. FAT Area


FAT 파일 시스템은 FAT 영역에 의해 관리되고, 백업본이 하나 더 있어서 두 개(FAT #1, FAT #2)로 나뉨.
같은 값을 가진 영역이 두 개이고, FAT #2는 FAT Mirror라고도 말함.

FAT Area는 Data Area의 cluster 할당 상태를 표시.
파일 시스템 종류에서 “FAT” 뒤에 붙은 숫자를 기준으로 할당 상태를 표시하므로, FAT32는 32bit(=4bytes)로 Data Area의 시작 cluster부터 마지막 cluster까지의 할당 상태를 표시함.
한 섹터 당 128개의 클러스터 표현이 가능. (512 byte / 4 byte = 128 cluster)

FAT Area의 시작 위치


FAT Area의 시작 위치를 찾기 위해서는 BPB - Reserved sector count 를 확인.
ex) 0x106E 는 10진수로 4,206.
즉, 4,206 sector가 FAT Area의 시작이라고 볼 수 있음.

FAT Area의 크기


FAT Area의 크리는 BPB - FAT32 Size 를 확인.
ex) 0x07C9 는 10진수로 1,993.
즉, FAT Area #2의 시작위치 = FAT Area #1 시작 위치 (4,206 sector) + FAT Area 길이 (1,993 sector) = 6,199 sector.

FAT Structure


FAT32에서는 1개의 sector 당 128개의 FAT Entry를 표현할 수 있다.
각 FAT Entry는 Data Area의 cluster와 대응됨. 그러나 FAT Entry의 0번부터 대응되는 것은 아님.

FAT Area의 첫 4 bytes와 그 다음 4 bytes, 총 8 bytes는 예약된 영역.
각각 FAT Entry 0번은 Media Type, FAR Entry 1번은 Partition Status를 나타냄.

그리고 2번부터 실제 Data Area의 cluster와 대응됨.
즉, FAT Entry 2번부터 Data Area의 각 cluster가 사용되고 있는지의 유무와 특정 파일이 점유하고 있는 cluster의 위치를 나타냄.

FAT Entry ValueCluster StatusDescription
0x ?000 0000미할당 상태새로운 파일 및 디렉터리 저장시 0x00을 찾아, 할당 정책에 따라 할당함
0x ?000 0001-Reserved
0x ?000 0002 ~ 0x ?FFF FFEF할당 상태클러스터가 점유하고 있는 파일의 다음 데이터가 있는 클러스터를 가리킴
0x ?FFF FFF0 ~ 0x ?FFF FFF6-Reserved
0x ?FFF FFF7불량 클러스터배드 섹터가 포함된 클러스터가 발견된 경우, 이후 사용되지 않음
0x ?FFF FFF8 ~ 0x ?FFF FFFF할당 상태파일이 하나의 클러스터만 사용하거나 파일에 할당된 마지막 클러스터. 즉, 파일의 끝

3. Data Area


트리 형태로 표현되는 FAT 파일 시스템에서, 가장 중요한 요소는 최상위 Root Directory.
이전에는 Directory Entry의 크기가 32 bytes로 최대 Entry의 제한이 있어 Root Directory 내에 최대 생성할 수 있는 파일 및 디렉터리의 제한이 있었지만, FAT32에서는 Root Directory에 생성할 수 있는 파일, 디렉토리의 개수 제한이 없어짐.

Data Area - Root Directory 위치 찾기


FAT32의 Root Directory는 DATA Area의 어느 곳에나 올 수 있음. (기본적으로 FAT Area가 끝난 바로 다음에 옴.)
만약 임의의 위치로 이동한다면, BPB의 Root Directory Cluster Offset 을 통해 찾을 수 있음.

Data Area Structure


Data Area에 저장되는 데이터는 크게 디렉토리 및 파일로 나뉨.
디렉토리는 디렉토리 내부에 포함되는 하위 디렉토리와 파일 이름, 확장자, 시간 정보, 크기 등을 표현하기 위해 Directory Entry라는 구조를 사용함.

Size (byte)Field NameDescription
1File Name or Status Byte0x5E : 삭제된 파일, 0x00 : 비어 있는 파일
7File Name최대 8바이트. 남은 공간은 0x02로 표현. 영문 : ASCII, 한글 : 한글 완성형
3File Extension확장자 표현. 최대 3자리. 남은 공간 0x02 표현 디렉토리의 경우에도 0x02로 채워짐
1Attributes0x01(읽기전용) 0x02(숨긴파일) 0x04(시스템파일) 0x08(해당 파일의 이름이 곧 볼륨 이름 루트 디렉토리에 위치 시작 클러스터는 0) 0x0F(긴 파일 이름 엔트리, 8 bytes 초과일 시 LFN) 0x10(디렉토리) 0x20(일반파일)
1Reserved (NT Resource)Window NT 예약된 공간. 0으로 채워져 있음.
1Created Time (tenths of second)파일이 생성된 시간을 1/10초 단위로 기록
2Created Time파일 생성 시간
2Created Date파일 생성 날짜
2Last Accessed Date마지막 접근 날짜
2Starting Cluster High 2 Bytes파일이 위치한 시작 클러스터의 상위 2byte
2Last Written Time마지막 수정 시간
2Last Written Date마지막 수정 날짜
2Starting Cluster Low 2 Bytes파일이 위치한 시작 클러스터의 하위 2byte
4File Size바이트 단위의 파일 크기

SFN (Short File Name) / LFN (Long File Name)?


Data Area - Attributes 값이 0x0F인 경우. 즉, 8 byte 초과의 크기로 File Name을 표현해야 할 때, LFN으로 표현해야함.

SFN structure


32바이트 구조를 가짐.

OffsetSize (byte)Field NameDescription
0x00 ~ 0x077File Name파일 이름
0x08 ~ 0x0A3Extension파일 확장자. 확장자가 없을 시 0x202020으로 채워짐.
0x0B1Attr파일 속성. (0x01: 읽기 전용파일, 0x02: 숨긴 파일, 0x04: 운영체제 시스템 파일, 0x08: 속성값 대신 디스크 볼륨 레이블을 포함한 엔트리를 나타냄.)
0x0C ~ 0x0D2Reserved예약된 영역
0x0E ~ 0x0F2Create Time파일 생성 시간
0x10 ~ 0x112Create Date파일 생성 날짜
0x12 ~ 0x132Last Accessed Date파일 마지막 접근 날짜
0x14 ~ 0x152Starting Cluster Hi시작 클러스터 상위 offset값
0x16 ~ 0x172Last Written Time파일 마지막 수정 시간
0x18 ~ 0x192Last Written Date파일 마지막 수정 날짜
0x1A ~ 0x1B2Starting Cluster Low시작 클러스터 하위 offset값
0x1C ~ 0x1F4File Size파일 사이즈

LFN structure


N 개의 LFN File Structure 와 SFN File Structure로 구성됨.

ex)

Seq Num의 경우 0x40 or LFN 파일 구조 개수로 하여 값이 들어감.

if LFN 파일 구조 개수가 2개이면 마지막 LFN 구조의 Seq Num에는 0x42가 들어가고, 기본 LFN 구조에는 0x1이 들어간다.

하나의 LFN 파일 구조에는 13 byte의 파일명이 들어가기 때문에 13 byte를 초과하면 LFN 파일의 개수가 하나씩 늘어나게 된다.

FileName: 2 byte에 파일 명이 1 글자 씩 들어간다.
Attr: 항상 0x0F 값을 갖는다.
Reserved: Type을 나타내기도 하는데, 매번 0x00 값을 갖는다.
Checksum: SFN에 존재하는 파일명에 대응하는 값이 채워진다.
First Cluster Low: 해당 파일의 내용이나 해당 디텍터리의 하위 데이터들이 들어있는 클러스터 번호를 가지고 있다.

https://hec-ker.tistory.com/268
https://blog.naver.com/eslectures/80138263290
https://gsk121.tistory.com/265
https://blog.forensicresearch.kr/2

profile
Let it rip!

0개의 댓글