MBR(Master Boot Record)
MBR은 하드 디스크나 다른 저장 장치의 첫 섹터(일반적으로 0번 섹터)에 저장되는 데이터다.
하드 디스크나 다른 저장 장치는 아래와 같은 구조를 가지고 있다. 가장 앞인 0번 섹터에 MBR이 오고, 그 뒤로 MBR Slack, 볼륨의 개수만 VBR과 Volume Data 영역이 반복된다.
MBR Slack은 MBR 이후, VBR 전까지의 빈 공간을 의미한다.
MBR(Master Boot Record) 분석
1. 가상 하드 디스크 생성
Windows + X → "디스크 관리" → "동작" → "VHD 만들기" 실행
"가상 하드 디스크 만들기 및 연결"
2. 가상 하드 디스크 초기화
생성한 가상 하드 디스크 우클릭 → "디스크 초기화" 실행
"디스크 초기화" → MBR(마스터 부트 레코드) 선택
3. 초기화 완료
4. 가상 하드 디스크 열기
관리자 권한으로 HxD 실행 → "도구" → "디스크 열기" 실행
"디스크 열기" → "읽기전용으로 읽기" 해제
"경고" → "수락"
※ 실제로 사용하고 있는 가상 하드 디스크를 열지 않도록 주의한다.
MBR(Master Boot Record) 구조
MBR은 Boot Code 446 bytes(Disk Signature 4 bytes), Partition Table Entry 64 bytes, Boot Signature 2 bytes로 이루어져 있다. 총 512 bytes (= 1 섹터)이다.
1. Boot Code (446 bytes)
디스크 첫 번째 섹터(0번 섹터)에 위치하며, 컴퓨터가 부팅될 때 실행되어 운영체제 로드 전 파티션 테이블을 읽어 올바른 파티션에서 운영체제를 찾는다.
Boot Code에 포함된 Disk Signature는 4 bytes로 구성되어 있고, 디스크 고유 식별자다.
2. Partition Table Entry (64 bytes)
파티션 정보를 저장하는 최대 4개의 파티션 테이블이 있다. 1개 파티션 테이블은 16 bytes로, 총 64 bytes다. 5개 이상의 파티션 테이블을 저장하기 위해서는 확장 파티션 테이블을 사용한다.
Size (bytes) | Information |
1 bytes | Bootable Flag (00: 부팅 불가능) (80: 부팅 가능) |
3 bytes | Starting CHS Address (첫 바이트: Cylinder) (중간 바이트: Head) (끝 바이트: Sector) ex) 01 02 03 = Cylinder 1, Head 2, Sector 3인 위치에서 파티션 시작 (16진수에서 10진수로 변환) |
1 bytes | Partition Type (0x00: Empty) (0x01: FAT12, CHS) (0x4: FAT16, 16~32 MB, CHS) (0x05: 확장 파티션, CHS) (0x06: FAT16, 32 MB~2GB, CHS) (0x07: NTFS) (0x0b: FAT32, CHS) (0x0c: FAT32, LBA) (0x0e: FAT16, 32 MB~2GB, LBA) (0x0f: 확장 파티션, LBA) (0x82: Solaris x86, Linux Swap) (0x83: Linux) (0xa5: FreeBSD) (0xa6: OpenBSD) (0xa8: Mac OSX) (0xa9: NetBSD) (0xee: EFI GPT Disk) (0xfb: Vmware File System) |
3 bytes | Ending CHS Address (첫 바이트: Cylinder) (중간 바이트: Head) (끝 바이트: Sector) ex) 10 07 03 = Cylinder 16, Head 27, Sector 3인 위치에서 파티션 끝 (16진수에서 10진수로 변환) |
4 bytes | Starting LBA Address 파티션 시작 섹터 번호 (MBR은 리틀엔디안 변환) |
4 bytes | Size in Sector 전체 섹터 수 (파티션 크기) (MBR은 리틀엔디안 변환) |
3. Signature (2 bytes)
MBR 마지막 2 bytes는 시그니처가 저장된다. 일반적으로 55 AA가 MBR의 시그니처 값으로 고유하고, 올바르게 형성되었음을 의미한다. 이 시그니처가 없다면 MBR은 손상된 것으로 간주한다.
Partition Table Entry 생성
가상 하드 디스크(VHD) "할당되지 않음" 우클릭 → "새 단순 볼륨" 실행
"단순 볼륨 만들기 마법사" → "다음"
"단순 볼륨 크기 설정" → "다음"
"드라이브 문자 또는 드라이브 경로를 할당하지 않음" 선택 → "다음"
"이 볼륨을 포맷하지 않음" 선택 → "다음"
마침
정상적으로 파티션을 생성하면 아래 이미지와 같이 표시가 된다.
이제 관리자 권한으로 HxD를 열고 "도구" → "디스크 열기" → "디스크 선택" →"읽기전용으로 열기" 해제 → 수락해 파티션을 생성한 디스크를 연다.
위 이미지에서와 같이 Partition Table Entry #1 영역에 데이터가 추가된 것을 확인할 수 있다. 이 데이터를 분석하면 아래와 같다.
Information | Hex Value | Analysis |
Bootable Flag | 00 | 부팅 불가능 |
Starting CHS Address | 02 03 00 | Cylinder=2, Head=3, Sector=0인 위치에서 파티션 시작 |
Partition Type | 06 | FAT16, 32 MB~2GB, CHS |
Ending CHS Address | 48 07 01 | Cylinder=72, Head=7, Sector=1인 위치에서 파티션 끝 (16진수에서 10진수로 변환) |
Starting LBA Address | 80 00 00 00 | 리틀 엔디안 변환: 00 00 00 80 = 128 섹터(파티션 시작 섹터 번호) |
Size in Sector | 00 50 00 00 | 리틀 엔디안 변환: 00 00 50 00 = 20,480(파티션 크기) |
Partition Table Entry 수동 생성
Partiton Table Entry #2에 직접 값을 입력해 수동으로 생성할 수 있다. 앞서 Partition Table Enrty #1은 128번 섹터에서 시작해서 20,480 섹터까지 사용함을 확인할 수 있다. Partition Table Entry #2는 128(시작 섹터) + 20480(전체 섹터 수) = 20,608번 섹터부터 원하는 크기(100 MB=204, 800 섹터 내)만큼 파티션을 생성할 수 있다.
※ Starting LBA Address + Size in Sector -1 = Ending LBA Address이다. (시작 섹터도 전체 섹터 수에 포함하기 때문에 -1 적용)
220MB 크기로 Partition Table Entry #2를 만든다면, 20 * 1024 * 1024 = 20971520 = 20 MB이며, 필요한 섹터 수는 20,971,520(20 MB) / 512(한 섹터) = 40,960 섹터다.
20,610 섹터부터 Partition Table Entry #2를 생성하기 위해 사용할 정보는 아래와 같다.
Starting LBA Address: 20,610번 섹터
Size in Sector: 40,960 섹터
Starting LBA Address와 Size in Sector를 16진수로 변환 후 리틀엔디안 변환 후 HxD로 Partition Table Entry #2에 데이터를 저장한다.
Starting LBA Address: 20,610 → 00 00 50 82 → 리틀엔디안 변환 → 82 50 00 00
Size in Sector: 40,960 → 00 00 A0 00 → 리틀엔디안 변환 → 00 A0 00 00
Partition Type: 원하는 파티션 유형
저장 후 디스크 관리에서 F5(새로고침)을 하면 아래 이미지와 같이 2개의 파티션을 볼 수 있다.
확장 파티션 테이블 생성
4개보다 많은 파티션을 만들기 위해서 확장 파티션을 사용한다.
"디스크 관리" → 가상 하드 디스크(VHD) "할당되지 않음" 우클릭 → "새 단순 볼륨" → "드라이브 문자 또는 드라이브 경로를 할당하지 않음" 선택 → "이 볼륨을 포맷하지 않음" (총 파티션을 5개 만들 때까지 반복)
관리자 권한으로 HxD 실행 → "도구" → "디스크 열기" → "읽기전용으로 읽기" 해제 → "경고" → "수락" 실행
Partition Table Entry #4를 분석하면 다음과 같은 정보를 확인할 수 있다.
- Partition Type: 0x05(확장 파티션, CHS)
- Starting LBA Address: 00 41 01 00 → 리틀엔디안 변환 → 00 01 41 00 → 82,176번 섹터
- Size in Sector: 00 D0 01 00 → 리틀엔디안 변환 → 00 01 D0 00 → 118,784 섹터
Partition Table Entry #4(확장 파티션 테이블)의 Starting LBA Address(82,176)로 이동하면 MBR 구조(Signature=55 AA)를 다시 볼 수 있다.
확장 파티션 테이블의 Partition Table Entry #1(=Partition Table Entry #4)를 분석하면 다음과 같은 정보를 확인할 수 있다.
- Partition Type: 0x06(FAT16, 32 MB~2GB, CHS)
- Starting LBA Address: 80 00 00 00 → 리틀엔디안 변환 → 00 00 00 80 → 128번 섹터 (확장 파티션 기준)
- Size in Sector: 00 50 00 00 → 리틀엔디안 변환 → 00 00 50 00 → 20,480 섹터
확장 파티션 테이블의 Partition Table Entry #1(=Partition Table Entry #4) 시작 섹터는 82,176(확장 파티션 섹터) + 128(시작 섹터) = 82,304번 섹터다. 마지막 섹터는 82,304(시작 섹터) + 20,480(전체 섹터 수) - 1 = 102,783번 섹터다.
즉, 82,304~102,783 섹터가 Partition #4 영역인 것이다.
확장 파티션 테이블의 Partition Table Entry #2를 분석하면 다음과 같은 정보를 확인할 수 있다.
- Partition Type: 0x05(확장 파티션, CHS)
- Starting LBA Address: 80 50 00 00 → 리틀엔디안 변환 → 00 00 50 80 → 20,608번 섹터 (확장 파티션 기준)
- Size in Sector: 80 50 00 00 → 리틀엔디안 변환 → 80 00 50 00 → 20,608 섹터
확장 파티션 테이블의 Partition Table Entry #2 시작 섹터는 82,176(확장 파티션 섹터) + 20,608(시작 섹터) = 102,784번 섹터다. 마지막 섹터는 102,784(시작 섹터) + 20,608(전체 섹터 수) - 1 = 123,391번 섹터다.
즉, 102,784~123,391 섹터가 다시 확장 파티션 영역인 것이다.
Partition Table Entry #2(확장 파티션 테이블)의 Starting LBA Address(102,784)로 이동하면 MBR 구조(Signature=55 AA)를 다시 볼 수 있다.
확장 파티션 테이블의 Partition Table Entry #1(=Partition Table Entry #4의 Partition Table Entry #2)를 분석하면 다음과 같은 정보를 확인할 수 있다.
- Partition Type: 0x06(FAT16, 32 MB~2GB, CHS)
- Starting LBA Address: 80 00 00 00 → 리틀엔디안 변환 → 00 00 00 80 → 128번 섹터 (확장 파티션 기준)
- Size in Sector: 00 50 00 00 → 리틀엔디안 변환 → 00 00 50 00 → 20,480 섹터
확장 파티션 테이블의 Partition Table Entry #1(=Partition Table Entry #4의 Partition Table Entry #2 ) 시작 섹터는 102,784 (확장 파티션 섹터) + 128(시작 섹터) = 102,912번 섹터다. 마지막 섹터는 102,912(시작 섹터) + 20,480(전체 섹터 수) - 1 = 123,391번 섹터다.
즉, 102,912~123,391 섹터가 Partition #5 영역인 것이다.
이를 구조화하면 아래 이미지와 같이 정리할 수 있다.
위 분석 결과를 FTK Imager로 확인할 수 있다.
"파일" → "Add Evidence Item" → "Physical Drive" 선택 → 생성한 가상 하드 드라이브(VHD) 선택 → "View" → "Properties" → Partition 선택
- Partiton Information
- Starting Sector: Starting LBA Address
- Sector Count: Size in Sector
- 파티션 내 마지막 섹터 클릭
- phy sec: Ending LBA Address (Physical Address)
- log sec: 해당 파티션 기준 섹터 번호 (Logical Address) (Sector Count - 1)
'Disk Forensic' 카테고리의 다른 글
[디지털 포렌식] FAT32 File System-Reserved Area 분석 (0) | 2025.05.06 |
---|---|
[디지털 포렌식] FAT32 File System 생성 및 구조 분석 (0) | 2025.05.05 |
[디지털 포렌식] GPT Header & Partition Table Entry 복구 (0) | 2025.05.03 |
[디지털 포렌식] GPT(GUID Partition Table) 생성 및 분석 (0) | 2025.05.03 |
[디지털 포렌식] 가상 하드 디스크(VHD) 만들기 (1) | 2025.04.30 |