.DOC 파일이란?
확장자가 .doc인 파일은 Microsoft Word 또는 기타 워드 프로세싱 문서에서 생성된 문서를 바이너리 파일 형식으로 나타냅니다. 확장은 처음에 여러 운영 체제의 일반 텍스트 문서에 사용되었습니다. 여기에는 이미지, 서식이 지정된 일반 텍스트, 그래프, 차트, 포함된 개체, 링크, 페이지, 페이지 서식, 인쇄 설정 및 기타 여러 가지 유형의 데이터가 포함될 수 있습니다. 이 형식은 매뉴얼, 제안서, 사양, 이력서, 기사 또는 유사한 문서를 작성하기 위해 사용자에게 제공하는 다양한 옵션으로 인해 모든 종류의 문서에 널리 사용되었습니다. DOC의 업데이트된 버전은 DOCX이며 사양이 공개된 Office OpenXML을 기반으로 합니다.
간략한 역사
Corel의 제품인 WordPerfect는 고유 형식의 확장으로 DOC를 사용했습니다. 1980년대에 WordPerfect는 쉬운 가용성, 대부분의 컴퓨터 시스템 및 운영 체제와의 적합성으로 인해 대부분의 컴퓨터에서 계속 사용되었습니다. 그러나 WordPerfect는 Microsoft가 문서 파일 형식을 위한 제품으로 Microsoft Word를 도입하고 독점 형식으로 DOC 확장을 선택했을 때 Windows OS에서 몰락을 보았습니다. Microsoft Word가 점점 더 대중화됨에 따라 DOC 파일 형식은 Microsoft Word 97 - 2003에서 여러 개정을 거쳤습니다. 기본 DOC 파일 형식이 Office Open XML 형식(DOCX로 알려짐)으로 대체되었고 새 버전의 Microsoft Word는 이제 이 새로운 확장자를 기본 파일 형식으로 사용합니다.
DOC 파일 형식 사양 - 추가 정보
Microsoft는 2008년까지 오랫동안 DOC 파일 형식 사양을 발표하지 않았습니다. 2008년 2월 Microsoft Open Specification Promise에 따라 .doc 파일 형식에 대한 형식 사양이 발표되었습니다. 사양이 DOC 형식에서 사용하는 모든 기능을 설명하지는 않지만 이 파일 형식으로 작업하는 데 필요한 지식에 대한 충분한 정보를 제공합니다. 그러나 사용 가능한 정보를 사용하려면 리버스 엔지니어링이 필요합니다. 사양은 여러 번 업데이트되었으며 최신 revision은 2018년 8월에 업데이트된 8.0입니다. .
몇 가지 기본 개념
DOC의 파일 형식 사양에 대해 자세히 알아보기 전에 이 파일 형식으로 작업하려면 몇 가지 기본 개념을 이해해야 합니다.
파일 정보 기반(Fib): Fib 구조는 문서에 대한 정보를 포함하고 문서를 구성하는 다양한 부분에 대한 파일 포인터를 지정합니다. Fib는 가변 길이 구조입니다. 크기가 고정된 기본 부분을 제외하고 모든 섹션 앞에 다음 섹션의 크기를 지정하는 개수 필드가 있습니다.
문자 위치: CP 또는 문자 위치는 문서 텍스트에서 문자의 0부터 시작하는 인덱스 역할을 하는 부호 없는 32비트 정수를 나타냅니다. 파일에 있는 각 문자의 위치와 크기는 직접 검색할 수 없으며 미리 지정된 알고리즘을 사용하여 계산해야 합니다. 문자는 다음과 같습니다.
- 문서의 텍스트
- 각주 또는 텍스트 상자와 같은 개체의 앵커
- 단락 기호 및 표 셀 표시와 같은 제어 문자
PLC: PLC 구조는 데이터 요소의 배열이 뒤따르는 CP 배열입니다. 모든 PLC의 데이터 요소는 0바이트 이상의 동일한 크기여야 하며, 이러한 이유로 CP의 수는 데이터 요소의 수보다 하나 더 많아야 합니다. PLC 구조는 각 유형이 해당 유형에 대해 중복 CP가 허용되는지 여부를 지정하는 서로 다른 유형입니다. PLC 구조는 다음으로 구성됩니다.
- aCP(가변 길이): CP 요소의 배열입니다. PLC 구조의 각 유형은 CP 요소의 의미와 허용 범위를 지정합니다.
- aData(가변 길이): PLC 구조의 각 유형은 데이터 요소의 구조와 의미, 데이터 요소 수에 대한 제한 사항, 포함된 데이터에 대한 제한 사항을 지정합니다. 또한 데이터 요소와 해당 CP 간의 관계를 지정합니다.
유효한 선택: .DOC 파일 구성은 주로 다양한 CP로 설명됩니다. 이러한 경우 Microsoft에서 준수해야 하는 여러 규칙이 있습니다.
STTB: STTB는 헤더와 요소 배열로 구성된 문자열 테이블입니다. cData 값은 배열에 포함된 요소의 수를 지정합니다.
속성 저장소: 워드 파일에는 텍스트, 단락, 표, 그림 및 섹션과 같은 다른 요소가 있을 수 있으며 각 요소는 고유한 속성을 가질 수 있습니다. 이들 속성은 기본값과 다른 점으로 Word 파일에 저장됩니다. 이러한 차이점은 단일 속성 수정자(Sprm) 및 해당 피연산자로 구성된 PR1에 의해 지정됩니다. 응용 프로그램은 Prl 목록을 적용하여 속성의 최종 집합을 결정할 수 있습니다.
암호 보호: Word 파일도 암호로 보호할 수 있으며 다음 메커니즘 중 하나를 사용할 수 있습니다.
- XOR 난독화
- Office 바이너리 문서 RC4 암호화
- Office 바이너리 문서 RC4 CryptoAPI 암호화
FibBase.fEncrypted 및 FibBase.fObfuscation이 모두 1이면 파일은 XOR 난독화를 사용하여 난독화됩니다.
FibBase.fEncrypted가 1이고 FibBase.fObfuscation이 0이면 파일은 Office 바이너리 문서 RC4 암호화 또는 Office 바이너리 문서 RC4 CryptoAPI 암호화를 사용하여 암호화되며, EncryptionHeader는 테이블 스트림의 첫 번째 FibBase.lKey 바이트에 저장됩니다. EncryptionHeader.EncryptionVersionInfo는 파일을 암호화하는 데 사용된 암호화 메커니즘을 지정합니다.
파일 구조
원래의 이진 Word 파일은 여러 저장소와 스트림으로 구성된 OLE 복합 파일입니다. 이러한 저장소와 스트림은 쓰기 및 읽기를 위한 매개변수를 지정하는 고유한 구조와 크기를 가지고 있습니다. 이것들은:
WordDocument 스트림
이 스트림에는 파일의 다른 부분에서 참조되는 문서 텍스트 및 기타 정보가 포함됩니다. 스트림에는 필수이며 오프셋 0에 있어야 하는 시작 부분의 FIB 외에 미리 정의된 구조가 없습니다. 이 스트림은 2147MB보다 커서는 안 됩니다.
1TableStream 또는 0TableStream
이진 Word 파일에는 1Table 스트림 또는 0Table 스트림으로 알려진 테이블 스트림이 포함될 수 있습니다. 이 중 적어도 하나는 문서에 있어야 합니다. 그러나 문서에 1Table 스트림과 0Table 스트림이 모두 포함된 경우 base.fWhichTblStm에서 참조하는 스트림만 사용됩니다. 참조되지 않은 스트림은 무시되어야 합니다(MUST). 테이블 스트림은 2147MB보다 커서는 안됩니다(MUST NOT).
데이터 스트림
데이터 스트림에는 사전 정의된 구조가 없습니다. 여기에는 FIB 또는 파일의 다른 부분에서 참조되는 데이터가 포함됩니다. 이 스트림에 대한 참조가 없으면 이 스트림이 없어도 됩니다. 데이터 스트림은 2147MB보다 커서는 안 됩니다(MUST NOT).
오브젝트 풀 스토리지
개체 풀 저장소에는 포함된 OLE 개체에 대한 저장소가 포함됩니다. 문서에 포함된 OLE 개체가 없으면 이 저장소가 없어도 됩니다.
사용자 지정 XML 데이터 저장소
사용자 지정 XML 데이터 저장소는 이름이 “MsoDataStore"여야 하는 선택적 저장소입니다.
요약 정보 스트림
요약 정보 스트림은 이름이 “\005SummaryInformation"이어야 하는 선택적 스트림입니다. 여기서 \005는 문자열 리터럴 “\005"가 아니라 값이 0x0005인 문자입니다.
문서 요약 정보 스트림
문서 요약 정보 스트림은 이름이 “\005DocumentSummaryInformation"이어야 하는 선택적 스트림입니다. 여기서 \005는 문자열 리터럴 “\005"가 아니라 값이 0x0005인 문자입니다.
암호화 스트림
암호화 스트림은 이름이 “암호화"여야 하는 선택적 스트림입니다. 이 스트림은 다음 조건이 모두 충족되지 않는 한 존재해서는 안 됩니다(MUST NOT).
- 문서는 Office Binary Document RC4 CryptoAPI 암호화로 암호화됩니다.
- fDocProps 값은 EncryptionHeader.Flags에 설정됩니다.
매크로 저장소
매크로 저장소는 파일에 대한 매크로를 포함하는 선택적 저장소입니다. 있는 경우 프로젝트 루트 저장소여야 합니다.
XML 서명 저장소
XML 서명 저장소는 이름이 “_xmlsignatures"여야 하는 선택적 저장소입니다.
서명 스트림
서명 스트림은 이름이 “_signatures"여야 하는 선택적 스트림입니다. 이 스트림에는 디지털 서명이 포함되어 있습니다.
정보 권한 관리 데이터 공간 스토리지
정보 권한 관리 데이터 공간 저장소는 이름이 “\006DataSpaces"여야 하는 선택적 저장소입니다. 여기서 \006은 문자열 리터럴 “\006"이 아니라 값이 0x0006인 문자입니다. 이 저장소가 있는 경우 보호 콘텐츠 스트림도 있어야 합니다(MUST). 이 저장소가 있는 경우 이 저장소 및 보호된 콘텐츠 스트림을 제외한 모든 지정된 스트림 및 저장소는 [MS-OFFCRYPTO]에 지정된 대로 보호된 콘텐츠 스트림에서 읽어야 하며 이러한 스트림 및 저장소가 보호된 콘텐츠 외부에 존재하는 경우 스트림, 그들은 무시되어야 합니다.
보호된 콘텐츠 스트림
보호된 콘텐츠 스트림은 이름이 “\009DRMContent"여야 하는 선택적 스트림입니다. 여기서 \009는 문자열 리터럴 “\009"가 아니라 값이 0x0009인 문자입니다. 이 스트림이 있으면 정보 권한 관리 데이터 공간 저장소도 있어야 합니다(MUST).