NTFS파일 시스템에서 삭제된 파일 복구하기 

NTFS파일 시스템에서 삭제된 파일을 복구 해볼 것이다. 파일 시스템마다 형식이 다르기때문에 복구하는 방법도 다르다.
실질적으로 복구할려면 상용툴이나 오픈소스를 이용하는 것이 여러모로 편하다. 
이번 포스팅에서는 NTFSWalker, HxD와 계산기만으로 직접 보면서 파일을 복구해볼 것이다. 




먼저 분석하고자하는 NTFS 이미지를 구하여 NTFS Walker와 HxD로 켜준다. 
HxD로 이미지를 열 때 디스크이미지 열기로 열어주길 바란다.
툴 사용법은 이전 포스팅에 다 올려 두었으니 참고하자!




NTFS Walker에서 MFT #값이 37번인 파일은 지워진 것을 확인 할 수 있다. 
"FP-NTFS.pdf"파일을 복구하는 것을 목표로 이 포스팅을 써내려 가보겠다. 




NTFS파일을 HxD로 열었을 때 화면이다. 
위 사진에서 드래그한 부분을 보자. MBR영역인데 MBR영역에서 파티션 정보를 표현하는 부분이다.
파티션 정보는 16Bytes로 구성되어 있다.
MBR에서는 총 4개까지만 파티션을 분할 할 수 있고 드래그한 부분은 첫번째 파티션에 대한 정보를 나타내고 있다.
주황색선 기준으로 다음 파티션에 대한 정보가 이어진다.




아까와 똑같은 부분이다. 첫번째 파티션 정보 마지막에서 5~8번부분은 VBR섹터 번호이며 드래그 한 부분이다.
0x00 08 00
이것을 Dex로 바꾸면 2048이 나온다. 2048섹터로 이동을 해보자. 




2048섹터 = VBR(Volume Boot Record)영역



VBR영역에서 4번째 줄 8Bytes를 보자. 이 부분은 Start of MFT부분으로써 계산할 때 사용하게 된다.

내가 원하는 데이터(FP-NTFS.pdf) 부분을 찾아 가기 위해 아래를 계산한다.
0x00 00 04 00 00 00 00 00 * 8 + 2048 + 74를 계산한다.
0x00 00 04 00 00 00 00 00 = Start of MFT
8 = 처리는 클러스터 단위기 때문에 클러스터가 4096일경우 섹터(512kb)*8=4096이기때문에
2048 = VBR영역까지가 2048섹터이기때문에 더해준다.
74 = FP-NTFS.pdf파일의 MFT #은 37이었다. 엔트리가 512bytes이므로 섹터 2개를 먹기때문에 x2해준 값
만약 MFT값을 모르겠다면 +2 +2 +2로 하나씩 다 찾아갈 수도 있다..
== 2099274




내가 원하는 데이터의 MFT로 왔다. 여기서 파일의 길이와 데이터위치를 찾아 낼 것이다.



MFT에서 중간쯤보면 확장자인 pdf를 확인할 수 있다. 
pdf.뒤에 0x80값이 있다. 거기 2줄 아래에 0x40값이 있고 그 아래 2줄 아래에 0x22값이 있다.
0x22값은 runlist라고 하여 데이터영역을 가르켜 주게된다. 




0x22를 통해 0x2D 08을 구할 수 있다.
만약 runlist값이 0x33이라면 0x08 00 FF값이 된다.



runlist값 기준으로 앞으로 8Bytes는 파일의 실제크기에 해당된다. 
0x5F AB 18 00 00 00 00 00



이제 MFT에서 필요한 값들을 구했으므로 데이터영역으로 가서 파일을 복구해보자



0x08 2D * 8 * 2048 == 18792
0x08 2D : runlist 값
8 : 처리는 클러스터 단위기 때문에 클러스터가 4096일경우 섹터(512kb)*8=4096이기때문에
2048 : VBR영역까지가 2048섹터이기때문에 더해준다.
18792섹터로 이동하면 우리가 원했던 pdf파일에 대한 데이터 영역을 확인 할 수 있다.




위에서 구한 18792값으로 섹터이동을 한다.
그럼 처음에 %PDF파일을 볼 수 있고 매우 그럴싸하게 PDF파일 같아보인다.
아까전에 MFT에서 파일의 실제 크기도 구했다. 
제일 처음에서 우클릭하여 블록선택을 누른다. 
그리고 파일의 실제 크기를 넣어서 수락한다.





수락을 눌렀다면 블록선택이 된것을 확인 할 수 있고 %%EOF에 딱 맞게 떨어진것을 볼 수 있다.



HxD에서 파일을 새로 만들고 블록선택한 것을 복사한다.




복사한것을 저장하며 .pdf파일로 바꿔주면 정상적으로 열리는 것을 확인 할 수 있다.
여기서 좀 더 정확히 확인해보자면 복구한 파일의 해쉬값을 구하여 기존의 파일과 비교하여 같으면
똑같은 파일이라고 할 수 있겠다(데이터 무결성) 


* 새로운 파일로 복사하여 붙여넣을 때 메모리의 크기마다 복사할 수 있는 크기가 달라진다.
따라서 메모리가 모자르면 여러번 나눠서 복사 붙여넣기로 만들어주어야 한다. 



위와 같은 경우는 파일을 지우고 그 위에 덧씌우거나
완전삭제 프로그램을 쓰지 않아서 좀 더 수월하게 데이터를 복구 할 수 있었다. 오래전에 삭제된 파일을
복구하고 싶다거나 완전삭제 프로그램을 통하여 파일을 지운다면 복구하기가 어렵거나 불가능할 가능성이 높아진다.
만약 누설되지 않아야될 파일을 지운다면 강력한 완전삭제 프로그램을 사용하여 지워 복구할 수 없도록 
조취를 취해야 할 것이다. 



이번 포스팅으로NTFS Walker, HxD와 계산기로만 파일을 복구해보았다. 
아직 공부해가는 입장이라 야매같은 느낌이 있을 수 있으며 미흡한 부분도 많을 수 있다.
앞으로 몇개 더 파일을 복구하는 포스팅을 올려보도록하며 조금 더 정리할 수 있도록 해보아야겠다.







+ Recent posts