본문 바로가기

[+] Forensic

File System - FAT (10)

이번 글에서는 디렉토리 엔트리에 대해서 알아 볼 것이다.

디렉토리 엔트리에는 디렉토리의 이름과 여러 데이터를 대신 설명 해주는 메타데이터가 포함되어 있다. 

이러한 엔트리들은 파일과 디렉토리 모두에 할당이 되며 엔트리 위치는 할당 된 파일이나 디렉토리의 부모 디렉토리 클러스터에 위치하게 된다.

엔트리에 저장되는 이름의 최대 길이는 확장자를 제외하고 8글자이며, 확장자는 최대 3글자이다.

디렉토리 엔트리의 바이트 오프셋은 아래와 같으며 부가적 설명이 필요한 항목은 따로 설명을 하도록 하겠다.

 

[그림 1 - 디렉토리 엔트리 바이트 오프셋]

 - 파일이름의 첫 문자 또는 할당 상태 : 이 항목은 디렉토리나 파일의 이름 첫 번째 문자가 설정되는 부분이며 해당 디렉토리 엔트리가 비 할당 상태일 시 문자대신 "0xE5" 또는 "0x00" 이 설정된다.


 * 참고 : 파일명이 8글자 이하일 경우 사용되지 않는 바이트는 "스페이스(0x20)" 으로 채워진다.

 - 파일의 속성 : 아래 표를 참고하기 바란다.


[그림 2 - 파일속성]

표를 참고하여 보면 위 이미지의 속성 타입은 디렉토리가 된다.

 - 첫 번째 클러스터 주소 상위 2바이트 : FAT 12/16의 경우 이 값은 0으로 설정된다. 위 이미지는 FAT 16 이미지이기 때문에 0으로 설정되어 있다.

 - 파일 크기 : 이 항목은 디렉토리 일때 0으로 설정된다. 위 이미지의 디렉토리 엔트리는 속성타입에서 보았듯이 디렉토리 속성을 가지고 있어 파일크기가 0으로 설정되어 있다.



위 이미지를 보면 타임스탬프 값들이 hex값으로 되어 있어 사람이 인식하기에는 조금 무리가 있다.

타임스탬프 값을 사람이 알아 볼 수 있도록 계산을 해주어야 하는데 계산 과정은 아래와 같다(위 이미지 값을 기준으로 함)

 1) 날짜변환
     타임스탬프 값 중 날짜 값은 아래와 같은 규칙을 가진다.

 [그림 3 - 날짜 변환 규칙]

일단 hex 값을 2진수로 변환한다.

 -  0x3116(생성 날짜) -> 0011000100010110

다음으로 위 규칙대로 2진수를 끊어 10진수로 변환한다.

 - 0011000 -> 30
 - 1000 -> 10
 - 10110 -> 26


년도의 경우 1980년도를 기준으로 하기 때문에 1980~ 2107년도까지 표현이 가능하다.

위 나온 년도 값에 1980을 더해주면 계산이 완료 된다.

 - 변환 값 : 2010. 10. 26 

2) 시간변환
    날짜와 마찬가지로 시간도 규칙이 있다.
 

[그림 4 - 시간 변환 규칙]

일단 날짜 계산 과정과 마찬가지로 hex 값을 2진수로 변환한다.

 - 0x5C7A(생성 시간) -> 0101110001111010


다음으로 위 규칙대로 2진수를 끊어 10진수로 변환한다.

 - 01011 -> 13
 - 100011 -> 43
 - 11010 -> 32


시간은 따로 더해주는 값이 없어 이대로 계산이 끝난다.

 - 변환 값 : 오후 13시 43분 32초

요즘은 이러한 계산을 자동으로 해주는 도구가 많이 있다. 대표적으로 DCode( http://www.digital-detective.co.uk/downloads.asp ) 프로그램이 있다. 


이번에는 디렉토리 엔트리 중 긴 파일명을 저장하는 엔트리를 알아보자.

LFN(Long File Name) 엔트리는 디렉토리 엔트리에 포함되는 엔트리이며 긴 파일명을 사용하는 디렉토리나 파일에 디렉토리 엔트리가 할당되면 LFN 엔트리에 파일명이 저장된다.

LFN 엔트리는 일반 엔트리보다 우선시 되어 짧은 이름을 저장하는 기본 엔트리 전에 목록화되는데 그 순서는 역순이다.

아래는 LFN 엔트리의 바이트 오프셋을 나타낸 것이다. 부가적 설명이 필요한 부분은 따로 설명하도록 하겠다.

[그림 5 - LFN 엔트리 바이트 오프셋]

 - 순서번호 또는 할당 상태 : 순서번호는 0x40과 OR 연산되어 할당 상태일 경우 설정되며, 비 할당 상태이면 0xE5로 설정된다.


위 그림을 참고해 보면 이름은 New Folder가 된다.

사용되지 않는 바이트 들은 "0xFF" 로 채워지며 파일 이름의 끝은 "NULL(0x00)" 으로 채워진다.


디렉토리 엔트리에 대하여 위에서 자세히 알아보았다. FAT의 경우 데이터 구조체 수가 적어 단순하다는 느낌을 받았을 것이다.

FAT 영역은 시스템을 자동분석 할 때 중요하게 사용되는 영역이고, 그 안에 있는 디렉토리 엔트리는 응용 프로그램 수준의 기술 없이 삭제된 파일을 복구할 떄 중요한 역할을 하는 엔트리이므로 필수적으로 알아두어야 할 부분이다.
 

'[+] Forensic' 카테고리의 다른 글

File System - NTFS (2)  (0) 2012.02.07
File System - NTFS (1)  (0) 2012.02.06
File System - FAT (10)  (0) 2012.02.05
File System - FAT (9)  (0) 2012.02.04
File System - FAT (8)  (0) 2012.02.03