.DOC ファイルとは?
拡張子が .doc のファイルは、Microsoft Word またはその他のワード プロセッシング ドキュメントによって生成されたドキュメントをバイナリ ファイル形式で表します。この拡張子は当初、いくつかの異なるオペレーティング システムでプレーン テキスト ドキュメントに使用されていました。画像、書式設定されたテキスト、プレーンテキスト、グラフ、チャート、埋め込みオブジェクト、リンク、ページ、ページの書式設定、印刷設定など、さまざまな種類のデータを含めることができます。この形式は、マニュアル、提案、仕様、履歴書、記事、または同様のドキュメントを作成するためにユーザーに提供するさまざまなオプションにより、あらゆる種類のドキュメントで人気がありました。 DOC の更新版は DOCX で、仕様が公開されている Office OpenXML に基づいています。
簡単な歴史
Corel の製品である WordPerfect は、独自の形式の拡張として DOC を使用しました。 1980 年代、WordPerfect は入手が簡単で、ほとんどのコンピュータ マシンおよびオペレーティング システムに適合していたため、ほとんどのコンピュータで引き続き使用されていました。ただし、Microsoft がドキュメント ファイル形式の製品として Microsoft Word を導入し、独自の形式に DOC 拡張子を選択したとき、WordPerfect は Windows OS で衰退しました。 Microsoft Word の人気が高まるにつれて、DOC ファイル形式は Microsoft Word 97 ~ 2003 からいくつかの改訂が行われました。デフォルトの DOC ファイル形式が Office Open XML 形式 (DOCX として知られる) に置き換えられたのは 2007 年のことでした。 Microsoft Word は、この新しい拡張子を既定のファイル形式として使用するようになりました。
DOC ファイル形式の仕様 - 詳細情報
Microsoft は、2008 年まで長い間 DOC ファイル形式の仕様をリリースしませんでした。2008 年 2 月に、Microsoft Open Specification Promise の下で .doc ファイル形式の形式仕様がリリースされました。この仕様は、DOC 形式で使用されるすべての機能を説明しているわけではありませんが、このファイル形式を操作するために必要な知識について十分な情報を提供します。それでも、利用可能な情報を利用するにはリバース エンジニアリングが必要です。仕様は何度か更新されており、最新のリビジョンは2018年8月時点で更新された8.0です。 .
いくつかの基本的な概念
DOC のファイル形式の仕様について詳しく説明する前に、このファイル形式を使用するためにいくつかの基本的な概念を理解する必要があります。
ファイル情報ベース (Fib): Fib 構造には、ドキュメントに関する情報が含まれており、ドキュメントを構成するさまざまな部分へのファイル ポインターを指定します。 Fib は可変長構造です。サイズが固定されている基本部分を除いて、すべてのセクションの前に、次のセクションのサイズを指定するカウント フィールドがあります。
Character Position: CP または Character Position は、ドキュメント テキスト内の文字のゼロから始まるインデックスとして機能する符号なし 32 ビット整数を表します。ファイル内の各文字の位置とサイズは直接取得できず、事前に指定されたアルゴリズムを使用して計算する必要があります。文字は次のとおりです。
- 文書のテキスト
- 脚注やテキスト ボックスなどのオブジェクトのアンカー
- 段落記号や表のセル記号などの制御文字
PLC: PLC 構造は、データ要素の配列が後に続く CP の配列です。すべての PLC のデータ要素は、0 バイト以上の同じサイズである必要があり、このため、CP の数はデータ要素の数よりも 1 つ多い必要があります。 PLC 構造にはさまざまなタイプがあり、それぞれのタイプで、そのタイプに複製 CP を許可するかどうかを指定します。 PLC 構造は次のもので構成されます。
- aCP (可変長): CP 要素の配列。 PLC 構造の各タイプは、CP 要素の意味と許容範囲を指定します。
- aData (可変長): PLC 構造体の各タイプは、データ要素の構造と意味、データ要素数の制限、およびそこに含まれるデータの制限を指定します。また、データ要素と対応する CP との関係も指定します。
有効な選択: .DOC ファイルの構造は、主に一連の CP によって記述されます。このような場合に従うように Microsoft によって指定された多くの ルール があります。
STTB: STTB は、要素の配列が続くヘッダーで構成される文字列テーブルです。 cData 値は、配列に含まれる要素の数を指定します。
プロパティ ストレージ: Word ファイルには、テキスト、段落、表、写真、セクションなどのさまざまな要素が含まれている場合があり、それぞれが独自のプロパティを持つことができます。これらのプロパティは、既定との違いとして Word ファイルに格納されます。このような違いは、Single Property Modifier (Sprm) とそのオペランドで構成される PRl によって指定されます。アプリケーションは、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 複合ファイルです。これらのストレージとストリームには、書き込みと読み取りのパラメーターを指定する独自の構造とサイズがあります。これらは:
Word ドキュメント ストリーム
このストリームには、ドキュメント テキストと、ファイルの他の部分から参照されるその他の情報が含まれます。ストリームには、必須であり、オフセット 0 にある必要がある先頭の FIB 以外に事前定義された構造はありません。このストリームは 2147 MB を超えてはなりません。
1TableStream または 0TableStream
バイナリ Word ファイルには、1Table ストリームまたは 0Table ストリームと呼ばれるテーブル ストリームを含めることができます。これらのうち少なくとも 1 つがドキュメントに存在する必要があります。ただし、ドキュメントに 1Table ストリームと 0Table ストリームの両方が含まれている場合は、base.fWhichTblStm によって参照されるストリームのみが使用されます。参照されていないストリームは無視する必要があります。 テーブル ストリームは 2147 MB を超えてはなりません。
#### データストリーム ####
データ ストリームには事前定義された構造はありません。これには、FIB またはファイルの他の部分から参照されるデータが含まれています。このストリームへの参照がない場合、このストリームは存在する必要はありません。データ ストリームは 2147 MB を超えてはなりません。
オブジェクト プール ストレージ
オブジェクト プール ストレージには、埋め込み OLE オブジェクト用のストレージが含まれています。ドキュメントに埋め込まれた OLE オブジェクトがない場合、このストレージは存在する必要はありません。
カスタム XML データ ストレージ
カスタム XML データ ストレージはオプションのストレージであり、その名前は “MsoDataStore” でなければなりません。
要約情報ストリーム
概要情報ストリームは、名前が「\005SummaryInformation」でなければならないオプションのストリームです。ここで、\005 は値 0x0005 を持つ文字であり、文字列リテラル「\005」ではありません。
ドキュメントの要約情報ストリーム
Document Summary Information ストリームはオプションのストリームであり、その名前は “\005DocumentSummaryInformation” でなければなりません。\005 は文字列リテラル “\005” ではなく、値 0x0005 を持つ文字です。
暗号化ストリーム
暗号化ストリームは、名前が「encryption」でなければならないオプションのストリームです。次の条件の両方が満たされない限り、このストリームは存在してはなりません:
※ドキュメントは Office Binary Document RC4 CryptoAPI Encryption で暗号化されています。
- fDocProps 値は EncryptionHeader.Flags に設定されます。
マクロの保存
Macros ストレージは、ファイルのマクロを含むオプションのストレージです。存在する場合は、プロジェクト ルート ストレージでなければなりません。
XML 署名の保存
XML 署名ストレージはオプションのストレージであり、その名前は「_xmlsignatures」でなければなりません。
署名ストリーム
signatures ストリームは、名前が「_signatures」でなければならないオプションのストリームです。このストリームにはデジタル署名が含まれています。
Information Rights Management データ スペース ストレージ
Information Rights Management データ スペース ストレージはオプションのストレージであり、その名前は “\006DataSpaces” でなければなりません。ここで、\006 は値 0x0006 を持つ文字であり、文字列リテラル “\006” ではありません。このストレージが存在する場合、保護されたコンテンツ ストリームも存在する必要があります。 このストレージが存在する場合、このストレージと保護されたコンテンツ ストリーム以外のすべての指定されたストリームとストレージは、[MS-OFFCRYPTO] で指定されているように、保護されたコンテンツ ストリームから読み取られるべきであり、それらのストリームとストレージのいずれかが保護されたコンテンツの外に存在する場合ストリーム、それらは無視する必要があります。
保護されたコンテンツ ストリーム
保護されたコンテンツ ストリームは、名前が「\009DRMContent」でなければならないオプションのストリームです。ここで、\009 は値 0x0009 を持つ文字であり、文字列リテラル「\009」ではありません。 このストリームが存在する場合、Information Rights Management データ スペース ストレージも存在する必要があります。
参照
※【MS-DOCファイル作成仕様】(https://msdn.microsoft.com/en-us/library/cc313153(v#office.12).aspx)