본문 바로가기

사이버 보안/디지털 포렌식

File Time 방식으로 표현된 파일 생성 시각 분석

 

 

저번 글에 이어 이번에는 File Time 방식의 시간정보가 기록된 파일을 찾기 위해 NTFS 파일시스템으로 구성된 제 컴퓨터의 C 드라이브를 Winhex로 분석해 보았습니다.

최종 분석 대상은 C드라이브에 있는 AnyMes0.txt 파일입니다.

 

 

NTFS 파일시스템으로 구성된 C 드라이브

 

분석대상 파일 : AnyMes0.txt

 

 

우선 C드라이브를 Winhex로 열어 아래와 같이 분석을 시작해보았습니다.

제가 최종적으로 구하고자 하는 시간 정보는 해당 파일의 MFT Entry 내의 첫번째 속성인 [$STANDARD_INFORMATION] 항목안에 들어있습니다. NTFS 파일시스템에서는 MFT엔트리가 각 파일마다 하나씩 존재합니다. 따라서 AnyMes0.txt 파일의 MFT Entry로 이동해보았습니다.

 

 

AnyMes0.txt 파일의 MFT Entry

 

NTFS MFT Entry 구조

 

 

현재 위의 헥사 데이터 화면에서 파란색으로 칠해진 부분은 MFT Entry Header 부분으로, 이 뒤부터 속성들이 나오기 시작하는데, 바로 다음 바이트가 [$STANDARD_INFORMATION] 속성의 시그니쳐인 0x10 이므로 우리가 원하는 [$STANDARD_INFORMATION] 속성에 잘 찾아온 것을 확인할 수 있습니다.

 

 

[$STANDARD_INFORMATION] 속성 Format

 

 

위의 [$STANDARD_INFORMATION] 속성 포맷에 따라 구조체를 살펴보다 보면 아래와 같이 파란색으로 칠해진 부분에 FILETIME 형식의 파일 Accessed Time, 즉 생성시간을 확인할 수 있습니다.

 

 

파란색 부분이 Creation Time (생성 시각)

 

 

하지만 현재 형태로서는 이게 언제를 가리키는 건지 이해하기가 힘들죠. 이를 우리 눈에 보기 편한 형식으로 바꾸기 위해서 우선 time_t 형식의 시간으로 변환해봅시다.

 


공식 : time_t = (FILETIME - 0x19DB1DED53E8000) / 10000000

적용 : (0x1D3043C9E6D78AA - 0x19DB1DED53E8000) / 10000000 = 1,500,873,652


 

C언어의 time.h 헤더에는 time_t 형식의 데이터를 우리가 보기 쉬운 년, 월, 일, 시간 형식의 데이터로 바꾸어주는 localtime 함수가 있습니다. 이를 이용하여 간단한 프로그래밍을 통해 MFT에 기록되어있는 파일의 생성시각을 확인해 보았더니 아래와 같았습니다.

 

 


[소스코드]

#include <stdio.h>
#include <time.h>

int main() {
	time_t filetime;
	struct tm* timeinfo;

	filetime = 1500873652;
	timeinfo = localtime(&filetime);
	printf("File-Created time and date: %s", asctime(timeinfo));

	return 0;
}

 

[실행결과]


 

이 결과는 아래와 같이 파일 속성에서 확인할 수 있는 만든 날짜와 같은 것을 볼 수 있습니다.

 

 

AnyMes0.txt 속성

 

 


 

 

이렇게 이번 글에서는 mft 전체를 세부적으로 분석하기보다는 시각 정보를 찾는데 초점을 맞추어 진행해보았습니다