앞선 포스팅에서는 MBR, VBR을 분석하는 정도로 실습을 했다. 하지만 이번 포스팅에서는 MBR이 날아간 경우와 VBR이 날아간 경우 그리고 MBR와 VBR이 함께 날아간 경우에 대해 분석하고 복구하는 실습을 한다.


실습에 앞서 먼저 파일시스템의 BR에 대해 간단하게 설명하고자 한다.


- FAT32 구조


Boot Sector

(VBR) 

Reserved 

FAT 

FAT

Mirror 

Root

Directory 

Data

Area 


FAT32는 위와 같은 구조를 갖는다. FAT32의 BR은 Boot Sector에 존재한다.


- FAT32의 BR



FAT32의 BR은 위와 같은 구조를 갖으며, 각 영역의 의미는 다음 표와 같다.


의미 

내용 

Jump Boot Code

 Boot Strap Code로 점프하기 위한 부분

OEM Name

 OEM 회사를 나타내는 문자열로써, FAT32는 MSDOS 5.X로 표시 

Byte Per Sector 

 한 섹터가 몇 byte로 구성되어 있는지를 나타내며 기본 512 byte 

SP 

 클러스터를 구성하는 섹터의 수이다. 기본적으로 8개의 섹터를 사용

RS( Reserved Sector ) 

 예약된 섹터의 개수

FAT 개수 

 FAT의 개수를 나타낸다. 기본적으로 FAT32는 2개를 사용 

Media Type

 볼륨이 어떤 미디어 매체를 이용하는지를 나타낸다. 고정식 디스크는  

 0xF8이 쓰인다.

Total Sector 32

 파티션상의 총 섹터의 개수를 나타낸다. 

FAT Size 32

 FAT 영역의 섹터 수를 나타낸다. 단, FAT 1개에 대한 크기이다. 

File System Version 

 FAT32의 버전 정보를 나타낸다. 

Root Directory Cluster 

 루트 디렉터리의 시작 위치를 나타낸다. 

File System Information 

 FSInfo 구조체에 대한 정보가 어디에 저장되어 있는지를 나타낸다.

 BR 기준 보통 1번 섹터에 저장된다. 

Boot Record Backup Sector 

 BR이 백업된 섹터 번호를 나타낸다. 기본 값으로 6을 사용한다. 

Volume ID 

 볼륨 시리얼 번호를 나타낸다. 

Volume Label( 1, 2 )

 볼륨의 이름을 기록 

File System Type 

 해당 파일시스템의 타입을 나타낸다. FAT32의 값을 저장한다. 



- NTFS 구조


Boot Sector

(VBR) 

Master File 

Table 

Data Area 


NTFS는 위와 같은 구조를 갖는다.


- NTFS의 BR



NTFS의 BR 구조는 위와 같으며 각 영역의 의미는 다음 표와 같다.


의미 

내용 

Jump Boot Code

 Boot Strap Code로 점프하기 위한 부분

OEM Name

 OEM 회사를 나타내는 문자열

Byte Per Sector

 한 섹터가 몇 byte로 구성되어 있는지를 나타낸다. 기본 512 byte

SP

 클러스터를 구성하는 섹터의 수이다. 기본적으로 8개의 섹터를 사용

RS( Reversed Sector )

 예약된 섹터의 개수

Media Type

 볼륨이 어떤 미디어 매체를 이용하는지를 나타낸다. 고정식 디스크는 

 0xF8이다



FAT32와 NTFS의 구조 중 BR에 대한 부분만을 살펴봤다. 이를 참고하여 다음 예제를 실습해보자.



- MBR Test #3



예제 파일을 HxD 에디터로 열어보면 위와 같다. Partition Table이 위치한 446 ~ 509 바이트를 보면 00으로 비어있는 것을 알 수 있다. 즉 MBR이 손상된 경우이다. 


예제 파일을 FTK 프로그램으로 실행시켜보면 다음과 같다.



Evidence Tree에 보면 파티션이 나눠지지 않는 것을 확인할 수 있으며 해당 디스크가 손상되어 있음을 확인할 수 있다.


이를 복구하기 위해선 다음과 같은 절차를 거친다.


1. VBR의 위치를 찾는다.

2. 해당 파티션의 총 크기를 구한다.

3. MBR의 Partition Table에 구한 값을 수정한다.

4. 제대로 복구가 됐는지 확인하기 위해 FTK 프로그램으로 해당 디스크 구조를 열어 확인한다.


그럼 이제 실습파일을 이용해 분석을 해보도록 하자. 우선 실습파일을 HxD 에디터를 이용해 로드한다. 


첫번째 VBR은 윈도우 XP의 경우 VBR의 위치는 63섹터, Vista 이상의 버전에서는 2048 섹터에 위치한다. 이를 이용해 해당 섹터에 이동해보면 VBR이 존재하지 않는 것을 볼 수 있다. 이는 vhd를 분석할 때 종종 나타나며 보통 128 섹터에 첫번째 VBR이 위치한다.



