본문 바로가기

Project/NTFS Parser

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 FF FF 03일 경우 3은 Run Offset의 크기, 1은 Run Length의 크기가 되며, Run Offset은 0x3FFFF, Run Length는 0x01이 된다.

 

따라서 할당된 데이터의 위치는 0x3FFFF x 0x1000인 0x3FFFF000가 된다.

 

해당 위치에는 0x7FFF00FFFF 값이 존재한다. 이를 2진수로 나타내면

0111 1111 1111 1111 0000 0000 1111 1111 1111 1111이 되는데, 이는 0~15번까지의 엔트리가 할당되어 있고, 16~23번까지의 엔트리는 비어있음을, 다시 24~38번까지의 엔트리는 할당되었음을 의미한다.

 

이를 NTFS Walker로 확인해 보면 계산한 결과와 동일한 것을 확인할 수 있다.

 

이때, 삭제된 파일은 엔트리가 할당되지 않은 것을 볼 수 있다.

'Project > NTFS Parser' 카테고리의 다른 글

Non-Resident의 $DATA 확인하기  (0) 2025.05.05
NTFS 분석  (0) 2025.04.27