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 |