Delete File & File Recovery
파일의 실제 저장 데이터 섹터 계산, 파일 삭제 및 휴지통 삭제 시 구체적인 Cluster Entry의 변화와 파일 복구 가능 여부를 확인해 보기 위해 블로그의 로고 이미지 파일(logo.png)을 테스트 진행해 보았다.
아래는 테스트에 사용한 파일의 정보이다.
File Name | Size (Byte) | Allocation Cluster |
logo.png | 150,429 | 37 |
delete.png | 1,421,030 | 347 |
테스트를 위해 logo.png 파일 저장해 보았다. 해당 파일 저장 시 할당 클러스터 개수 즉, 생성되어야 할 Cluster Entry(빨간색) 37개와 Short Name Directory Entry(빨간색)이 정상적으로 생성되었다.
Starting Cluster: 0x00 00 00 06
→ FAT #1의 0x06번째 Cluster Entry에 다음 클러스터 체인 번호인 0x07을 이름으로 하는 Cluster Entry가 존재함을 확인할 수 있다.
Number of Allocated Cluster: 0x2B (43(d)) - 0x07 (7(d)) + 0x01 (1(d)) = 37
File Delete
드라이브 상에서 "logo.png"파일을 삭제해 보았다.
기존의 Cluster Entry가 해제되지는 않았으나, 새로운 하나의 Cluster Entry가 생성되었고, Data Area의 Short Name Directory Entry의 Status(Offset: 0x00) 부분의 값이 삭제된 파일을 의미(0xE5) 하는 값으로 변경되었다.
File Carving
파일 카빙을 위해서는 파일이 저장된 데이터의 시작 섹터(File Starting Sector)에서 파일 크기(File Size)만큼을 추출해야 하기 때문에 두 가지 정보를 필히 알아야 한다. File Starting Sector를 계산할 때 주목할 점은 Starting Cluster에서 2를 빼는 것이다. 이는 Cluster Entry 할당에서도 볼 수 있듯, 0번째와 1번째 Cluster Entry가 각각 Media Type과 Partition Status 클러스터로 할당되어 있기 때문이다. 결과적으로 2를 빼는 이유는 실제 데이터 저장이 시작되는 클러스터가 2번 클러스터부터 시작하기 때문이다.
File Starting Sector: Root Directory Sector + ((Starting Cluster - 2) x Cluster Per Sector)
File Size: Directory Entry의 File Size참조
logo.png의 File Starting Sector 값은 8,352(8,320 + ((6 - 2) x 8))이고, File Size 값은 0x02 4B 9D이다.
아래는 HxD에서 8,352번 섹터로 이동해 0x02 4B 9D Byte까지 추출하여 파일 이름을 "logo.png"로 저장하여 열어본 결과이다.
png 파일의 Header Signature, SOI가 존재하는 것을 확인할 수 있다.
Delete $RECYCLEBIN
휴지통에서 "logo.png"파일을 삭제해 보았다.
기존의 Cluster Entry가 해제(빨간색) 되어, 추가적으로 데이터를 저장하면 할당 해제된 클러스터가 바로 할당되는지 확인하기 위해 "delete.png"파일을 저장해 보았다. "delete.png"파일을 저장하며 새롭게 할당된 Cluster Entry는 "logo.png"파일을 처음 삭제할 때 생성된 Cluster Entry부터 할당됨을 확인했다. 추가적으로 Short Name Directory Entry는 "logo.png"파일을 처음 삭제할 때의 값과 동일하다.
이전의 File Starting Sector와 File Size의 값을 이용해 파일을 복구하는 방법과 동일한 방법으로 파일 복구도 가능하였다.
Cluster Entry Allocation
아래는 Cluster Entry Allocation에 대하여 그림으로 표현해 보았다. 첫 번째 그림은 각각 9개 (회색), 7개 (흰색)의 클러스터를 할당받아 저장된 데이터의 Cluster Entry Allocation 모습이다. 두 번째 그림은 첫 번째 (9개의 Cluster Entry를 할당받은 데이터, 회색 Cluster Entry)로 저장된 데이터를 휴지통 삭제하고 할당할 클러스터가 없는 상황에서 11개 (회색)의 클러스터를 할당하는 데이터를 저장한 모습이다. 0x0A 번 째 Cluster Entry가 불연속적으로 0x12 번 째 Cluster Entry를 가리키는 모습이다.
Result
결과적으로 FAT32 파일 시스템에서 파일을 단순히 삭제할 경우, 모든 데이터는 그대로 유지되면서 Short Name Directory Entry의 상태 값에 '파일 삭제됨(0xE5)’으로 표시가 된다. 반면, 휴지통에서 추가적으로 파일을 삭제할 경우, 파일에 할당되었던 클러스터가 해제되어 다른 데이터로 덮어 씔 수 있는 상태가 된다. 만약 파일에 할당된 클러스터들이 아직 다른 데이터로 덮어쓰이지 않았다면, File Starting Sector와 File Size를 사용하여 파일을 복구할 수 있다. 추가로, 휴지통을 통한 삭제 후 할당 해제된 클러스터들은 바로 다음 데이터 저장 시에 재할당되지 않고, 저장 공간이 부족한 경우(할당할 클러스터가 없는 경우)에 재할당되어 덮어쓰일 것으로 추측된다. 즉 특정 파일(A 파일)을 휴지통 삭제 후 할당 해제된 클러스터에 다른 특정 파일(B 파일)을 할당하여 데이터를 비연속적 저장하고 B 파일을 삭제할 경우 클러스터 체인이 끊기기 때문에 파일의 완전 복구가 불가능하다.