# 본 게시글은 단순 내용기록 및 자료보존용이며 잘못 기재된 내용이 있을 수 있으니 오해없길 바라며, 만약 수정사안이 있을 시 댓글로 달아주시면 감사드리겠습니다.
일단 교육시간에 배포해준 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 |
---|