1. OLE File이란

2. OLE 파일 구조

3. Header 정보

4. BBAT(Big Block Allocation Table)

5. SBAT(Small Block Allocation Table)

6. Root Storage Sector ID

7. Stream Object

1. OLE File이란

1-1) OLE File

-> MS 오피스인 워드, 엑셀, 파워포인트의 문서 포맷으로 사용

-> 내부가 하나의 작은 하드 디스크와 같은 파일 시스템 구조

-> 폴더 및 파일의 개념 존재

Storage(폴더)와 Stream(파일)

Untitled

✍🏻 OLE File Format을 통해  상위 하위 호환성

-> 워드는 최신이나 구버전 호환이 가능함

-> 구 버전은 work book으로 저장

-> 신 버전은 book으로 저장

1-2) OLE File Image

Untitled

1-2)-1. Root Strorage

헤더 다음으로 가장 먼저 읽어야 할 항목임.

파일 내에 존재하는 모든 스트림과 스토리지를 포함하고 있는 최상위 폴더이고

Small Stream(Small Sector)을 저장하고 있음.

⇒ BBAT를 참조하여 헤더의 Root Storage Sector ID와 연결된 섹터들을

전부 합친다면 파일 전체적인 구조를 파악할 수 있음.

2. OLE 파일 구조

2-1) Header Section & Data Section Block Image

→ OLE File 구조는 크게 Header Section과 Data Section으로 나눔.

Untitled

Untitled

*속도를 좀 더 높이기 위해 시프트 연산자(Click)를 사용함.

2-2) Header Section(=Header Block)

→ File Signature, Sector Count, Sector Size, Start Sector ID 등

→ OLE 파일을 구성하고 있는 주요 정보들이 저장되어 있음.

2-3) Data Section(=Data Block)

2-3)-1. Data Section 구성요소

2-3)-2. BBAT(Big Block Allocation Table)

2-3)-3. SBAT(Small Block Allocation Table)

파일 헤더에 나와있는 Max Small Stream Size보다

크기가 작은 스트림을 읽을 땐 BBAT가 아닌 SBAT를 참조해야 함.

SBAT는 BBAT와 똑같은 메커니즘임.

Small Sector 한 개 크기는 64바이트임. 만약 256바이트 스트림을 저장할 경우

4개의 Small Sector에 각각 64바이트씩 저장해야 함.

⇒ Small Stream(Small Sector)는 루트 스토리지에 저장되어 있음.

⇒ 따라서 Small Stream을 읽기 위해서는 Root Storage의 BBAT를 통해 먼저 읽어야 함.

3. Header Information

3-1) Header Information

OLE File에서 가장 먼저 읽어야 할 부분은 Header임. Header에는 OLE File에 대한 다양한 정보를

저장하고 있음. Header Section에는 파일의 시작 위치부터 1 Sector(512Bytes)만큼이다.

Hex Viewer 또는 Microsoft에서 제공하는 OffVis를 통해 확인할 수 있음.

3-2) Magic ID

Untitled

→ OLE File 반복 Signature.

→ 기본 OLE File의 이 값은 절대 0xE11AB1A1E011CFDO(Little Endian(Click))

3-3) CLSID

3-4) Minor Version

3-5) Major Version

3-6) Byte Order

3-7) Sector Shift(BBAT)(Click)

3-8) Small Sector Shift(SBAT)

3-9) Reserved1

3-10) Reserved2

3-11) Reserved3

3-12) Big Block Allocation Table Depot 개수

3-13) Root Storage Sector ID

3-14) Reserved4

3-15) Max Small Stream Size

3-16) SBAT Depot Start Sector ID

3-17) SBAT Sector Count

3-18) Start Block of Extra Big Block Allocation Table

3-19) Number of Extra Big Block Allocation Table

3-20) BBAT Depot

3-21) Header Information

4. BBAT(Big Block Allocation Table)

5. SBAT(Small Block Allocation Table)

6. Root Storage Sector ID

7. Stream Object

BBAT의 시작주소 + (Star Sector ID의 값 * DWORD(0x04)) = Next Sector

  0x800(2048) + (0x09(9) * 0x04(4)) = 2084(0x824)

	...

	0xFEFFFFFF까지

5. Convert File to Hex

6. How to convert byte arrays to Hex

7. OLE 파일 구조와 비슷한 FTA File System