Какво е DOC файл?
Файловете с разширение .doc представляват документи, генерирани от Microsoft Word или други текстови документи в двоичен файлов формат. Първоначално разширението се използва за документация с обикновен текст на няколко различни операционни системи. Може да съдържа няколко различни типа данни като изображения, форматиран, както и обикновен текст, графики, диаграми, вградени обекти, връзки, страници, форматиране на страници, настройки за печат и много други. Форматът беше популярен за всякакъв вид документация поради разнообразието от опции, които предлага на потребителите за писане на ръководства, предложения, спецификации, автобиографии, статии или други подобни документи. Актуализираната версия на DOC е DOCX, която е базирана на Office OpenXML, чиито спецификации са публично достъпни.
Кратка история
WordPerfect, продукт на Corel, използва DOC като разширение на своя патентован формат. През 80-те години на миналия век WordPerfect остава изборът за използване на повечето компютри поради лесната му достъпност, съответствие с повечето компютърни машини и операционни системи. Въпреки това, WordPerfect видя падането си в Windows OS, когато Microsoft представи Microsoft Word като свой продукт за файлов формат на документи и избра разширението DOC за своя патентован формат. Тъй като Microsoft Word стана все по-популярен, файловият формат DOC претърпя няколко ревизии от Microsoft Word 97 - 2003 г. Беше 2007 г., когато файловият формат по подразбиране DOC беше заменен от формат Office Open XML (известен като DOCX) и новите версии на Microsoft Word вече използва това ново разширение като файлов формат по подразбиране.
Спецификации на файлов формат DOC - повече информация
Microsoft не издаваше спецификациите на файловия формат DOC дълго време до 2008 г. През февруари 2008 г. спецификациите на формата бяха пуснати за файлов формат .doc съгласно Microsoft Open Specification Promise. Въпреки че спецификацията не описва всички функции, използвани от формата DOC, тя дава достатъчно информация за знанията, необходими за работа с този файлов формат. Все пак е необходимо обратно инженерство, за да се използва наличната информация. Спецификациите са актуализирани няколко пъти и последната ревизия е 8.0, която е актуализирана от август 2018 г. .
Някои фундаментални понятия
Преди да навлезем в подробности относно спецификациите на файловия формат за DOC, е необходимо да разберете някои основни понятия, за да работите с този файлов формат.
Файлова информационна база (Fib): Fib структурата съдържа информация за документа и указва файловите указатели към различни части, които съставляват документа. Fib е структура с променлива дължина. С изключение на основната част, която е с фиксиран размер, всяка секция се предшества от поле за броене, което указва размера на следващата секция.
Позиция на знака: CP или позицията на знака представлява 32-битово цяло число без знак, което служи като базиран на нула индекс на знак в текста на документа. Местоположението и размерът на всеки знак във файла не могат да бъдат извлечени директно и трябва да бъдат изчислени с помощта на предварително зададен алгоритъм. Героите включват:
- Текст на документа
- Котви на обекти като бележки под линия или текстови полета
- Контролни знаци като знаци за параграфи и знаци за клетки на таблица
PLC: Структурата на PLC е масив от CP, последван от масив от елементи с данни. Елементите от данни за всеки PLC трябва да са с еднакъв размер от нула или повече байта и поради тази причина броят на CPs трябва да бъде с един повече от броя на елементите от данни. PLC структурите са от различни типове, като всеки тип указва дали дублиращите се CP са разрешени за този тип или не. Структурата на PLC се състои от:
- aCP (променлива дължина): Масив от CP елементи. Всеки тип PLC структура определя значението на CP елементите и разрешения диапазон.
- aData (променлива дължина): Всеки тип PLC структура определя структурата и значението на елементите от данни, всички ограничения върху броя на елементите от данни и всички ограничения върху данните, съдържащи се в тях. Той също така определя връзката между елементите на данните и съответните CP.
Валиден избор: Конструкциите на .DOC файлове се описват главно от набор от CP. Има редица правила, определени от Microsoft, които трябва да се следват в такъв случай.
STTB: STTB е таблица с низове, съставена от заглавка, която е последвана от масив от елементи. Стойността cData указва броя на елементите, които се съдържат в масива.
Съхранение на свойства: Word файл може да има различни елементи като текст, параграфи, таблици, картини и раздели, където всеки може да има свои собствени свойства. Свойствата им се съхраняват във файла на Word като разлики от стандартните. Такива разлики се определят от PR1, който се състои от модификатор на единично свойство (Sprm) и неговия операнд. Едно приложение може да определи крайния набор от свойства чрез прилагане на списъци от Prls.
Защита с парола: Word файловете също могат да бъдат защитени с парола, за което може да се използва един от следните механизми.
- XOR обфускация
- Office двоичен документ RC4 криптиране
- Office двоичен документ RC4 CryptoAPI криптиране
Ако и двете FibBase.fEncrypted и FibBase.fObfuscation са 1, файлът е обфусциран чрез използване на XOR обфускация.
Ако FibBase.fEncrypted е 1 и FibBase.fObfuscation е 0, файлът е шифрован чрез използване на Office Binary Document RC4 Encryption или Office Binary Document RC4 CryptoAPI Encryption, като EncryptionHeader се съхранява в първите FibBase.lKey байтове на потока на таблицата. EncryptionHeader.EncryptionVersionInfo указва кой механизъм за шифроване е използван за шифроване на файла.
Файлова структура
Двоичният файл на Word по своята оригиналност е OLE съставен файл, който се състои от няколко хранилища и потоци. Тези хранилища и потоци имат своя собствена структура и размери, които определят параметрите за запис и четене. Това са:
WordDocument поток
Този поток съдържа текста на документа и друга информация, посочена от други части на файла. Потокът няма предварително дефинирана структура, различна от FIB в началото, която е задължителна и трябва да бъде с отместване 0. Този поток не трябва да бъде по-голям от 2147 MB.
1TableStream или 0TableStream
Двоичният файл на Word може да съдържа потоци от таблици, известни като поток от 1 таблица или поток от 0 таблици. Поне един от тях трябва да присъства в документа. Въпреки това, ако документът съдържа както потоци 1Table, така и 0Table, се използва само потокът, посочен от base.fWhichTblStm. Нереферираният поток ТРЯБВА да се игнорира. Потокът на таблицата НЕ ТРЯБВА да бъде по-голям от 2147 MB.
Поток от данни
Потокът от данни няма предварително дефинирана структура. Той съдържа данни, които са препратени от FIB или от други части на файла. Този поток не трябва да присъства, ако няма препратки към него. Потокът от данни НЕ ТРЯБВА да бъде по-голям от 2147 MB.
Съхранение на пул обекти
Съхранението на Object Pool съдържа хранилища за вградени OLE обекти. Това хранилище не е необходимо да присъства, ако в документа няма вградени OLE обекти.
Персонализирано съхранение на XML данни
Персонализираното съхранение на XML данни е незадължително хранилище, чието име ТРЯБВА да бъде „MsoDataStore“.
Обобщен информационен поток
Потокът с обобщена информация е незадължителен поток, чието име ТРЯБВА да бъде “\005SummaryInformation”, където \005 е символът със стойност 0x0005, а не низовият литерал “\005”.
Обобщен информационен поток на документа
Потокът с обобщена информация на документа е незадължителен поток, чието име ТРЯБВА да бъде “\005DocumentSummaryInformation”, където \005 е знакът със стойност 0x0005, а не литерала на низа “\005”.
Криптиран поток
Потокът за шифроване е незадължителен поток, чието име ТРЯБВА да бъде “шифроване”. Този поток НЕ ТРЯБВА да присъства, освен ако не са изпълнени и двете от следните условия:
- Документът е шифрован с Office Binary Document RC4 CryptoAPI Encryption.
- Стойността на fDocProps е зададена в EncryptionHeader.Flags.
Съхранение на макроси
Хранилището за макроси е незадължително хранилище, което съдържа макросите за файла. Ако е налице, то ТРЯБВА да е основно хранилище на проекта.
Съхранение на XML подписи
Съхранението на XML подписи е незадължително хранилище, чието име ТРЯБВА да бъде “_xmlsignatures”.
Поток от подписи
Потокът от подписи е незадължителен поток, чието име ТРЯБВА да бъде “_signatures”. Този поток съдържа цифрови подписи.
Управление на правата за информация Съхранение на пространство за данни
Хранилището на пространството за данни за управление на правата на информацията е незадължително хранилище, чието име ТРЯБВА да бъде “\006DataSpaces”, където \006 е знакът със стойност 0x0006, а не литерала на низа “\006”. Ако това хранилище е налице, защитеният поток от съдържание също ТРЯБВА да присъства. Ако това хранилище е налице, всички посочени потоци и хранилища, различни от това хранилище и потока от защитено съдържание, ТРЯБВА да бъдат прочетени от потока от защитено съдържание, както е посочено в [MS-OFFCRYPTO], и ако някои от тези потоци и хранилища съществуват извън защитеното съдържание Поток, те ТРЯБВА да се игнорират.
Поток със защитено съдържание
Потокът със защитено съдържание е незадължителен поток, чието име ТРЯБВА да бъде “\009DRMContent”, където \009 е символът със стойност 0x0009, а не низовият литерал “\009”. Ако този поток е налице, ТРЯБВА да присъства и пространството за съхранение на данни за управление на правата на информация.
Препратки
See Also
- NB - Файлов формат на бележника на Mathematica
- OTS – Файлов формат за шаблон на електронна таблица OpenDocument
- XLR – Файлов формат за електронна таблица на Microsoft Works
- Какво е XLS файлов формат? Научете от експерти по файлови формати!
- Какво е файлов формат Lotus 123? Научете от експерти по файлови формати!