< 이미징 기반으로 MBR/GPT 분석>

MBR/GPT 구조
MBR | MBR Slack |
VBR | Volume Data |
VBR | Volume Data |
MBR Slack : MBR과 VBR 사이에 있는 낭비되는 공간
VBR : 볼륨의 시작에 위치하는 구조. BPB (해당 볼륨의 파일 시스템의 메타 데이터)와 부트 로더 로딩 코드 정보가 있음.
Volume Data : file system에 의해 할당된 볼륨의 데이터가 들어가있는 공간,
MBR(Master Boot Record) :
- 쉽게 얘기해서 컴퓨터가 부팅이 될 때 가장 먼저 참조하는 영역
- 주로 윈도우 OS 같은 운영체제가 어디에 어떻게 위치해 있는지 식별
- 컴퓨터의 주기억장치에 적재될 수 있도록 하기 위한 정보로 하드디스크 또는 디스켓의 첫 번째 섹터에
저장되어 있음
- 각 디스크에서 4개 이상의 파티션을 지원하지 않음
- 2TB 이상의 디스크 제한으로 2TB 이상 디스크 전체 용량을 사용할 수 없음
- 주로 하는 역할은 부트파티션을 파티션 테이블에서 찾고, 시작 섹터를 찾거나 부트 섹터 정보를 메모리로 불러온다.
- BIOS 부팅 프로세스 (전통적인 방식), MBR은 0번 섹터에 위치

Boot Code (446 byte) |
Partition Table (64 byte = 16 * 4) |
Signature (2byte = 55 AA) |

위 NTFS Architecture를 보면, 컴퓨터 부팅 절차 확인 가능
BIOS -> MBR -> VBR -> 메모리 커널 로딩 -> 운영체제 실행 및 제어권 이동
Boot Code (주요 필드만)
0x1B5 ~ 0x1B7 : Error Message Offset
0x1B8 ~ 0x1BB : MBR Device Signature (Device GUID)
1. BIOS에 의해 POST(Power On Self-Test)과정 진행 후 MBR 부트 코드 호출.
2. MBR Partition Table 참조하여 부팅 가능한 파티션의 VBR Boot Code 호출.
3. VBR의 부트 로드가 OS를 로드.
Partition Table
총 4개의 주 파티션 테이블 엔트리를 가짐.
0x1BE : Boot Flag(0x80 부팅 가능, 0x00 부팅 불가능)
0x1BF ~ 0x1C1 : Starting CHS address (주소 지정 방식이 CHS(Cylinder-Head-Sector)일 경우, 파티션 시작 위치)
0x1CS : Partition Type (파티션 유형, 0x07 NTFS, 0x0C FAT32)
0x1C3 ~ 0x1C5 : ending CHS address
0x1C6 ~ 0x1C9 : Starting LBA address (주소 지정 방식이 LBA(Logical Block Addressing)일 경우, 파티션 시작 위치)
0x1CA ~ 0x1CD : Size in sector (해당 파티션에 할당된 총 섹터 수)
Signature
0x55AA
√ MBR은 기존 저장매체의 용량이 증가하게 되면서 MBR이 다룰 수 있는 용량적인 한계가 있었다.
-> 이를 개선하기 위해 GPT(GUID Partition Table) 가 도입되었다.
MBR/GPT :
- 물리적인 하드 디스크에 대한 파티션 테이블 레이아웃 표준
- 최대 디스크 및 파티션 크기를 8ZB(800억TB)까지 허용, 128개의 주 파티션 생성 가능
- 각 디스크에 4개 이상의 파티션 보유 가능
- CRC(Cyclical Redundancy Check)를 이용하여 파티션 테이블 보호 가능
- 볼륨의 끝에 중요 데이터 구조를 복제본으로 저장하여 장애가 발생했을 때 복구 가능
- UEFI 부팅 프로세스
-> 개선된 EFI 펌웨어에서 지원하는 파티션 테이블 형식이 GPT 파티션
Protective MBR |
GPT Header |
Partition Table |
GPT Volume | Backup GPT Header |
Backup Partition Table |
- 기존 MBR 구조와의 차이는 GPT Headder와 Partition Table이 2개씩 있다.
- 앞 섹터가 존재하는 GPT Header와 Partition Table이 손상되면 백업 용도로 사용하려 놔둔 것
Protective MBR 구조
- Protective MBR 0번 Sector에 위치
- Protective MBR은 EFI 가 아닌 BIOS 서비스를 통한 GPT 기반 부팅을 진행할 때 지원하는
운영체제에서 첫번째 섹터는 Boot 로더로서 사용하기 때문에 Protective MBR 이라는 이름으로 존재

