STUDY/Forensic

NTFS File Recovery

Dalseung 2020. 8. 4. 16:57

파일 복구의 원리

image

파일 시스템에서 우리는 파일의 정보가 담긴 메타데이터를 통해 파일에 접근한다.

그러나 Shift + Delete와 같이 영구 삭제를 하면 데이터는 남아있지만 메타 데이터는 지워지게 된다.


여기서 좀 더 들어가게 된다면
파일이 삭제가 될 때 BITMAP 속성에서 해당 파일이 사용했던 MFT Entry bit가 0으로 변경되고
bitmap 파일의 DATA속성에서 해당 파일에 할당되었던 클러스터 bit가 0으로 변경된다.

따라서 내용이 새롭게 덮여지지 않는 한 복구가 가능하다.

즉, 데이터는 살아있고 파일 데이터로 가기 위한 연결이 끊어지는 것이라 생각을 하면 된다.

파일 복구 실습

먼저 파일 복구를 하기 위해선 데이터 속성에 대해서 알아야 하는데,

지금은 파일 복구가 주된 내용이기 때문에 나중에 따로 포스팅을 하도록 하겠다.

실습환경 : Windows 10

사용 툴 : NTFS Walker, HxD, 계산기

1. MBR (VBR 찾기)

먼저 MBR을 HxD로 까봐야한다.

image

섹터 0이므로 MBR이 위치해 있고, 파티션 테이블의 구조에 따라 VBR이 위치한 섹터를 알 수 있다.

계산 결과에 따라 2048 섹터로 가자.

2. VBR (MFT Entry 찾기)

image

VBR이 있는 섹터로 이동을 하게 되면 VBR의 구조를 확인하여

클러스터 당 섹터 수와 MFT가 시작하는 위치 클러스터를 찾아 계산을 한다.

그 후 0번째 MFT Entry가 위치한 6,293,504 섹터로 가도록 한다.

3. MFT Entry

image

4. NTFS Walker

26.png 복구

이제 NTFS Walker 프로그램을 이용하여 삭제된 파일의 정보를 보도록 하자

image

NTFS Walker 프로그램을 보면 맨 왼쪽이 62970이라는 숫자가 MFT Entry의 번호이다.

파일이름은 26.png이며 62970번째 MFT Entry에 위치한다.

※ 1개의 MFT Entry는 1024 byte로 2개의 섹터를 가진다.

< 해당 파일의 MFT Entry구하는 공식 >

MFT Entry 번호 * 2 + 0번째 MFT Entry 위치 섹터

단위가 섹터이므로 62970 * 2를 하고

거기에 0번째 MFT Entry가 기준이므로 0번째 MFT Entry 위치 섹터를 더한다.

6,419,444 섹터가 바로 26.png 파일이 위치해있는 MFT Entry일 것이다.

image

보면 Decoded Text에 26.png라 써져있다.

데이터 영역인 0x80부터 보자.

image

Non-resident Flag 값이 0x00이므로 resident 파일이다.

resident VS Non-resident

resident는 데이터 속성 헤더 뒤에 파일의 데이터가 나온다.

Non-resident는 파일 크기가 너무 커 1024byte에 데이터를 못넣을 때 다른 섹터에 데이터를 저장하고 그 위치를 데이터 속성 헤더 뒤에 넣는다.

이때 파일 데이터의 위치를 알려주는 값들을 Cluster Run이라 부른다.

따라서

데이터의 실제 길이헤더로부터 데이터의 오프셋을 보고 해당 데이터의 길이 만큼을 복사하여 새 파일에 붙이면 된다.

Result

HxD에서 Ctrl + E를 눌러 블록 선택을 하여 데이터 길이만큼을 추출하여 복구를 했더니 이스라엘 국기가 나왔다

image

 

이게 왜 나왔지

 

StarCraft II Editor.exe 복구

image

이번에는 다른 파일을 보겠다.

유난히 눈에 띄는 파일이 있어 복구를 해보고 싶어졌다.

앞서 했던 계산 법대로 해당 파일이 위치한 MFT Entry로 이동을 해보도록 하겠다.

image

Decoded Text에 StarCraft II Editor.exe 라 써져있는 걸 보니 잘 찾아온듯 하다.

데이터 속성 영역을 보자

image

Non-resident Flag 값이 0x01이므로 Non-resident 파일이다

따라서 파일의 데이터가 이 MFT Entry 안에 있는 것이 아닌 다른 섹터에 위치한다.

이제 그 파일이 위치한 섹터를 찾기 위해 Cluster Run이 필요하다.

Cluster Run Offset이 0x40이므로 데이터 속성 헤더 시작 부분부터 64byte 떨어진 부분을 찾아 가보자

image

바로 이 부분이 Cluster Run 부분이다.

기준점 41의 앞에 4는 데이터가 위치한 오프셋의 4byte를 의미하며 뒤의 1은 사용된 클러스터 수 1byte를 의미한다.

StarCraft II Editor.exe의 데이터가 위치한 섹터를 구하는 공식은

<데이터가 위치한 섹터를 구하는 공식>

데이터가 위치한 오프셋 * 8 + VBR 위치 섹터

image

 

image

계산한 후에 해당 섹터로 가보자

image

이게 지금 StarCraft II Editor.exe의 데이터이고 이제 데이터의 길이를 알아야한다.

사용된 클러스터 수가 64이므로

100(0x64) * 8 * 512를 하면 바이트 단위로 데이터의 길이가 나온다.

image

)

image

Result

그런데

문제가 생겼다

exe파일은 dll파일이 필요할텐데 exe파일만 복구를 했으니 당연히 실행이 안된다

결국 Hash 값으로 비교를 해보기로 했다

image

같다.

끝~

참고로 많은 파일들을 복구했는데 이어서 짤막하게 올리도록 하겠다.

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

윈도우 아티펙트  (2) 2021.11.10
FAT32 BR, 백업 없는 경우  (0) 2021.10.20
NTFS File System - VBR  (0) 2020.07.20
File System - MBR  (0) 2020.07.20
파티션 복구 실습  (1) 2020.07.13