본문 바로가기

File System

FAT32(File Allocation Table) File System Structure Analysis

이번에 알아볼 파일시스템은 FAT32 File System 입니다.

 

FAT32 는 FAT16 보다 좀더 복잡한 파일 구조를 가지고 있습니다.

FAT16 과 FAT32의 파일구조를 한번 확인해 보겠습니다.

FAT16 File System Reserved Area Component  Layout
FAT32 File System Reserved Area Component  Layout

FAT16의 Reserved Area의 크기는 1섹터로 고정이지만 FAT32의 Reserved Area 는 32섹터 입니다.

 

또한 총 32섹터 중에서 위의 레이아웃과 같이 0,6번 섹터는 Boot Sector 1,7번 섹터는 FSINFO  2,8섹터는 Boot Strap 입니다.

 

그렇다면 이번에도 Reserved Area을 살펴 보겠습니다.

 

1. Reserved Area (예약된 영역) - 0,6번 Sector : Boot Sector

 

예제 FAT32 파일의 0번 섹터인 Reserved Area를 확인해 보겠습니다.

FAT32 File System Hex Data

위의 구조를 바탕으로 Boot Sector를 알아 보겠습니다.

 

1.1 Jump Command to Boot Code (0x00 ~ 0x02, 3Byte)

Jump Command to Boot Code 라고도 불리지만 CPU Jump Command 라고도 불립니다.

CPU의 명령 실행 분기를 부트 코드로 옮기는 역할을 합니다.

아래는 Jump Command to Boot Code 에 들어가는 값이 파일시스템마다 어떻게 다른지 표현한 표입니다.

FAT32 File System Format - Jump Command Value

위의 예제 파일은 FAT32 파일시스템이기 때문에 EB 58 90 을 띄고 있습니다.

 

1.2 OEM(Original Equipment Manufacturing) ID (0x03 ~ 0x0A, 8Byte)

 

FAT32 File System Format - OEM ID

FAT12/16/32는 MSDOS5.0을 표시하고 있고 NTFS는 NTFS와공백을 표시하고 있습니다.

일종의 제조사 ID 같은형식으로 박혀 있는 시그니처 입니다.

 

1.3 BPB(BIOS Parameter Block) (0x0B ~ 0x59, 78Byte)

 

BPB 영역은 내용이 많기 때문에 전체 Layout을 한번 확인해 보겠습니다.

FAT32 File System Format - BIOS Parameter Block Layout

BPB를 확인해 보면 진짜 다양한 정보들을 포함하고 있으며 BPB 마지막 부분을 보면 FAT32이라고 되어있는데 파일 시스템 종류가 적혀 있습니다.

파티션 정보들을 포함하고 있어서 BPB에 포함되어 있는 정보를 바탕으로 파일시스템이 부팅을 진행하게 됩니다.

 

BPB에 포함되어 있는 내용을 확인해 보겠습니다.

FAT32 File System Format - BIOS Parameter Block Data

위와같이 BPB 영역에서 여러 중요 정보를 획득 할 수 있습니다.

 

1.4 Boot Code Error Message (0x5A ~ 0x1FD, 419Byte)

 

예시 파일을 바탕으로 위 영역을 확인해 보면 아래와 같습니다.

FAT32 File System Format - Boot Code Error Message

1.5 Signature (0x1FE ~ 0x1FF, 2Byte)

 

VBR영역의 시그니처는 0x55AA 로 고정입니다.

 

 

2. Reserved Area (예약된 영역) - 1,7번 Sector : FSINFO

 

FSINFO 라고 해서 File System Information 이라고 이야기 합니다.

FSINFO 구조체는 부트 섹터 다음에 바로 위치해있습니다.

해당 구조체는 전체적인 클러스터의 여유 공간 관리에 대한 내용이 담겨 있습니다.

 

FAT16에서는 사용 가능한 클러스터 공간을 FAT Entry를 통해서 탐색을 했었습니다.

FAT32에서는 FSINFO 구조체의 필드를 이용해서 빠르게 탐색이 가능합니다.

 

FSINFO 구조체의 Layout을 한번 확인해 보겠습니다.

FAT32 File System Format - FSINFO  Layout

