-
디렉터리 엔트리 분석 [Directory Entry Analysis]$ 포렌식 $/$ 포렌식 기술적 이론 $ 2019. 7. 20. 12:06
디렉터리 엔트리는 Windows의 FAT 파일시스템에서 파일의 이름, 확장자, 위치, 크기등을 표현하기 위한 구조체입니다.
하나의 파일 및 디렉터리는 각각의 메타정보를 표현하기 위해 하나의 디렉터리 엔트리를 가집니다.
FAT(File Allocation Table) 파일 시스템의 FAT 영역 뒤에 오는 루트 디렉터리을 살펴 보면 최상위 디렉터리에 존재하는 파일들의 디렉터리 엔트리를 확인할 수 있습니다.
파일의 메타 정보를 저장하는 디렉터리 엔트리의 구조는 32바이트 이며 구조는 아래와 같습니다.
위의 파일 구조를 바탕으로 실제 디스크 에서 확인해 보겠습니다.
FAT File System Directory Entry - File Name
0x00 ~ 0x07 (8 byte)는 파일이름이 있는 필드
보통 ASCII 코드값이 들어있는데 0x00에 특수한 값이 들어가기도 한다.
다음 값들은 0x00 offset에 세팅되는 값들이다.
└ 0x00 : 파일이름이 사용된 적이 없음
└ 0xe5 : 파일이 이미 삭제 되었지만 파일의 이름은 확인이 가능한 상태
└ 0x05 : 파일명의 첫번째 문자가 'σ' 인 경우 (ASCII code value = 0xe5)
파일 이름 길이가 8 byte 미안인 경우에는 문자열 뒤에 0x20으로 패딩 문자가 채워진다.
위의 사진이 파일 이름이 8byte를 넘었을시에 생기는 ~1 값
또한 8 byte를 초과하는 경우에는 6 byte까지 채워지고 그뒤에 ~1을 붙이게 됩니다.
8byte를 초과하는 파일의 이름을 표현하기 위해서 LFN (Long File Name) Entry를 사용합니다.
FAT File System Directory Entry - File Extension
0x08 ~ 0x0A (3 byte)는 파일의 확장자가 들어가는 필드 입니다.
FAT File System Directory Entry - File Attribute
0x0B (1byte)는 파일의 속성값이다.
해당 속성값에 따른 의미를 한번 알아보겠습니다.
└ 0x01 : 읽기 전용 파일
└ 0x02 : 숨긴 파일
└ 0x04 : 운영체제 시스템 파일
└ 0x08 : 속성값 대신 디스크 볼륨 레이블을 포함한 엔트리를 나타낸다.
└ 0x10 : 서브 디렉터리를 가짐 (= 디렉터리 파일)
└ 0x20 : 일반 파일
FAT16 File System Directory Entry - Reserved
이 영역은 예약된영역 입니다.
FAT16 File System Direcory Entry - Time Created of last updated
0x16~0x17 (2byte)는 파일이 생성되거나 마지막으로 수정된 시간이 기록되는 필드 입니다.
해당 필드값을 보면 0x7D21입니다. 이값을 2진수로 바꿔 보면 다음과 같습니다.
0111 1101 0010 0001 입니다.
hhhhh / mmmmmm / xxxxx 형태로 변환을 해보면 다음과 같습니다.
01111 / 101001 / 00001 로 변환이 가능합니다.
생성(마지막 수정)시간은 15시 41분 1초 입니다.
하지만 파일 속성을 확인해보면...
2초로 나와 있다. 음.. 뭔가 미세한 오차가 있는 것일까..?
FAT16 File System Directory Entry - Date Created of last updated
0x18 ~ 0x19 (2byte)는 파일이 생성 되거나 마지막으로 수정된 날짜가 기록되는필드 입니다.
위에 설명한 것은 시간이고 이것은 날짜를 의미합니다.
이번 필드도 마찬 가지로 0x4EF0를 2진수로 변환을 해보면 다음과 같습니다.
0100 1110 1111 0000
해당 포스팅에 쓰인 파일시스템이 FAT32라서 FAT32에 맞춰서 설명하겠습니다.
(파일시스템에 따라서 값이 변할 수 있습니다.)
yyyyyyy / mmmm / ddddd 형태로 변환을 해보면 다음과 같습니다.
0100111 / 0111 / 10000 로 변환이 가능합니다.
39 / 7 / 16 으로 나오는데 년도가 이상합니다.
해당 년도는 39에 1980을 더해야합니다.
생성(마지막 수정) 날짜는 2019년 7월 16일 입니다.
정확히 일치 합니다.
FAT16 File System Directory Entry - Starting Cluster # for file
0x1A - 0x1B (2byte)에는 할당된 클러스터의 시작 위치가 설정 되어 있습니다.
0x0006 으로 설정 되어 있으면 해당 파일은 6번째 클러스터에 있는 것입니다.
파일의 클러스터에 접근하기 위해서 섹터를 구해야 하는데 다음과 같이 구할 수 있습니다.
(클러스터의 위치) * (한 클러스터 크기 in byte) / (한 섹터 크기 in byte) + (데이터 영역 이전까지의 섹터수) 로 계산 해볼 수 있습니다.
FAT16 File System Directory Entry - File size in byte
0x0C ~ 0x0F (4byte)는 파일의 크기를 이야기 합니다.
0x00000011 => 17byte
정확히 일치 합니다.
앞에서 한번 언급한 LFN(Long File Name) Entry를 이야기해보겠습니다.
LFN Entry는 파일의 이름이 8바이트를 초과할때 이름을 표현 하기 위해서 FAT 파일 시스템에서 사용하는 방식으로 엔트리 구조는 다음과 같습니다.
위의 구조를 바탕으로 한번 확인해 보면 하나의 LFN Entry에 Name1 , Name2, Name3 라고 해서 총 3개로 나누어져 있으며 총 13개 문자만을 담을수 있다. 그래서 만약 파일의 이름의 길이가 13자리를 초과 한다면 LFN Entry를 1개 이상을 사용해야 합니다.
위의 디렉터리 엔트리는 해당 글만 보지 마시고, 직접 USB를 한번 초기화 하시고 파일의 이름이 짧은 파일, 이름이 진짜 긴 파일 등 여러 상황을 만들어서 값을 확인해 보시면 더욱 효율적인 공부가 될 것 입니다!
'$ 포렌식 $ > $ 포렌식 기술적 이론 $' 카테고리의 다른 글
Forensics Analysis of Recycle Bin (0) 2019.10.14 디스크 분석을 위한 vmdk 변환 및 가상 이미지 부팅! (0) 2019.09.18 썸네일 포렌식(Thumbnail Forensics) (0) 2019.07.07 MBR (Master Boot Record) (0) 2019.06.24 하드디스크(Hard Disk Drive, HDD) 구조와 작동 원리 및 각종 규격 (0) 2019.06.24