직접찾아보자


 NTFS File System을 공부하며 직접 MFT 엔트리를 찾아보고 싶었다. 그렇기에 간단한 실습을 준비해보았다. 우선 바탕화면에 찾기 쉽도록 독특한 이름의 파일을 생성해야 한다 생각했으며 파일의 이름은 ^^%%&&.txt이며 $DATA의 내용도 찾기 쉽도록 ^&*^&*^&*....과 같이 하였다.


 우선 해당 MFT 엔트리를 찾기 위해 HxD를 관리자 권한으로 열어 C: 드라이브를 연다. 그러면 OEM ID - NTFS와 함께 나타나는 것을 확인할 수가 있다. 그 다음 해당 제목인 ^^%%&&.txt를 유니코드 문자열로 찾도록 한다. 그리고 검색을 시작한다. 조금 시간이 걸리기도 하며 FILE 시그니처가 아닌 다른 부분에서도 몇 번 같은 문자가 확인이 된다. 계속 지나가 FILE 시그니처와 2섹터를 가지며 해당 이름을 포함한 부분을 찾아보았다. 그렇게 찾은 주소가 063f490800 이였다. 아래의 그림을 보자.


 속성 식별 값과 속성 크기를 통해 4개의 속성 식별 값이 존재하는 것을 확인할 수가 있다. $SIA, $FN, $OBJECT_ID, 그리고 이번 포스팅의 포인트인 $DATA (Non-resident)가 있다. 다른 부분은 대체로 일반 적인 모습을 띄고 있다.

 이제 $DATA 부분을 보면 Non-resident 속성이기 떄문에 클러스터 런이 존재하는 것을 확인할 수가 있고 위의 그림과 같이 0x41이 클러스터 런의 첫 바이트이다. 이에 대한건 이전에 포스팅하였으므로 설명은 생략하고 바로 해석을 해보자.

 뒷자리가 1이므로 해당 클러스터는 1개가 있다는 것을 알 수가 있고 해당 위치는 드래그한 부분과 같이 0x01D39E47이라는 것을 알 수가 있다. 여기서 원래는 0x01D39E47에 해당 데이터가 존재하는 줄 알았는데 아니였다. 바로 볼륨의 시작에서부터 1D39E47 번째 클러스터에 위치하고 있다는 것이였다. 따라서 뒤에 000을 붙여주면 해당 오프셋이 나온다. 0x01D39E47000을 보면 위의 그림과 같이 제대로 해당 $DATA의 내용이 출력되는 것을 확인할 수가 있다. 만약 파일의 크기가 작다면 클러스터런이 아니라 $DATA의 속성헤더 뒤에 내용이 나왔을 것이다.


 이러한 NTFS에선 하나의 파일이 여러 곳에 분산되어 저장되어 있더라도 해당 파일의 MFT엔트리를 참고하여 $DATA 클러스터런을 통해 각 각 떨어진 데이터들이 연속된 곳에 저장된 것처럼 보이게 한다. 분산된 데이터를 HxD로 열면 하나로 쭉이어져있는 것처럼 출력되는 것은 운영체제가 이를 클러스터 런을 따라 출력을 해주므로 가능한 것이다. 따라서 비연속적으로 저장된 데이터는 이러한 MFT엔트리를 통해 따라가야할 것이다.



'Forensic > Theory' 카테고리의 다른 글

NTFS File System (8) $LogFile  (0) 2016.01.13
NTFS File System (7) INDEX  (0) 2016.01.02
NTFS File System (6) MFT $SIA & $FN $DATA  (0) 2015.12.31
NTFS File System (5) MFT -Attribute  (0) 2015.12.30
NTFS File System (4) MFT  (0) 2015.12.29