저번 글에 이어 이번에는 File Time 방식의 시간정보가 기록된 파일을 찾기 위해 NTFS 파일시스템으로 구성된 제 컴퓨터의 C 드라이브를 Winhex로 분석해 보았습니다.
최종 분석 대상은 C드라이브에 있는 AnyMes0.txt 파일입니다.
우선 C드라이브를 Winhex로 열어 아래와 같이 분석을 시작해보았습니다.
제가 최종적으로 구하고자 하는 시간 정보는 해당 파일의 MFT Entry 내의 첫번째 속성인 [$STANDARD_INFORMATION] 항목안에 들어있습니다. NTFS 파일시스템에서는 MFT엔트리가 각 파일마다 하나씩 존재합니다. 따라서 AnyMes0.txt 파일의 MFT Entry로 이동해보았습니다.
현재 위의 헥사 데이터 화면에서 파란색으로 칠해진 부분은 MFT Entry Header 부분으로, 이 뒤부터 속성들이 나오기 시작하는데, 바로 다음 바이트가 [$STANDARD_INFORMATION] 속성의 시그니쳐인 0x10 이므로 우리가 원하는 [$STANDARD_INFORMATION] 속성에 잘 찾아온 것을 확인할 수 있습니다.
위의 [$STANDARD_INFORMATION] 속성 포맷에 따라 구조체를 살펴보다 보면 아래와 같이 파란색으로 칠해진 부분에 FILETIME 형식의 파일 Accessed 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;
}
[실행결과]
이 결과는 아래와 같이 파일 속성에서 확인할 수 있는 만든 날짜와 같은 것을 볼 수 있습니다.
이렇게 이번 글에서는 mft 전체를 세부적으로 분석하기보다는 시각 정보를 찾는데 초점을 맞추어 진행해보았습니다
'사이버 보안 > 디지털 포렌식' 카테고리의 다른 글
MS-DOS Time 방식으로 표현된 파일 생성 시각 분석 (0) | 2020.07.09 |
---|---|
PC 물리메모리 덤프를 통해 ID, Password 정보를 찾아보자 (0) | 2020.07.09 |
Exif Viewer를 통한 사진의 메타데이터 분석 (0) | 2020.07.06 |