
일반적으로 Windows에서 파일을 삭제하면 휴지통으로 이동하고, 휴지통 비우기를 하거나 Shift+Del 키를 이용해 삭제하면 파일이 완전히 삭제된 것처럼 보인다. 이렇게 완전히 삭제된 것처럼 보이는 파일을 복구하는 법을 알아보자.
Windows 사용자 기준에서, 파일의 완전 삭제는 어떤 통상적인 방법으로 목표 파일을 찾을 수 없음을 의미하며, 해당 파일을 가리키는 메타데이터가 남아있지 않아 해당 파일에 접근할 수단이 없다는 것이다.
모든 파일의 메타데이터, MFT 엔트리가 모여있는 $MFT에서 해당 파일을 가리키는 MFT 엔트리를 삭제하는 식으로 동작하기 때문에 파일에 대한 접근 수단은 없어지지만, 데이터는 원래 파일의 위치에 그대로 남아있게 된다.
$MFT에서 해당 파일의 MFT 엔트리의 플래그가 in-use에서 free로 변경되었을 때, 이 영역이 덮어씌워지지 않았다면 그 MFT 엔트리를 따라 복구가 가능하며, MFT 엔트리가 이미 덮어 씌워졌을 경우 완전한 복구가 불가능 하다.
파일의 복구는 일반적으로 다음과 같은 순서로 진행된다.
FTK Imager에서는 파일의 MFT 엔트리의 플래그가 free 상태이지만 해당 엔트리가 덮어씌워지지 않았을 때 파일 아이콘에 X 표시를 붙여 삭제된 파일을 복구가 가능함을 표시한다.
MFT 엔트리 없이 파일을 복구하는 과정을 카빙(Carving)이라고 한다. 크게 파일 시그니처를 기반으로 하는 것과 파일 구조를 기반으로 하는 것으로 나눌 수 있다. 파일의 구조적인 특성을 이용하기 때문에 MFT 엔트리만 탐색하고 필요한 부분을 수집하는 것이 아닌, 볼륨 전체를 탐색한 후 식별해야 한다.
대부분의 파일은 파일의 타입을 나타내는 특수한 시그니처가 파일의 시작과 끝에 있기 때문에, 해당 시그니처를 기준으로 파일을 복구할 수 있다. 볼륨 내에서 파일의 시작 시그니처를 탐색한 후, 해당 지점부터 파일의 끝 시그니처를 탐색해 그 영역을 파일로서 식별하는 것으로, 연속된 클러스터에 파일 조각이 나뉘어 저장되어 있을 때 사용가능하다.
모든 파일의 끝에 시그니처가 있는 것은 아니기 때문에, 파일의 시작 시그니처부터 파일 헤더를 식별한 후 해당 파일의 구조에 맞게 파일을 재구성하며 식별하는 것이다. 파일의 헤더에는 파일 내의 각 영역에 대한 메타데이터가 있을 것이고, 그를 이용해 헤더의 길이, 메인이 되는 데이터의 길이 등을 식별한 후 해당 정보에 맞게 데이터를 식별하여 복구한다.