본문 바로가기

Project/NTFS Parser

(3)
Non-Resident의 $DATA 확인하기 700 Byte 이상의 파일 크기일 경우 Non-Resident가 설정되어 엔트리 외부에 데이터가 저장된다. 대부분 파일의 데이터는 Non-Resident이므로 이 위치를 찾아가는 방법을 아는 것이 중요하다. 기존에 생성한 test1과 test2는 700 Byte 이하이므로 이를 테스트하기 어려워 다음과 같은 명령어를 통해 test3을 생성하였다.with open("test3.txt", "w") as f: for i in range(1, 1001): f.write(f"TESTDATA-{i:08d}\n") test3가 있는 MFT Entry는 다음과 같다. 이 중 $DATA 속성을 살펴보자.0x08 오프셋에 위치한 Non-Resident 플래그가 1로 설정되어 있으므로 $DATA는 Non..
MFT Entry 개수 찾기 (Run List - Cluster Run) NTFS Parser를 구현하기 위해 MFT Entry의 개수를 찾아야 한다. MFT Entry의 개수는 $MFT의 $Bitmap 속성을 통해 확인할 수 있다. 0x400001B0부터 $Bitmap의 헤더가 시작된다. 0x08 오프셋에 위치한 0x01 값을 통해 Non-Resident임을 확인할 수 있다. 따라서 실제 데이터는 MFT Entry 외부에 저장되므로 Run List를 통해 계산해봐야 한다. 0x04~0x07 오프셋에 위치한 Attribute Size가 0x50인 것을 알 수 있고, 0x20~0x21 오프셋에 위치한 Offset to Run List가 0x40인 것을 알 수 있다. 따라서 0x40부터 0x4F까지가 Run List가 된다.Run List는 위와 같이 계산할 수 있다. 31 01..
NTFS 분석 포맷한 직후의 USB를 FTK Imager를 통해서 이미지로 만든다. FTK Imager는 최대 1.5GB 단위로 파일을 쪼개 저장한다. 따라서 4GB의 파티션만 이미징하기 때문에 아래 사진과 같이 총 3개의 파일이 생성되며, .txt 파일은 이미지 세트에 대한 메타데이터가 적혀 있다. FTK Imager에서는 .001 파일만 선택해도 자동으로 모든 파일을 합쳐서 하나의 완성된 디스크 이미지로 본다.하지만 NTFS Parser를 만들 때를 위하여 하나로 합치는 방법을 사용하자.copy /b USB_Initial_NTFS.001 + USB_Initial_NTFS.002 + USB_Initial_NTFS.003 USB_Initial_NTFS_combined.img cmd에서 위 명령어를 통해 하나의 파일로 ..