Project/NTFS Parser

Non-Resident의 $DATA 확인하기

한희수 2025. 5. 5. 16:58

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-Resident임을 알 수 있다. 따라서 실제 데이터는 외부에 저장되어 있다.

 

이를 계산하기 위해 Run List를 활용해야 한다.

 

속성의 크기는 0x48이고, Run List의 오프셋은 0x40이므로 0x40~0x47까지가 Run List임을 알 수 있다.

따라서 Run List는 "21 05 88 07 00 00 00 00"이다.

 

이를 통해 Run Offset은 0x788, Run Length는 0x05라는 것을 알아낼 수 있다.

따라서 실제 데이터의 위치는 0x788 x 0x1000 = 0x788000이다.

 

해당 위치에 가게 되면 아래와 같이 실제 데이터가 있는 것을 볼 수 있다.