- GPT에서 MBR을 사용하는 이유 :
MBR을 사용하는 BIOS에서 오작동을 일으키지 않도록 하기 위해서 사용..
- GPT 사용시 MBR의 Partition Type을 0xEE로 하여 전체 GPT Drive를 표시하여 OS에 해당 Drive가 GPT를 사용한다고 알림
GPT Header 구조
- GPT Header는 1번 Sector 에 위치
- 일반적인 GPT Header는 92 Byte로 되어 있다.
- GPT에 대한 대부분의 설정 정보를 담고 있고 있고, 그외의 영역에는 NULL(0x00) Byte를 가지고 있다.

(0x200~0x207, 8 Byte) : Signature, "EFI PART" 시그니처를 필수로 가지고 있다.
(0x208~0x20B, 4 Byte): Revision,Version 1.0을 의미한다.
(0x20C~0x20F, 4 Byte) : Header Size, GPT Header의 크기를 이야기 하는데 대부분 92Byte 이므로 0x5C값을 갖는다.
(0x210~0x213, 4 Byte) : CRC32 of Header, 무결성 체크를 위한 CRC32 값
Header의 시작부터 끝나는 위치 까지만 체크하는 값
(0x214~0x217, 4 Byte) : Reserved, 예약된 영역은 사용하지 않습니다.
(0x218~0x21F, 8 Byte) : LBA of GPT Header, 현재 LBA 주소를 나타내기 때문에 무조건 0x01 띈다.
(0x220~0x227, 8 Byte) : LBA of Backup GPT Header,
GPT Header 정보를 Backup한 Sector의 위치를 기록한 값
(0x228~0x22F, 8 Byte) : Starting LBA for Partitions
- 파티션을 담을 수 있는 LBA 주소를 의미한다.
- Primary Partition Table Last LBA+1 한 값 이다.
(0x231~0x237, 8 Byte) : Ending LBA for Partitions,
- 파티션을 담을 수 있는 LBA의 끝 주소를 의미한다.
- Secondary Partition Table First LBA-1 한값 이다.
(0x238~0x247, 16 Byte) : Disk GUID, Unix의 UUID(Universally Unique IDentifier)와 동일。
(0x248~0x24F, 8 Byte) : Partition Table Entry Starting LBA,
Partition Table Entry의 시작 LBA 주소
(0x250~0x253, 4 Byte) : Number of Partition Entries,
- 지원하는 Partition Entry의 개수를 담고 있다.
- 기본적으로 최대 개수는 128개 이므로 0x80을 가진다.
(0x254~0x257, 4 Byte) : Size of Partition Table Entry,
- GPT Partition Entry의 크기를 의미
- 대부분 128byte 사용.
(0x258~0x25B, 4 Byte) : CRC32 of Partition Table, Partition Table의 CRC32 값을 의미
(0x25C~0x3FF, 420 Byte) : Reserved, 예약된 영역은 사용하지 않음
GPT Partition Entry 구조
- GPT Partition Entry는 2번 Sector 에 위치
- 일반적인 GPT Partition Entry는 128 Byte로 되어 있음
- 각 파티션에 대한 대부분의 정보를 담고 있고 있으며,
MBR의 파티션 테이블의 LBA 주소는 4Byte로 기록하지만 GPT는 8Byte로 기록
- GUID를 이용해서 각 파티션의 정보를 확인할 수 있음.

(0x400~0x40F, 16 Byte) : Partition Type GUID
- 파티션의 타입을 표현하는 고유 정보를 기록
- 파티션의 파일 시스템과 사용하는 운영체제 및 서비스 정보를 확인 가능
- 파티션 GUID 값을 아래의 사이트에 있는 표에서 값을 찾아보면
어떤 파티션인지 알 수 있음
(0x410~0x41F, 16 Byte) : Unique Partition GUID, 파티션 마다 할당하는 고유 값을 저장
(0x420~0x427, 8 Byte) : Frist LBA, 파티션의 시작 주소를 리틀 엔디안으로 저장
(0x428~0x42F, 8 Byte): Last LBA, 파티션의 끝 주소를 리틀 엔디안으로 저장
(0x430~0x437, 8 Byte) : Attribute Flags, 파티션 테이블 엔트리의 속성 값이 저장
(0x438~0x47F, 72 Byte) : Partition Name, 지정 되어 있는 파일 시스템 이름, UTF-16(LE) code 사용
= Microsoft reserved partition
'Window Forensic' 카테고리의 다른 글
[File System] NTFS (0) | 2025.03.17 |
---|---|
[File System] FAT (6) " Directory Entry" (0) | 2025.03.15 |
[File System] FAT (4) "Data Area" (0) | 2025.03.15 |
[File System] FAT (5) "Data Area" (0) | 2025.03.15 |
[File System] FAT (3) "Reserved Area" (0) | 2025.03.15 |