2022. 1. 6. 14:56ㆍForensic
FAT32는 크게 3가지의 구조로 구성되어있다.
1. Reserved Area
2. FAT Area
3. Data Area
그중에서 Reserved Area에는 BR Sector부분이 있고 FAT Area는 주로 쓰는 #1부분과 #1의 백업부분인 #2 마지막으로
데이터를 직접 저장하고 관리하는 Data Area에는 Rood Directory부분이 있다.
점선은 가변적임을 의미한다.
이번 시간에 알아 볼 부분은 Reserved Area에서도 제일 중요한 BR부분이다.
1.Boot Record(BR)
▶ 볼륨의 첫 번째 섹터(512Byte)
▶ Windows를 부팅시키기 위한 코드와 FAT 설정 값이 있다.
▶Boot Record가 손상되면 Windosws는 해당 볼륨을 인식할 수 없다.
1-1. BPB(BIOS Parameter Block), 78Btye
내용 | 의미 |
Jump Boot Code(3) | 부트 코드로 점프하기 위한 명령어 (0xEB58은 어셈으로 JMP 0000005A, 90은 NOP) |
OEM ID(8) | 운영체제 버전별 ID(Linux는 mkdosfs) |
Byte Per Sector(2) | 섹터 당 바이트 수 512, 1024, 2048, 4096중 하나이다. |
Sector Per Cluster(1) | 클러스터 당 섹터 수 0보다 큰 값이 오며, 2의 배수여야 한다. |
Reserved Sector Count(2) | 예약된 영역 섹터의 수 |
Num of FAT Tables(1) | Volum의 FAT 테이블의 수 |
Hidden Sector(4) | 볼륨 앞에 숨겨진 섹터 수 |
Total Sector 32(4) | 볼륨상의 총 섹터 수 FAT32인 경우 0이 아니여야 한다. |
FAT Size 32(4) | FAT 영역의 섹터 수 (FAT #1 한 개의 섹터 수) |
Root Directory Cluster(4) | 루트 디렉토리의 클러스터 값, FAT32는 루트 디렉토리가 데이터 영역에 어디 와도 상관없다. 디렉터리의 시작 위치 |
File System Information(2) | FSInfo 구조체의 위치를 가리킨다.(섹터 단위) |
Boot Record Backup Sector(2) | Boot Record를 백업했다면 백업 위치가 있는 섹터번호를 적는다. 일반적으로 6이며, 백업이 없다면 0이 저장됨 |
1-2. Boot Code Error Message 419Byte
1-3. Signature 2Btye
섹터 마지막 2Btye는 0xAA55이다.
2. Reserved Area
▶ FAT File System에서 각 Cluster의 상태 값을 갖고 있는 연속된 공간이다.
▶ 각 Entry의 FAT32는 4Byte로 구성되며 각각의 Cluster와 매칭된다.
▶ Entry 0 : Media Type Entry 1 : Partition state Entry 2 ~ :Data Cluster
-0x0FFFFFFF는 EOC(End Of Cluster)를 의미한다.
위 그림을 간단하게 나타내면
Meida Type | Partition State | Cluster2 | Cluster3 |
Cluster4 | Cluster5 | Cluster6 | Cluster7 |
Cluster8 | Cluster9 | Cluster10 | Cluster11 |
Cluster12 | Cluster13 | …. | …. |
▶Media Type ▶Cluster2
HDD인 경우 F8 FF FF OF Root Directory의 Cluster
▶Partition State ▶Cluster 3~
평상시엔 FF FF FF FF 다른 DATA들의 할당 Cluster
FAT Entry Value | Description |
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 | 파일이 하나의 클러스터만 사용하거나 파일에 할당된 마지막 클러스터. 즉, 파일의 끝(EOC) |
3. FAT32 Directory Entry
Windows의 FAT파일 시스템에서 파일의 이름, 확장자, 위치, 크기, 시간 정보 등을 표현하기 위한 구조체이다.
하나의 파일 및 디렉터리는 각각의 메타정보를 표현하기 위해 하나의 Directory Entry를 가진다
File Name |
0x00 ~ 0x07까지 이름 값이 들어간다. 기본적으로 아스키 코드값이 들어 있지만 0x00 offset에 특수한 값이 들어가는경우가 있다. 0x00 : 파일이름이 사용된 적이 없음 0xE5 : 파일이 이미 삭제 되었지만 파일의 이름이 확인가능 0x05 : 파일명의 첫번째 문자가 'σ'인 경우 |
File Extension | 0x08 ~ 0x0A은 파일의 확장자가 들어있는 공간 확장자가 없는 파일이라면 0x202020으로 채워진다 |
File Attribute |
0x0B는 파일의 속성을 의미한다. 0x01 : 읽기 전용 0x02 : 숨긴 파일 0x04 : 운영체제 시스템 파일 0x08 : 속성값 대신 디스크 볼륨 레이블을 포함한 엔트리 0x10 : 서브 디렉터리( = 디렉터리 파일) 0x20 : 일반파일 |
Time Stamp Data |
Create Time : 생성 시간 Create Data : 생성 날짜 Last Accessed Data : 마지막 접근 날짜 Last Written Time : 마지막 수정 시간 Last Writeen Data : 마지막 수정 날짜 |
Starting Cluster | 파일의 내용이 몇번째 Cluster에 있는지 알 수 있다. |
File Size | 파일 사이즈를 알 수 있는 부분 입니다. |
Name : 0x 48 45 4C 4C 4F 57 7E 31
Extension : 0x 54 58 54
Attr : 0x20
Create Time : 0xC9 72
Created Date : 0x26 54
Last Accessed Date : 0x26 54
Starting Cluster Hi : 0x00 00
Last Written Time : 0xC7 70
Last Written Date : 0x26 54
Starting Cluster Low : 0x06
File Size : 0x0C
3.1 LFN(Long File Name)
Sequence Number | 0x40과 XOR연산을 하여 표시하기 때문에 몇 개의 LFN이 있는지 확인 할 수 있다. |
Attribute | 항상 0x0F값을 가지고 있다 |
Reserved Area(Type) | 예약된 영역으로 Tpye을 나타내기도 하지만 매번 0x00으로 채워진다 |
CheckSum | SFN에 존재하는 파일명에 대응하는 값이 CheckSum 값으로 채워지게 된다. |
※ Seq Num, File Name, Attribute value, Tpye, CheckSum 중 어떠한 값이라도 잘못 들어가면 인식되지 않는다.
0x000D001A0부터 2줄씩 LFN이 생성된걸 알 수 있다.
맨 앞의 Sequence Numberdl 0x04 ~ 0x01까지 있고 마지막에 Directory Entry가 있다.
'Forensic' 카테고리의 다른 글
NTFS(New Technology File System) 4일차 NTFS Attribute Header (0) | 2022.03.06 |
---|---|
NTFS(New Technology File System) 3일차 NTFS 속성 (0) | 2022.02.11 |
NTFS (New Technology File System) 2일차(MFT) (0) | 2022.02.03 |
NTFS (New Technology File System) 1일차(VBR) (0) | 2022.01.20 |
Forensic 1일차 Filesystem (0) | 2022.01.03 |