1. BIFF?

BIFF은 다른 회사에서 제작한 소프트웨어 간 데이터를 쉽게 전송할 수 있도록 고안된 범용적인 컨테이너파일 형식인 IFF형식을 기반으로 한다. 여러 시트를 포함하는 통합 문서(BIFF5~8)는 일반적으로 복합문서파일(Compound Document File, OLE 파일) 형식으로 저장한다. 이러한 파일 형식은 "OLE2 저장 파일 형식" 또는 "Microsoft Office 호환 저장 파일 형식" 이라고도 한다. BIFF 구조를 확인하기 위해서 doc 파일 문서로 예를 들어보자!


2. BIFF 파일 시그니처

BIFF 파일 시그니처는 "D0 CF 11 E0 ..." 으로 시작한다.


3. OLE 파일 구조

OLE 파일은 그림과 같이 헤더와 데이터 블록으로 구성이 된다. 헤더는 OLE 파일 전체 주요 정보를 가지고 있고, 데이터 블록은 다음과 같다.

- Property : 저장소(폴더) 및 스트림(파일) 정보를 보관

- 스트림 데이터

- BBAT(Big Block Allocation Table)

- SBAT(Small Block Allocation Table)


데이터 블록은 주로 스트림 데이터가 주로 차지하고 있다. 이 데이터는 흩어져 있어 특정 스트림 블록 위치는 Big/Small Block Allocation Table에 링크로 저장되어 있다.

OLE 파일을 512 Byte 단위로 나누어 도식화를 하면 위 그림과 같다. -1 블록이 헤더 블록이며, 0 .. n 블록이 데이터 블록이다.


4. BBAT, SBAT 및 BBAT Depot

BBAT/SBAT는 OLE 내부의 데이터 스트림(파일)의 위치 정보를 링크 형태로 저장하고 있다. Property(저장소/스트림)의 크기가 4096 Byte 보다 작으면 SBAT, 크면 BBAT를 참조하여 링크 구조를 생성한다. 파일의 크기가 커지면 BBAT가 저장된 저장소(Depot)의 크기도 증가하게 된다. BBAT 저장소 헤더에는 BBAT 저장소의 개수(n)가 명시되어 있다.



5. 분석

- BBAT Depot 개수

헤더의 0x2C ~ 0x2F 위치에 값은 BBAT Depot의 개수를 나타낸다. 리틀 엔디안 방식으로 읽는다. 그러므로 값은 8이다. 8개의 Depot이 존재한다는 뜻.


- Property 시작 위치

헤더의 0x30 ~ 0x33 위치에 값은 Property의 시작 offset이다. 0x386는 10진수로 902이다. 즉 902번째 블록에 위치한다는 뜻이다. 512 Byte 기준이므로 512를 곱해주고 헤더가 -1이므로 512를 더하면 정확한 위치 값이 나온다. (902*512+512 = 462,336)


해당 위치로 가면 Root Entry 라는 내용이 보일 것이다. Property 영역의 시작을 알리는 문자열이다.


- SBAT 시작 위치

헤더의 0x3C ~ 0x3F 위치에 값은 SBAT의 시작 offset이다. Property와 같은 방법으로 이동하면 된다.


- SBAT Depot 개수

헤더의 0x40 ~ 0x43 위치에 값은 SBAT Depot 개수를 나타낸다.


-Extra BBAT Depot 위치

헤더의 0x44 ~ 0x47 위치에 값은 Extra BBAT Depot의 시작 offset이다. 0xFFFFFFFE Extra BBAT Depot이 존재하지 않는다는 뜻이다. 존재하게 되면 해당 위치 offset 값으로 설정이 된다. BBAT Depot이 확장이 되는 이유는 헤더는 아래에서 나중에 설명하겠다.


- Extra BBAT Depot 개수

헤더의 0x48 ~ 0x4B 위치에 값은 Extra BBAT Depot의 개수를 나타낸다.


- BBAT Depot 위치

헤더의 0x4C ~ 0x1FF 위치에 값은 BBAT Depot의 시작 offset이다. 4 Byte씩 읽고, 0xFFFFFFFF 값은 비어있다는 뜻이다. 헤더에서는 총 109개의 Depot offset이 존재한다. 109개가 넘어가면 Extra BBAT Depot 시작 위치 offset과, Extra BBAT Depot 개수 offset값이 변한다. Extra BBAT Depot 개수가 2개 이상이면, 다음 Depot 위치는 해당 Extra BBAT Depot 마지막 4 Byte에 저장이 된다. offset에 해당하는 데이터 블록을 512 Byte 씩 읽어서 순차적으로 연결하면 하나의 OLE 데이터 스트림을 구성할 수 있다. 이 때 마지막 블록은 실제 데이터 크기가 512 Byte 미만일 경우를 고려하여 전체 스트림 크기를 조정한다.


6. 파일 버전에 따른 프로그램 버전과 포맷 구조

파일 버전 

프로그램 버전 

포맷 구조 

 7.0

 Office 95

 BIFF 포맷 구조

 8.0

 Office 97

 9.0

 Office 2000

 10.0

 Office XP

 12.0

 Office 2007

 OOXML 포맷 구조

 14.0

 Office 2010

 15.0

 Office 2013

 16.0

 Office 2016


만약 버전 정보가 없다면, BIFF 포맷 정보를 확인한다.

 BIFF 포맷 버전

프로그램 버전 정보 

 0

 Excel 2.0/2.1 (BIFF2)

 2

 Excel 3.0 (BIFF3)

 4

 Excel 4.0 (BIFF4)

 5

 Excel 5.0 (BIFF5)

 7

 Excel 7.0 (Excel 95) (BIFF7)

 8

 Excel 97 ~ 2007 (XL8 ~ XL12) (BIFF8)

 그 외

 Unknown


 

'Digital Forensics > ETC' 카테고리의 다른 글

DOC 문서 파일 포맷 구조  (0) 2017.12.06

+ Recent posts