본문 바로가기

Etc/Forensic

FAT32 파일복구

# 본 게시글은 단순 내용기록 및 자료보존용이며 잘못 기재된 내용이 있을 수 있으니 오해없길 바라며, 만약 수정사안이 있을 시 댓글로 달아주시면 감사드리겠습니다.


 일단 교육시간에 배포해준 VHD에서 덤프를 뜬 파일을 가지고 파일 하나를 복구 해보며 복구방법을 알아가는 것으로 진행 할 것입니다.



 

"일단 복구를 위해 필요한 것은 HxD프로그래머용 계산기입니다."


< 필요한 도구 >


 복구를 하기에 앞서 일단 구조부터 이해를 해야하는데요.

엑셀그림을 통해 이해하는 것이 직관적으로 쉽게 이해할 수 있는 방법입니다.


< FAT32 구조 >


FAT32의 구조는 이런 형식인데요. 

일단 찾아야하는 파일들에 대한 정보가 존재하는 곳은  Root Directory.입니다.


그리고 RootDirectory를 찾는 방법은 MBR에서 시작해서 -> BootRecord -> FAT#1 -> FAT#2 -> RootDirectory로 한단계씩 밟아 지나가는 느낌입니다.


일단 MBR에서 Boot Record로 넘어가는 것 부터 시작해보죠.




"MBR > Boot Record"


일단 HxD로 첫 번째 복구 파일(1/FAT32 Recovery.vhd)을 열어 놓습니다.

( 기타설정 - 디스크 이미지열기 - 파일선택[읽기전용으로 열기 체크] - 섹터지정 : 하드디스크/플로피디스크)


< 복구할 파일 : FAT32 Recovery.chd >


섹터지정이 되지않으면 섹터검색을 할 수 없고 읽기전용이 아닐시 원본손상시킬 수 있으니 파일을 그냥 열지 않도록 유의하여야합니다.


이제 MBR구조를 볼까요.

MBR은 시작하자마자 보일텐데요(섹터 0). 대강 구조는 다음과 같습니다.


< MBR 구조 >

참고. 주황 시작 00 부터 주황 끝 4개까지 전부가 1번 파티션입니다. 그리고 파티션은 여럿으로 나뉘어 있을 수 있습니다.


여기서 지금 유의해서 볼 것은 시작 LBA주소입니다.

80 00 00 00이라고 되어 있는데요.

리틀 엔디안이기때문에 거꾸로 가되 둘 씩 끊어 읽어나가면

00 00 00 80입니다.


허나 이것은 16진수이기에 계산기를 이용해 10진수로 변경하면


< 계산기 : Hex - Dec >


128입니다.


이것은 섹터 128을 의미하는데요.

Boot Record섹터 128에 있다는 의미로 받아들이면 됩니다.


이제 Boot Record를 찾았으니 다음 단계로 넘어갑시다.




"Boot Record > FAT#1 > FAT#2 > Root Directory"



섹터에 128검색을 하면 이렇게 이동하는데요.

Boot Record구조를 한번 볼까요,


< Boot Record 구조 >


양이 조금 많습니다.

또 모르는 부분도 상당수인데요, 봐야할 것은 예약된 섹터의 수 FAT32 사이즈 입니다. 


예약된 섹터의 수는 2A 10 인데요 이건 곧 102A 이고 10진수로는 4138입니다.

또, FAT32 사이즈 EB 17 00 00 인데요. 이는 17EB, 그래서 6123입니다.

(= 예약된 섹터값 : 4138, FAT32당 섹터값 : 6123)


여기서 이 값들을 계산식을 이용해서 위치들을 구할건데요. 계산식은 다음처럼 진행하면 됩니다.


FAT#1 = 예약된 섹터값 + 현섹터값(BR)

FAT#2 = FAT#1 + FAT32당 섹터값

Root Directory = FAT#2 + FAT32당 섹터값


FAT#1 = 4138 + 128 = 4266