FSINFO에 포함되어 있는 내용을 확인해 보겠습니다.

FAT32 File System Format - FSINFO Data

위와같이 FSINFO 구조체에서 여러 중요 정보를 획득 할 수 있습니다.

여유 클러스터의 크기를 한번 구해보면 아래와 같습니다.

FAT32 File System Format - Number of free Clusters

0xEE2F4 를 10진수로 바꿔 보면 975604 클러스터 라는 것을 알 수 있습니다.

 

BPB 영역에 있는 클러스터당 섹터수 및 섹터 당 바이트 수를 한번 확인해 보겠습니다.

 

섹터당 바이트 수 : 0x0B~0x0C : 0x0200 = 512 바이트

클러스터당 섹터 수 : 0x0D~0x0D : 0x08 = 8섹터

 

클러스터당 바이트 값은 4096 바이트 입니다.

 

975604 * 4096 = 3996073984 바이트 입니다.

 

실제로 해당 디스크의 크기를 확인해 보면 아래와 같습니다.

FAT32 Disk Attribute

사용 가능한 공간과 같은 크기인 것을 알 수 있습니다.

 

4. FAT(File Allocation Table) Area - 크기 유동적

 

FAT Area는 FAT16과 마찬가지로 2가지의 영역으로 나뉘어져 있는데, 하나는 원본 FAT Area 나머지 하나는 백업용 FAT Area으로 구성 되어 있습니다.

 

FAT Area를 찾는 방법은 아래와 같습니다.

BPB 영역 중에서 0xE~0xF 에 있는 Reserved Sector Count 를 확인 하면 FAT 영역이 나오기 전까지 예약된 영역이 몇섹터 인지를 알 수 있습니다.

FAT32 File System Format - Reserved Sector Count

0x474로 1140 섹터 라고 되어 있습니다.

1140 섹터로 가보면 아래와 같이 FAT 영역이 존재 하는 것을 알 수 있습니다.

FAT32 File System Format - FAT32 Area #1 Data

앞에서 언급한 구조를 보았을 때 FAT Area는 2개로 구성이 되어있습니다.

FAT32 File System Format - FAT Area

그렇다면 먼저 1개의 FAT Area의 사이즈를 알아 보겠습니다.

사이즈도 마찬가지로 BPB 영역에 존재 하며 0x24~0x27의 데이터인 FAT32 Size 라는 곳에 적혀 있습니다.

FAT32 File System Format - FAT32 Size

0x1DC6 은 7622 섹터로 FAT Area의 크기는 7622섹터 인것을 알 수 있습니다.

 

1140섹터 + 7622섹터 = 8762섹터에 가보면 백업용 FAT Area가 존재 하는 것을 확인 할 수 있습니다.

FAT32 File System Format - FAT32 Area #2 Data

위의 FAT Area에서는 처음 2개의 엔트리에 특별한 값을 저장하고 그 뒤의 엔트리에서는 클러스터를 관리 하는 테이블 들이 나열 되어 있습니다.

FAT32의 FAT Entry의 크기는 FAT16과 달리 4바이트를 가지고 있습니다.

FAT32 File System Format - FAT32 Area Layout

FAT Area  이후에 오는 Root Directory의 시작 클러스터는 2번 클러스터 입니다.

FAT 엔트리는 아래의 표와 같이 특별한 값을 가지게 됩니다.

FAT32 File System Format - FAT32 Area Cluster Data

앞의 예제 파일에서는 대부분 0x?FFFFFF8 또는 0x?FFFFFFF 밖에 없는 것을 확인 할 수 있는데 그 이유는 해당 파일 시스템은 포맷을 하자마자 바로 분석하는 HEX값이기 때문에 그렇습니다.

 

FAT32 Area #2 의 시작 섹터가 8762섹터 이고 사이즈가 7622섹터 이기 때문에 8762섹터 + 7622섹터 = 16384 섹터에 Root Directory 가 존재 합니다.

FAT32 File Syst em Root Directory Hex Data

5. Data Area

 

FAT 16과 내용이 똑같기 때문에 아래의 주소에서 설명을 이어서 보시면 될것 같습니다.

 

FAT16(File Allocation Table) File System Structure Analysis : https://blog.forensicresearch.kr/1