안녕하세요 EnIaC 입니다.


2016년 기준 이제 20살이 되는 해 입니다만 좀 시간이 널널해질 줄 알았는데 오히려 바빠지는게 신기할 따름이네요.


오늘 배워볼 내용은 FAT Area 입니다. 하지만 글 제목에는 FAT Area 와 FAT32 Table 이 두개를 적어 놓았는데요, 이번 이유 또한 저번 [제 7강] 에 이유와 동일합니다. 왜 그런지는 모르겠으나 FAT Area 라는 용어와 FAT32 Table 이라는 용어를 동시에 사용 하더라구요. 저도 약 3~4년 전에 FAT32 와 NTFS 를 공부하면서 용어가 곂치는 일 때문에 고생좀 했습니다.



1. FAT Area (FAT32 Table)

FAT Area 는 FAT 파일 시스템에서 가장 중요한 정보를 담고 있는 곳이라고 할 수 있습니다. 바로 데이터 기록과 관리에 매우 직접적인 관여를 하는 부분이기 때문입니다. 우선 아래 그림을 통해 FAT Area 가 무엇인지 레이아웃을 보도록 하겠습니다.


[그림 1. FAT Area]


위 그림을 보면 Reserved Area 바로 뒤에 FAT Area 가 위치함을 알 수 있습니다. FAT 영역은 원문 그대로 파일 할당 테이블이라는 뜻이며 다시 말해서 데이터 영역에 저장된 파일들의 할당 관계를 표시하는 테이블임을 알 수 있습니다. 따라서 데이터를 클러스터(Cluster) 단위로 저장함을 이미 알고 있는 상태에선 FAT Area 에서는 클러스터(Cluster) 에 대한 정보가 기록되어 있음을 대충 짐작할 수 있습니다. FAT Area 는 다음 [그림 1-1] 과 같이 두개로 나누어지는데 두 번째 FAT Area 는 첫 번째 테이블이 손실, 훼손 등 각종 원치 않는 변경 사항이 일어났을시 대비하기 위한 백업 영역입니다. 이전 FAT 버전에서는 백업 BR 조차 없는 경우가 많았는데 앞으로 데이터에 대한 안정성이 대두되는 만큼 백업 영역에 신경을 쓴 것 같기도 합니다. 좀더 상세한 그림으로 보겠습니다.



[그림 1-1. FAT Area Detail]


[그림 1-1] 처럼 FAT Area 는 총 두가지로 나누어져 있으며 모두 같은 데이터를 저장합니다. FAT#1 이 원본 데이터 즉, 실제로 사용되는 데이터 값이고 FAT#2FAT#1 의 백업 데이터 영역이며 FAT#1 에 문제가 발생 시 FAT#2 값으로 덮어 씌우게 됩니다. 이러한 백업 방식은 PC 가 작업 도중 예상치 못한 PC 종료로 인한 데이터 손실을 최소화 하기 위해 일종의 안전장치로 개발 되었다고 합니다. 서버단에서 전기 공급이 중단 되었을때 데이터 손실을 최소화 하는것이 1차적인 목적이기도 하니까요. 물론 백업본의 위치는 바로 뒷 영역에 위치하게 됩니다. 이처럼 FAT 영역은 예약된 영역에 연속하여 위치하게 됩니다.


FAT Area 의 목적은 데이터 영역(Data Area) 에 저장된 파일의 클러스터(Cluster) 할당 관계를 테이블 형태로 보여주는 것 입니다. FAT12/16 의 경우 2Byte, FAT32 는 4Byte 를 통해 Data Area 의 시작 클러스터(Cluster) 부터 마지막 클러스터(Cluster)까지 할당 관계를 표시하게 됩니다. 다시 말해서, 클러스터가 만약 4KB 의 크기를 갖는다고 한다면, FAT32 에서는 각각 클러스터가 FAT Area 의 4Byte 씩 대응된다는 의미가 됩니다.


FAT32 에서 4Byte 씩 클러스터를 표현하므로 각 섹터(512Byte)에는 128개의 클러스터를 표현할 수 있으며 만약, FAT Area 가 100개의 섹터 크기를 갖고, 클러스터 크기가 4KB 라면 Data Area 의 총 크기는 50MB (128 * 100 * 4096 Byte)가 될 것 입니다. 또한 Data Area 에 저장된 파일들은 연속적인 클러스터에 저장될 수 있지만, 조각나 저장될 수 있을 것 입니다. FAT Area 는 이러한 조각난 클러스터의 연결 상태까지도 표현해 주기도 합니다. 따라서, 할당 상태와 클러스터 연결 상태를 표현하는 방법에 대해 알아보도록 하겠습니다.




2. FAT Entry (FAT 엔트리)

앞서 살펴본 클러스터에 대응되는 FAT Area 의 각 바이트 (2:FAT12/16, 4:FAT32)는 FAT Entry 라는 용어로 부릅니다. 각 FAT Entry 에서는 데이터 영역의 각 클러스터에 대응하게 됩니다. 다음은 FAT Area 를 좀더 자세히 살펴본 [그림 2] 입니다.



[그림 2. FAT Entry Detail]


위 4Byte 씩 표현된 부분이 FAT32 에서 데이터 영역의 각 클러스터를 표현하는 FAT Entry 입니다. 단, 특이한 부분은 데이터 영역에 클러스터가 0번부터 시작하는 것이 아닌 2번 부터 시작하게 됩니다. 이러한 이유는 FAT Area 의 1,2 FAT Entry는 별도의 용도로 예약되어 있는데, 첫 번째 FAT Entry 는 미디어 타입을 나타내며 두 번째 FAT Entry 는 파티션의 상태를 나타내게 됩니다. FAT Entry 는 다음과 같은 특벽한 값을 갖을 수 있습니다. 표에 나타나지 않은 값은 다음 클러스터의 값을 가리키게 됩니다.



