فایل PST چیست؟
فایلهای با پسوند pst نشاندهنده فایلهای ذخیرهسازی شخصی Outlook (که جدول ذخیرهسازی شخصی نیز نامیده میشود) هستند که اطلاعات مختلف کاربر را ذخیره میکنند. اطلاعات کاربر در پوشه هایی با انواع مختلف ذخیره می شود که شامل ایمیل ها، آیتم های تقویم، یادداشت ها، مخاطبین و چندین فرمت فایل دیگر می شود. فایلهای PST برای بایگانی دادههای ایمیل به صورت آفلاین استفاده میشوند که میتوانند بعداً بارگیری و در برنامههای مختلف مشاهده شوند.
مشخصات فرمت فایل PST
فرمت فایل PST specifications توسط مایکروسافت به عنوان مجوز حق اختراع رایگان و غیر قابل فسخ از طریق Open Specification Promise در دسترس است.
نوع فرمت های PST
فرمت های فایل PST بر اساس کدگذاری نوع فایل در دو نوع دسته بندی می شوند. فایلهای PST کدگذاری شده ANSI فرمتهای فایل قدیمیتری هستند و فقط توسط Outlook 2002 و نسخههای قبلی پشتیبانی میشوند. چنین فایلهایی حداکثر اندازه 2 گیگابایت (2^^31^^ Bytes) دارند و از Unicode پشتیبانی نمیکنند. یک نوع فرمت فایل مدرنتر، مبتنی بر رمزگذاری یونیکد، محدودیت اندازه فایل را حذف میکند و میتواند به حداکثر حجم داده 50 گیگابایت برسد.
سازماندهی منطقی فرمت فایل PST
در پایه فرمت فایل PST، B-Tree قرار دارد که داده ها را مرتب نگه می دارد و امکان جستجو، دسترسی متوالی، درج، حذف و غیره را در زمان لگاریتمی فراهم می کند. ساختار کلی یک فایل PST در سه لایه سازماندهی شده است.
لایه پایگاه داده گره (NDB) - لایه پایگاه داده گره در سطح پایین فایل PST قرار دارد و شامل پایگاه داده گره ها است. این گره ها در واقع امکانات ذخیره سازی سطح پایین تر از فرمت فایل PST را نشان می دهند. لایه NDB از هدر، اطلاعات تخصیص فایل، بلوک ها و BTrees (Node BTree و Block BTree) از نقطه نظر ذخیره سازی تشکیل شده است. گره ها و بلوک های لایه NDB از طریق Data BID که یکی از چهار ویژگی مرجع گره یعنی NID (Node ID)، Parent NID، Data BID (Block BID) و SubNode BID است، به هم متصل می شوند.
لایه لیست ها، جداول و ویژگی ها - لایه LTP درک منطقی مفاهیم سطح بالاتر را در بالای NDB فراهم می کند. علاوه بر عناصر دیگر، لایه LTP عمدتاً از زمینه ویژگی (PC) و زمینه جدول (TC) تشکیل شده است. PC مجموعه ای از ویژگی ها است، در حالی که TC یک ماتریس دو بعدی از مجموعه ویژگی ها در مقابل وجود آنها را نشان می دهد. اجرای کارآمد رایانه های شخصی و TC ها، لایه LTP از دو نوع ساختار داده زیر در بالای گره NDB استفاده می کند:
Heap On Node (HN) - تخصیص فرعی جریان داده یک گره را به قطعات کوچک و با اندازه متغیر امکان پذیر می کند.
BTree on Heap (BTH) - BTH یک راه راحت و عملی برای جستجو در رایانه های داده ارائه می دهد که در بالا توضیح داده شد، به عنوان BTH پیاده سازی می شوند و به همین دلیل است که با ساخت داخل یک ساختار HN پیاده سازی می شود.
لایه پیام - قوانین سطح بالاتر و منطق تجاری برای کار با فایل های PST در این لایه پیاده سازی شده است. خروجی منطقی این لایه به صورت اشیاء پوشه، اشیاء پیام، اشیاء پیوست و خواص است که با ترکیب لایه های LTP و NDB امکان پذیر می شود. قوانین و الزاماتی که باید در هنگام تغییر محتوای PST رعایت شود نیز در این لایه تعریف شده است.
سازماندهی فیزیکی فرمت فایل PST
سطح بالای سازماندهی فایل فایل PST مطابق شکل زیر است. این فقط یک نمای کلی از مفاهیم مختلف از عناصر منطقی فایل PST است.
اطلاعات سرصفحه PST
ساختار HEADER فایل PST در همان ابتدای فایل در فاصله 0 قرار دارد. این شامل اطلاعات فراداده در مورد فایل PST و اطلاعات ROOT برای دسترسی به ساختارهای داده لایه NDB است که در بالا توضیح داده شد. ساختار HEADER برای نسخه های Unicode و ANSI فرمت فایل PST متفاوت است.
سرصفحه با یک کلمه جادویی 4 بایتی !BDN شروع می شود که با بایت (0x21، 0x42، 0x44، 0x4E) نشان داده می شود. یک عدد جادویی 2 بایتی دیگر، SM (0x53، 0x4D)، در آفست 8 از ابتدای فایل قرار دارد. اطلاعات نسخه (ANSI یا Unicode) در فاصله 10 از شروع فایل قرار دارد. مقدار هگز (0x17) فایل PST Unicode را مشخص می کند در حالی که 0x0E یا 0x0F فرمت فایل ANSI را نشان می دهد.
فیلد | توضیحات |
---|---|
dwMagic (4 بایت) | باید { 0x21, 0x42, 0x44, 0x4E } (!BDN) باشد |
dwCRCPpartial (4 بایت) | مقدار CRC 32 بیتی 471 بایت داده که از wMagicClient شروع می شود (0ffset 0x0008) |
wMagicClient (2 بایت) | باید { 0x53, 0x4D } باشد. |
wVer (2 بایت) | نسخه فرمت فایل. اگر فایل یک فایل ANSI PST است، این مقدار باید 14 یا 15 باشد و اگر فایل یک فایل PST یونیکد باشد، باید 23 باشد. |
wVerClient (2 bytes) | Client file format version. The version that corresponds to the format described in this document is 19. سازندگان یک فایل PST جدید بر اساس این سند باید این مقدار را به 19 مقداردهی اولیه کنند. |
bPlatformCreate (1 بایت) | این مقدار باید روی 0x01 تنظیم شود. |
bPlatformAccess (1 بایت) | این مقدار باید روی 0x01 تنظیم شود. |
dwReserved (8 بایت) | |
bidUnused (8 بایت فقط یونیکد) | هنگام ایجاد فرمت فایل Unicode PST، بالشتک استفاده نشده اضافه شد. |
bidNextP (یونیکد: 8 بایت؛ ANSI: 4 بایت) | BID صفحه بعدی. صفحات دارای یک شمارنده ویژه برای تخصیص مقادیر bidIndex هستند. مقدار bidIndex برای BID برای صفحات از این شمارنده تخصیص داده می شود. |
bidNextB (4 bytes ANSI only): | Next BID. This value is the monotonic counter that indicates the BID to be assigned for the next allocated block. BID values advance in increments of 4. برای جزئیات بیشتر، بخش 2.2.2.2 را ببینید. |
dwUnique (4 بایت) | این مقدار یکنواخت افزایش می یابد که هر بار که ساختار HEADER فایل PST تغییر می کند، تغییر می کند. عملکرد این مقدار ارائه یک مقدار منحصر به فرد و اطمینان از متفاوت بودن HEADER CRC ها پس از هر تغییر هدر است. |
rgnid[](128 بایت) | آرایه ثابتی از 32 NID، که هر کدام مربوط به یکی از 32 NID_TYPE ممکن (NID_TYPE، NID_TYPE_NORMAL_FOLDER، NID_TYPE_SEARCH_FOLDER، NID_TYPE_NORMAL_MESSAGE_MESSAGE,NIDC_TYPE) |
qwUnused (8 بایت) | فضای استفاده نشده; باید روی صفر تنظیم شود. فقط فرمت فایل یونیکد PST. |
ریشه (یونیکد: 72 بایت؛ ANSI: 40 بایت) | ساختار ریشه (بخش 2.2.2.5). |
dwAlign (4 بایت) | بایت های تراز استفاده نشده. باید روی صفر تنظیم شود. فقط فرمت فایل یونیکد PST. |
rgbFM (128 بایت) | FMap منسوخ شده. این دیگر استفاده نمی شود و باید با 0xFF پر شود. خوانندگان باید ارزش این بایت ها را نادیده بگیرند. |
rgbFP (128 بایت) | FPMap منسوخ شده. این دیگر استفاده نمی شود و باید با 0xFF پر شود. خوانندگان باید ارزش این بایت ها را نادیده بگیرند. |
bSentinel (1 بایت) | باید روی 0x80 تنظیم شود. |
bCryptMethod (1 بایت) | نشان می دهد که چگونه داده های داخل فایل PST کدگذاری می شوند. باید روی یکی از مقادیر از پیش تعریف شده (NDB_CRYPT_NONE، NDB_CRYPT_PERMUTE، NDB_CRYPT_CYCLIC) تنظیم شود. |
rgbReserved (2 بایت) | رزرو شده؛ باید روی صفر تنظیم شود. |
bidNextB (8 بایت) | مقدار BID موجود بعدی را نشان می دهد. فقط فرمت فایل یونیکد PST. |
bidNextB (Unicode ONLY: 8 bytes) | Next BID. This value is the monotonic counter that indicates the BID to be assigned for the next allocated block. BID values advance in increments of 4. برای جزئیات بیشتر، بخش 2.2.2.2 را ببینید. |
dwCRCFull (4 بایت) | مقدار CRC 32 بیتی 516 بایت داده از wMagicClient تا bidNextB، شامل. فقط فرمت فایل یونیکد PST. |
ullReserved (8 بایت) | Reserved; باید روی صفر تنظیم شود. فقط فرمت فایل ANSI PST. |
dwReserved (4 بایت) | Reserved; باید روی صفر تنظیم شود. فقط فرمت فایل ANSI PST. |
rgbReserved2 (3 بایت) | |
bرزرو شده (1 بایت) | |
rgbReserved3 (32 بایت) |
حفاظت از داده ها
برای امنیت، فایلهای PST همچنین میتوانند با رمز محافظت شوند که به برنامه بارگیری نیاز دارد تا رمز عبور را قبل از مشاهده آن اعمال کند. رمز عبور اعمال شده بر روی فایل PST در فروشگاه پیام ذخیره می شود. با این حال، این محافظت قوی از داده ها را فراهم نمی کند زیرا رمز عبور را می توان با ابزارهای موجود حذف کرد. همچنین رمز عبور مشخص شده توسط کاربر به عنوان بخشی از کلید برای رمزگذاری و رمزگشایی الگوریتم های رمز استفاده نمی شود. بنابراین، هیچ مزیتی از محافظت از داده ها برای دسترسی اشخاص غیرمجاز وجود ندارد. ذخیره رمز عبور به عنوان هش CRC-32 رشته اصلی نیز آن را به روشی ضعیف برای امنیت داده ها در برابر رویکرد brute-force تبدیل می کند.