فایل DOC چیست؟
فایلهای با پسوند doc اسنادی را نشان میدهند که توسط Microsoft Word یا سایر اسناد پردازش کلمه در قالب فایل باینری تولید شدهاند. این پسوند در ابتدا برای اسناد متنی ساده در چندین سیستم عامل مختلف استفاده شد. این می تواند شامل چندین نوع داده مختلف مانند تصاویر، قالب بندی شده و همچنین متن ساده، نمودارها، نمودارها، اشیاء جاسازی شده، پیوندها، صفحات، قالب بندی صفحه، تنظیمات چاپ و بسیاری موارد دیگر باشد. این قالب به دلیل گزینههای متنوعی که برای نوشتن راهنماها، پروپوزالها، مشخصات، رزومهها، مقالات یا هر سند مشابهی به کاربران ارائه میدهد، برای انواع اسناد محبوب بود. نسخه به روز شده DOC DOCX است که بر اساس Office OpenXML است که مشخصات آن آشکارا در دسترس است.
تاریخچه مختصر
WordPerfect, a product of Corel, used DOC as the extension of their proprietary format. In 1980s, WordPerfect remained the choice of usage on most of the computers due to its easy availability, conformance with most computer machines and Operating systems. However, WordPerfect saw its downfall on Windows OS when Microsoft introduced Microsoft Word as its product for documents file format and chose DOC extension for their proprietary format. As Microsoft Word became more and more popular, the DOC file format underwent several revisions from Microsoft Word 97 - 2003. در سال 2007 بود که فرمت فایل DOC پیش فرض با فرمت Office Open XML (معروف به DOCX) جایگزین شد و نسخه های جدید Microsoft Word اکنون از این پسوند جدید به عنوان فرمت فایل پیش فرض استفاده می کنند.
مشخصات فرمت فایل DOC - اطلاعات بیشتر
Microsoft didn’t release the DOC file format specifications for a long time until 2008. In Feb 2008, format specifications were released for .doc file format under the Microsoft Open Specification Promise. Though the specification does not describe all of the features used by the DOC format, it gives ample information about the knowledge required to work with this file format. Still, reverse engineering is required to make use of the available information. The specifications have been updated several times and the latest revision is 8.0 which was updated as of August 2018.
برخی از مفاهیم اساسی
قبل از اینکه به جزئیات در مورد مشخصات فرمت فایل برای DOC بپردازیم، برای کار با این فرمت فایل باید مفاهیم اساسی را درک کنیم.
پایه اطلاعات فایل (Fib): ساختار Fib حاوی اطلاعاتی در مورد سند است و نشانگرهای فایل را به بخش های مختلف تشکیل دهنده سند مشخص می کند. فیب یک ساختار با طول متغیر است. به استثنای قسمت پایه که اندازه آن ثابت است، قبل از هر بخش یک فیلد شمارش وجود دارد که اندازه بخش بعدی را مشخص می کند.
موقعیت کاراکتر: CP یا Character Position یک عدد صحیح 32 بیتی بدون علامت را نشان می دهد که به عنوان شاخص مبتنی بر صفر یک کاراکتر در متن سند عمل می کند. مکان و اندازه هر کاراکتر در فایل را نمی توان مستقیماً بازیابی کرد و باید با استفاده از الگوریتم از پیش تعیین شده محاسبه شود. شخصیت ها عبارتند از:
متن سند
لنگر اشیاء مانند پاورقی یا جعبه متن
کنترل کاراکترها مانند علائم پاراگراف و علائم سلول جدول
PLC: ساختار PLC آرایه ای از CP ها است که با آرایه ای از عناصر داده دنبال می شود. عناصر داده برای هر PLC باید به اندازه صفر یا بیشتر بایت باشند و به همین دلیل تعداد CP ها باید یک عدد بیشتر از تعداد عناصر داده باشد. ساختارهای PLC انواع مختلفی دارند که هر نوع مشخص می کند که آیا CP های تکراری برای آن نوع مجاز هستند یا خیر. یک ساختار PLC شامل موارد زیر است:
aCP (طول متغیر): آرایه ای از عناصر CP. هر نوع ساختار PLC معنای عناصر CP و محدوده مجاز را مشخص می کند.
aData (طول متغیر): هر نوع ساختار PLC ساختار و معنای عناصر داده، هرگونه محدودیت در تعداد عناصر داده و هرگونه محدودیت در داده های موجود در آن را مشخص می کند. همچنین رابطه بین عناصر داده و CPهای مربوطه را مشخص می کند.
انتخاب معتبر: ساختارهای فایل .DOC عمدتاً توسط طیفی از CPها توصیف می شوند. تعدادی از rules توسط مایکروسافت مشخص شده است که در چنین مواردی باید دنبال شوند.
STTB: STTB یک جدول رشته ای است که از یک هدر تشکیل شده است که با آرایه ای از عناصر دنبال می شود. مقدار cData تعداد عناصر موجود در آرایه را مشخص می کند.
ذخیره ویژگی: یک فایل word ممکن است دارای عناصر مختلفی مانند متن، پاراگراف ها، جداول، تصاویر و بخش هایی باشد که هر کدام می توانند ویژگی های خاص خود را داشته باشند. ویژگی های اینها در فایل Word به عنوان تفاوت با پیش فرض ذخیره می شود. چنین تفاوت هایی توسط PRl مشخص می شود که از یک اصلاح کننده خصوصیت واحد (Sprm) و عملوند آن تشکیل شده است. یک برنامه کاربردی می تواند مجموعه نهایی ویژگی ها را با استفاده از لیست های Prls تعیین کند.
محافظت با رمز عبور: فایل های Word را می توان با رمز عبور نیز محافظت کرد که یکی از مکانیسم های زیر را می توان برای آن استفاده کرد.
تیرگی XOR
رمزگذاری سند باینری RC4
رمزگذاری سند باینری آفیس RC4 CryptoAPI
اگر FibBase.fEncrypted و FibBase.fObfuscation هر دو 1 باشند، فایل با استفاده از مبهم سازی XOR مبهم می شود.
اگر FibBase.fEncrypted 1 و FibBase.fObfuscation 0 باشد، فایل با استفاده از رمزگذاری سند باینری RC4 یا Office باینری سند RC4 CryptoAPI رمزگذاری میشود و EncryptionHeader در اولین جریان FibBase.lKey بایتهای TKey ذخیره میشود. EncryptionHeader.EncryptionVersionInfo مشخص می کند که کدام مکانیسم رمزگذاری برای رمزگذاری فایل استفاده شده است.
ساختار فایل
یک فایل Word باینری در اصل خود یک فایل ترکیبی OLE است که از چندین ذخیره سازی و جریان تشکیل شده است. این انبارها و جریان ها ساختار و اندازه های خاص خود را دارند که پارامترهای نوشتن و خواندن را مشخص می کند. اینها هستند:
جریان WordDocument
This stream contains the document text and other information referenced from other parts of the file. The stream has no predefined structure other than the FIB at the beginning which is mandatory and should be at offset 0. این جریان نباید بیشتر از 2147 مگابایت باشد.
1TableStream یا 0TableStream
یک فایل Word باینری می تواند شامل جریان های جدولی باشد که به عنوان جریان 1Table یا جریان 0Table شناخته می شوند. حداقل یکی از اینها باید در سند موجود باشد. با این حال، اگر یک سند شامل هر دو جریان 1Table و 0Table باشد، فقط جریانی که توسط base.fWhichTblStm ارجاع داده شده است استفاده می شود. جریان بدون مرجع باید نادیده گرفته شود. Table Stream نباید بیشتر از 2147 مگابایت باشد.
جریان داده ها
جریان داده هیچ ساختار از پیش تعریف شده ای ندارد. این شامل دادههایی است که از FIB یا سایر بخشهای فایل به آنها ارجاع داده میشود. اگر هیچ ارجاعی به آن وجود نداشته باشد، نیازی به وجود این جریان نیست. جریان داده نباید بیشتر از 2147 مگابایت باشد.
ذخیره سازی استخر اشیا
ذخیرهسازی Object Pool حاوی حافظههایی برای اشیاء OLE تعبیهشده است. اگر هیچ شیء OLE تعبیهشده در سند وجود نداشته باشد، نیازی به وجود این فضای ذخیرهسازی نیست.
ذخیره سازی داده های XML سفارشی
ذخیره سازی داده های XML سفارشی یک ذخیره سازی اختیاری است که نام آن باید MsoDataStore باشد.
جریان اطلاعات خلاصه
جریان اطلاعات خلاصه یک جریان اختیاری است که نام آن باید \005SummaryInformation باشد، که در آن \005 کاراکتری با مقدار 0x0005 است و نه رشته تحت اللفظی \005.
جریان اطلاعات خلاصه سند
جریان اطلاعات خلاصه سند یک جریان اختیاری است که نام آن باید \005DocumentSummaryInformation باشد، که در آن \005 کاراکتری با مقدار 0x0005 است، نه رشته تحت اللفظی \005.
جریان رمزگذاری
جریان رمزگذاری یک جریان اختیاری است که نام آن باید رمزگذاری باشد. این جریان نباید وجود داشته باشد مگر اینکه هر دو شرایط زیر وجود داشته باشد:
سند با Office Binary Document RC4 CryptoAPI Encryption رمزگذاری شده است.
مقدار fDocProps در EncryptionHeader.Flags تنظیم شده است.
ذخیره سازی ماکروها
ذخیره سازی ماکرو یک ذخیره سازی اختیاری است که حاوی ماکروهای فایل است. در صورت وجود، باید یک Project Root Storage باشد.
ذخیرهسازی امضاهای XML
ذخیرهسازی امضاهای XML یک ذخیرهسازی اختیاری است که نام آن باید _xmlsignatures باشد.
جریان امضاها
جریان امضاها یک جریان اختیاری است که نام آن باید _signatures باشد. این جریان حاوی امضای دیجیتال است.
مدیریت حقوق اطلاعات ذخیره سازی فضای داده
فضای ذخیرهسازی اطلاعات مدیریت حقوق اطلاعات یک ذخیرهسازی اختیاری است که نام آن باید \006DataSpaces باشد، که در آن \006 نویسه با مقدار 0x0006 است و نه رشته تحت اللفظی \006. اگر این فضای ذخیرهسازی وجود داشته باشد، جریان محتوای محافظتشده نیز باید وجود داشته باشد. اگر این فضای ذخیرهسازی وجود داشته باشد، همه جریانها و ذخیرهسازیهای مشخص شده به غیر از این فضای ذخیرهسازی و جریان محتوای محافظتشده باید از جریان محتوای محافظتشده همانطور که در [MS-OFFCRYPTO] مشخص شده است خوانده شوند و اگر هر یک از این جریانها و ذخیرهسازیها خارج از محتوای محافظتشده وجود داشته باشد. جریان، آنها را باید نادیده گرفت.
جریان محتوای محافظت شده
جریان محتوای محافظت شده یک جریان اختیاری است که نام آن باید \009DRMCcontent باشد، که در آن \009 نویسه با مقدار 0x0009 است و نه رشته تحت اللفظی \009. اگر این جریان وجود داشته باشد، ذخیرهسازی فضای داده مدیریت حقوق اطلاعات نیز باید وجود داشته باشد.