FAT12FAT16FAT32설명
 0x000 0x0000 0x00000000 해당 클러스터가 사용이 가능하다는 의미로, 비할당 상태를 나타낸다. 파일 시스템을 새롭게 포맷하거나 파일을 삭제할 경우에 나타나는 값으로, 파일을 할당하고자 할 경우 FAT 영역을 검색하여 0x00000000 인 클러스터에 할당하게 된다. 물론 할당은 각 파일시스템에서 사용하는 할당 정책(First Fit, Best Fit, Next Available..)에 의존한다.
 0xFF8 0xFFF8 0x?FFFFFF8 파일의 끝(End-Of-Maker)을 나타낸다. 즉, 파일에 할당된 마지막 클러스터를 의미한다.
 0xFF7 0xFFF7 0x?FFFFFF7 배드 클러스터를 나타낸다. 클러스터 내에 한 개 이상의 배드 섹터가 발생하여 해당 클러스터에 데이터를 저장할 수 없음을 나타낸다.



[그림 3. FAT Entry Detail]


다음은 FAT Area 의 첫 섹터를 덤프한 결과 입니다. 0, 1번째 FAT Entry 는 예약 되어 있으므로 저희가 굳이 직접 살펴볼 내용은 아니며 저희의 분석 대상은 2번 Cluster 부터 입니다. 우선 FAT Entry 2 의 값이 0x0FFFFFFF 값을 가지므로 해당 클러스터는 파일의 끝을 의미하게 됩니다. 즉, End Of Cluster 라고도 하며 축약하여 EOC 라고 부르기도 합니다. 따라서, 데이터 영역의 첫 클러스터 (2번 클러스터)를 갖는 파일은 하나의 클러스터를 사용하게 됨을 알 수 있습니다. 다시 말해, 클러스터가 4KB 라고 가정 하였을 때 파일 크기가 4KB 보다는 작다 라는 의미가 됩니다. FAT Entry 3번 즉, Cluster 3번 또한 같은 의미 입니다.


하지만 FAT Entry 4번 즉, Cluster 4번은 0x05 값을 갖습니다. 즉, FAT Entry 5번(Cluster 5번) 을 가리키고 있는 것 입니다. FAT Entry 5(Cluster 5)는 다시 0x06 값으로 FAT Entry 6 (Cluster 6)을 가리킵니다. 이렇게 하나씩 따라가다보면 FAT Entry 8(Cluster 8) 번이 마지막 엔트리가 된다는 사실을 확인할 수 있습니다. 따라서 데이터 영역의 3번째 클러스터부터 할당된 파일은 총 5개의 클러스터를 사용 합니다. 즉, 16~20KB 사이의 크기를 갖는다는 의미가 됩니다. (4KB * 5 = 20KB 즉, 최소 값이 16이며 최대값이 20이다) 파일시스템이 포맷 된 후 처음 할당 되어진 파일들이며, 그 크기가 작기 때문에 연속적으로 할당되어 있지만 파일의 할당, 삭제가 빈번히 이루어진 후 (이후 오랫동안 사용할 경우) 파일이 항상 연속적으로 저장되어 있을 가능성은 점점 낮아진다. 어떤 파일이 어떤 클러스터 사이에 존재할지 모르기 때문입니다.


결과적으로 보자면 FAT Area 는 FAT Entry 를 통해 데이터 영역의 클러스터 할당 상태 및 연결 상태를 표현해 줍니다. 파일의 정확한 크기 및 이름, 확장자, 시간정보 등을 얻고 싶다면 이후에 살펴본 데이터 영역의 디렉터리 엔트리(Directory Entry) 구조를 확인하면 알 수 있다. 디렉터리 엔트리는 파일의 상세 정보를 담고 있으며 쉽게 말해 우리가 윈도우에서 우클릭하여 속성을 볼때 불러오는 내용이 바로 디렉터리 엔트리의 정보라고 볼 수 있습니다.


[그림 4. 우클릭 속성]



[그림 4-1. 파일 상세 속성]


[그림 4] ~ [그림 4-1] 과 같이 파일에 대한 속성을 기록하고 불러오는 부분이 디렉터리 엔트리 라고 보시면 될 것 같습니다.


만약, 파일을 저장 한 후에 삭제하면 해당 파일이 저장된 클러스터에 대응되는 FAT Entry 는 모두 0x00 으로 초기화 되게 됩니다. 그리고 이후에 살펴본 디렉터리 엔트리에 삭제 플래그를 기록하게 됩니다. (0xEF 로 디렉터리 엔트리 NAME 부분에 기록합니다.) 하지만 데이터가 저장된 데이터 영역의 데이터는 접근하지 않기 때문에 삭제한 파일도 복구할 수 있습니다.


그러나, FAT Area 의 각 Entry 의 연결 상태가 사라져 버리기 때문에 조각나 저장되었던 파일을 삭제한 경우라면 파일을 완벽히 복구하긴 힘듭니다.


다음 강의에서는 FAT32 Data 영역 즉, Directory Entry (디렉터리 엔트리) 영역을 살펴보는 시간을 갖도록 하겠습니다.


감사합니다.


WRITTEN BY
EnIaC
WhiteHackerGroup 『LockDown』 EnIaC 입니다.

,