FAT32 BR 구조를 참고하여 위 VBR을 분석해보면 Hidden Sector는 '80 00 00 00'으로 128, 즉 0번 섹터부터 127 섹터까지를 의미한다. 그리고 Total Sector는 '00 98 07 00'으로 497,664이다. 두번째 VBR의 위치는 497,664 + 128인 497,792 섹터로 이동해 보면 다음과 같다.




NTFS BR 구조를 참고하여 위 VBR을 분석해보면 Hidden Sector는 '80 98 07 00'으로 497,792, 즉 0번 섹터부터 497,791 섹터까지를 의미한다. 그리고 Total Sector는 'FF 9F 05 00'으로 368,639이다. 세번째 VBR의 위치는 497,792 + 368,639 + 1인 866,432 섹터로 이동해 보면 다음과 같다.

* 여기서 1을 더한 이유는 NTFS의 Backup VBR의 위치는 해당 파티션 끝에 위치하여 Backup VBR 바로 이전의 섹터까지만 Total Sector에 포함되기 때문에 더해준다.




위와 마찬가지로 NTFS 파일시스템임을 알 수 있다. VBR을 분석해보면 Hidden Sector는 '80 38 0D 00'으로 866,432, 즉 0번 섹터부터 866,431 섹터까지를 의미한다. 그리고 Total Sector는 'FF DF 06 00'으로 450,559이다. 네번째 VBR의 위치는 866,432 + 450,559 + 1인 1,316,992 섹터로 이동해보면 다음과 같다.



Partition Table의 정보를 보면 Partition Type이 '0B'로 FAT32임을 알 수 있고 시작 위치가 '80 00 00 00'으로 128이다. MBR의 특성상 4번째 파티션부터는 Extended Boot Record( EBR )로 상대적인 위치를 나타낸다. 따라서 해당 파티션의 실제 위치는 1,316,992 + 128인 1,317,120 섹터이다. EBR의 특성에 따라 파티션 테이블은 최대 2개가 존재한다. 2번째 테이블을 분석해보면 Partition Type은 '05'로 Ext이고 해당 파티션의 시작 위치는 '80 40 06 00'으로 409,728이다. 이 파티션 역시 실제 위치는 1,316,992 + 409,728인 1,726,720 섹터로 이동해보면 각각 다음과 같다.

* EBR은 MBR과 비슷한 구조를 갖지만 MBR과 달리 파티션 테이블을 제외한 곳은 모두 0으로 채워져 있다.


EBR 부분을 이전에 만든 python 코드로 돌려보면 위와 같이 분석이 되는 것을 알 수 있다.



FAT32 파일시스템임을 알 수 있다. 해당 파티션의 총 크기는 '00 40 06 00'으로 409,600 * 512 / 1024 / 1024 = 200MB 임을 계산할 수 있다.



Partition Table 정보를 보면 하나의 정보만 존재하는 것을 확인할 수 있다. 이는 더 이상의 파티션이 존재하지 않음을 의미한다. Partition Type이 '0B'로 FAT32임을 알 수 있고 시작 위치가 '80 00 00 00'으로 128이다. 이 파티션 또한 실제 위치는 1,726,720 + 128인 1,726,848 섹터로 이동해보면 다음과 같다.



앞서 분석한 내용을 정리하면 다음과 같다.

> 첫번째 파티션

① 시작 섹터 : 128

② 파티션 타입 : FAT32

③ 파티션 총 섹터 수 : 497,664

> 두번째 파티션

① 시작 섹터 : 497,792

② 파티션 타입 : NTFS

③ 파티션 총 섹터 수 : 368,639

> 세번째 파티션

① 시작 섹터 : 866,432

② 파티션 타입 : NTFS

③ 파티션 총 섹터 수 : 450,559

> 네번째 파티션( EBR )

① 시작 섹터 : 1,316,992

② Current 파티션 타입 : FAT32

③ 시작 섹터 : 1,316,992 + 128 = 1,317,120

④ 파티션 총 섹터 수 : 409,600

⑤ Next 파티션 타입 : Extended

⑥ 시작 섹터 : 1,726,720

⑦ 파티션 총 섹터 수 : 362,624

> 다섯번째 파티션( EBR )

① 시작 섹터 : 1,726,720

② Current 파티션 타입 : FAT32

③ 시작 섹터 : 1,726,720 + 128 = 1,726,848

④ 파티션 총 섹터 수 : 362,496



앞서 분석한 것을 바탕으로 본격적으로 Partition table이 손상된 MBR을 수정한다.



위와 같이 수정한 후 FTK Imager 프로그램으로 실습 파일을 로드하면 다음과 같이 복구가 된 것을 확인할 수 있다.





Posted by Imp3rio