1. DOC ?

컴퓨터에서 DOC 또는 doc (Document의 준말)은 워드 처리 문서를 위한 파일 확장자이다. 대개 Microsoft Word에 쓰인다. 역사적으로 이 확장자는 다양한 운영 체제에서, 특히 프로그램이나 컴퓨터 하드웨어의 플레인 텍스트 형식으로 사용되었다. 1980년대에 워드퍼펙트는 DOC을 저들의 사유 포맷 확장자로 사용하였다. 나중에 1990년대 말에 이르러 Microsoft는 DOC 확장자를 자신의 Microsoft Word 처리 포맷으로 사용하였다. 전자의 경우는 PC 세상에서 대부분 사라진 상황이다. - Wikipedia -


MS Word 바이너리 파일 포맷의 기본 스트림(WordDocument 스트림)은 파일 정보 블록(FIB, File Information Block)으로 시작한다. FIB는 파일의 각 부분에서 참조하는 문서 텍스트 및 기타 정보를 포함하는 가변 길이의 형식의 구조이며, 최대 크기는 0x7FFFFFFF 이다.


2. BIFF 파일 형식

DOC 파일은 "D0 CF 11 E0 ..." 으로 시작되는 BIFF 파일 형식이다.



3. DOC 파일 구분할 수 있는 문자열

파일 중간에 "WordDocument" 문자열이 존재한다면 DOC 파일로 볼 수 있다.


4. FibBase 구조

FIB는 MS Word 바이너리 파일에 포함된 구성요소의 정보를 한 쌍의 정수 형태로 가지고 있다. 최상위 32바이트에 저장된 FibBase 고정된 크기이며 포맷 분석에 사용되는 주요 정보를 포함된다. 다음 그림은 FibBase 전체 구조이다. 아래 구조 설명은 MS에서 제공하기 때문에 MS에서도 확인 가능하다.

(아래 글은 거의 다 MS에서 제공하는 문서를 참고 했어요... 확실한 것을 원한다 싶은 사람은 MS 문서를 참고해주세요.)

- wIdent

Word 바이너리 파일의 시그니처 (0xA5EC)


- nFib

사용되는 파일 포맷의 버전 (0x00C1). FibRgCswNew의 nFib 속성 값이 있는 경우 그 값이 사용된다. 이 값은 설치 언어를 지정하는데 사용되기도 한다.

nFib 값     cswNew 값

0x00C1 -> 0

0x00D9 -> 0x0002

0x0101 -> 0x0002

0x010C -> 0x0002

0x0112 -> 0x0005


- unused 

사용되지 않는 값이다.


- lib

문서를 생성하는 응용프로그램의 설치 언어를 지정하는 값이다.

nFib 값이 0x00D9 이거나 크면 동아시아, 스페인어, 독일어, 불어이다. 0x0101 이상이면 베트남어, 태국어 또는 힌디어이다.


- pnText

WordDocument 스트림에 포함된 모든 상용구 항목을 지칭하는 오프셋으로 부호 없는 정수. 이 값이 0이면 연결된 상용구 항목이 없다.


- A ~ M

문서 속성 값을 나타낸다. 

해당 값을 비트로 나타내면 0x52F0 = 0101 0010 1111 0000과 같다. 0이 yes, 1이 no 이다.

A - fDot : 템플릿 여부

B - fGlsy : 상용구만 포함되어 있는지 여부

C - fComplex : 증분 저장을 사용하는지 여부

D - fHasPic : 문서에 그림을 포함하는지 여부

E - cQuickSave(4 bit) : nFib가 0x00D9 보다 작은 경우 자동 저장 시간을 의미

F - fEncrypted : 암호화 및 난독화가 지정되었는지 여부

G - fWhichTblStm : FIB가 참조하는 테이블 스트림(0 -> 0Table, 1 -> 1Table)

H - fReadOnlyRecommended : 문서 작성자가 읽기전용 모드로 지정했는지 여부

I - fWriteReservation : 문서에 쓰기 예약 암호가 있는지 여부

J - fExtChar : 반드시 1

K - fLoadOverride : 기본 단락 스타일에 지정된 언어 정보와 글꼴을 응용 프로그램의 설치 언어에 적합한 기본 값으로 대체할지 여부

L - fFarEast : 문서를 만든 응용 프로그램의 설치 언어가 동아시아 언어인지 여부

M - fObfuscated : fEncrypted가 1이면 비트는 XOR 난독화를 사용하여 문서가 난독화 되는지 여부를 지정


- nFibBack

파일 포맷 버전에 따라 값이 달라진다. 0x00BF은 Word 97 버전이다.


- IKey

fEncrypted가 1이고, fObfuscated 1이면 XOR 난독화 암호 확인자(password verifier)를 지칭한다.


- envr

사용되지 않으며 값은 0이다.


- N ~ S

기타 속성 값을 나타낸다.

해당 값을 비트로 나타내면 0x10 = 0001 0000과 같다. 

N - fMac : 사용되지 않으며 값은 0이다.

O - fEmptySpecial : 사용되지 않으며 값은 0이다.

P - fLoadOverridePage : 페이지 크기, 방향 및 여백의 섹션 속성을 응용프로그램 설치 언어에 적합한 기본 값으로 대체할지 여부

Q - reserved : 사용되지 않으며 값은 0이다.

R - reserved : 사용되지 않으며 값은 0이다.

S - fSpare0(3 bit) : 사용되지 않으며 값은 0이다.


- reserved3 ~ 4

사용되지 않으며 값은 0이다.


- reserved5 ~ 6

사용되지 않으며 값은 0이다. 

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

BIFF (Binary Interchange File Format)  (1) 2017.11.27

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