FAT#2 = 4266 + 6123 = 10389

Root Directory = 10389 + 6123 = 16512

섹터검색엔 더하기연산자가 사용가능하니 굳이 합을 계산하지 않아도 검색할 수 있습니다.


이제 Root Directory (16512)로 넘어갑시다.




"Root Directory 구조 및 파일 복구법"


< Root Directory 16512 >


직접 가보면 저런 데이터들이 눈에 들어오는데 일단 대강의 구조를 눈에 익힐 필요가 있습니다.

다음 사진을 볼까요


< Root Directory 구조 >


여기서는 파일들 각각에 대한 정보들을 담고 있는데요.


두 줄씩 파일 하나를 가리킵니다.

하지만 만약 파일의 이름길어질 경우 더 길어질 수 있습니다.



파일을 복구하는데에 있어서 딱 필요하는 부분은

파일 사이즈, 파일의 시작위치 인데요.


1. 일단 파일의 사이즈는 마지막 4개를 보면 알 수 있습니다.

00 60 03 00

2. 파일의 시작위치는 엑셀의 초록색 부분을 보아야하는데요. 앞부분에 있는 상위 클라스터와 뒷부분에 있는 하위 클라스터칩니다.(덧셈x)

엑셀에서는 00 00 , 05 00 이죠. 이는 각각 00 00 , 00 05입니다. 붙이면 0x00000005입니다.


여기서 중요한데요. 이렇게 붙인 값 10진수로 5 에다가 2뺍니다.

5-2 = 3, 그렇게 나온 값에다가 클러스터갯수 8합니다.

3*8 = 24, 이제 이 값을 루트 디렉토리 섹터값더할겁니다.

24+16512, 이제 이 값이 파일의 시작위치입니다.


이제 시작위치를 알았으니 섹터검색으로 찾은 뒤에 블록선택으로 사이즈만큼 떼오면 복구가 되는데요. 

그 과정은 실제 예제를 가지고 진행하겠습니다.




"파일 복구"


< Root Directory 16512 >


첫 번째로 복구해볼 파일은 오른쪽에 보면 확장자값으로 JPG라고 나와있는 파일인데요.

일단 위에 드래그 된 것처럼 읽어야하는 두 값(엑셀에서 초록색이던 두 값) 중간에 블록을 만들고 읽으면 편한데요. 

드래그해놓은 블록의 왼쪽 오른쪽 합친계산을 통해 파일의 시작 위치를 구합니다.

00 00 , 05 00 -> 5(dec) -> (5-2)*8=24 -> 16512+24


그리고 파일의 사이즈를 확인합니다.

04 1F 01 00 -> 00 01 1F 04(hex)


이제 준비는 끝났고, 본격적으로 복구하는 방법인데요. 


일단 섹터검색으로 파일의 시작위치로 이동합니다.


< 섹터 16512+24 이동 >


이제 커서를 저렇게 앞에 놔둔채 마우스 우클릭 - 블록 선택을 선택합니다.

그럼 창이 뜨는데요. 사이즈16진수입력해줍니다.


< 파일 사이즈만큼 블록 선택 >


그러면 아래와 같이 블록선택이 되고, 이제 이를 복사한뒤 새 창을 만들어 붙여넣습니다.


< 복구 파일 생성 >


이제 .JPG로 저장된 이 파일을 열어보면 복구된 파일을 사진으로 볼 수 있습니다.

(해시값 비교를 통해 제대로 복구된건지 확인할 수 있습니다.)




이러한 방식으로 jpg, txt, jpg, gif, mp4, pdf, pdf, exe, docx 등의 파일들을 복구해보면 되고,

용량이 큰 파일 같은경우엔 복사가 안될 수 있기때문에 파트를 나눠서 '복사-붙여넣기-저장'-'복사-붙여넣기-저장'을 반복하시면 됩니다.


:: FAT32 파일 복구 완료 ::

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

파일구조 정리하기(with Excel)  (0) 2017.01.12