Outlook¶
Що таке файли Outlook¶
Outlook для Windows зберігає пошту, контакти, календарі й завдання у власних файлах:
- OST (
.ost): офлайн-копія поштової скриньки, яку Outlook веде для облікових записів Exchange і Microsoft 365, а починаючи з Outlook 2013 — і для облікових записів IMAP. Файли OST Outlook 2013 і новіших мають сторінки по 4 KiB і стиснені блоки. - PST (
.pst): особисте сховище: облікові записи POP3, архіви (archive.pst), експорти та сховища, які створюють користувачі. ANSI PST — це файли Outlook від 97 до 2002; Unicode PST — файли Outlook 2003 і новіших. - MSG (
.msg): один елемент, збережений як файл, коли його перетягують з Outlook, зберігають командою Зберегти як або експортує інша програма. Вкладені повідомлення — теж файли MSG. - OFT (
.oft): шаблон Outlook — файл MSG, з якого створюються нові елементи.
Кожне сховище містить папки, а кожна папка — свої елементи: електронні листи, запрошення на наради та
відповіді на них, контакти й списки розсилки, елементи календаря, завдання, нотатки, записи щоденника
та звіти. Кожна папка також зберігає приховані елементи — пов'язану з папкою інформацію (FAI):
подання, правила, форми та налаштування Outlook (елементи IPM.Configuration.*, як-от список
автозаповнення поштової скриньки Exchange). Вкладеннями елемента можуть бути файли, посилання на
файли, об'єкти OLE або інші елементи (повідомлення, переслане як вкладення, винятки повторюваної
зустрічі), які мають власні вкладення.
Найобґрунтованіший висновок: на момент збирання сховище або файл містили елемент із цими відправниками, одержувачами, часом і вкладеннями. Це не свідчить, що користувач його прочитав, написав чи надіслав, і не свідчить, що відправник — саме той, ким його називає елемент.
Розташування та збирання¶
%LOCALAPPDATA%\Microsoft\Outlook\*.ost
%USERPROFILE%\Documents\Outlook Files\*.pst (Outlook 2010 and later)
%LOCALAPPDATA%\Microsoft\Outlook\*.pst (Outlook 2007 and earlier)
%APPDATA%\Microsoft\Templates\*.oft
*.msg wherever users and programs save them: Desktop, Documents, Downloads, …
Файли PST можуть бути будь-де: користувачі переносять архіви в інші папки, на інші диски та у
спільні файлові ресурси. Outlook зберігає шляхи до сховищ кожного профілю в реєстрі користувача.
Вкладення, які користувач відкривав з Outlook, копіюються в папку всередині
%LOCALAPPDATA%\Microsoft\Windows\INetCache\Content.Outlook\ (до Windows 8.1 —
Temporary Internet Files\Content.Outlook), де вони можуть залишатися.
Outlook тримає свої сховища відкритими, поки працює, а файл OST може займати десятки гігабайтів. Збирайте їх із закритим Outlook або з образу диска чи тіньової копії тому. Juntei читає кожне сховище як потік і ніколи не тримає все сховище в пам'яті.
Застереження для аналітика¶
- Juntei читає поблажливо: оминає пошкоджене, читає те, що можна прочитати, а решту повідомляє як
проблеми. Їх виводять на екран (перші 10 для кожного файлу), підраховують у підсумку й у таблиці
Файли та перелічують у полі
Problemsелементів і вкладень, яких вони стосуються. Елемент, який не вдається прочитати зовсім, однаково має рядок у таблиці Елементи — зі своїмItemIDі причиною. - Час подано в UTC, з точністю до 100 наносекунд.
SubmitTime— коли клієнт відправника передав повідомлення на надсилання, за годинником того комп'ютера;DeliveryTime— коли воно надійшло до цієї поштової скриньки.CreationTime— коли створено цю копію елемента: доставлено до поштової скриньки або створено в ній, синхронізовано в OST, скопійовано чи імпортовано в PST або збережено як файл MSG. Це не час написання повідомлення.LastModifiedTime— коли елемент востаннє змінено в сховищі. StartTimeіDueTimeзавдання — це дати в часовому поясі користувача, які Outlook зберігає як північ. Juntei записує їх без зміщення (2017-02-19T00:00:00), і-Zзалишає їх без змін.- Для Немає (None) в деяких датах, як-от у терміні виконання завдання чи часі нагадування, Outlook
записує північ 1 січня 4501 року. Juntei записує це значення так, як його збережено:
4501-01-01T00:00:00Z, а вStartTimeіDueTimeзавдання — безZ. Read— це прапорець прочитання на момент збирання сховища: хтось або якесь правило позначили елемент як прочитаний. Він не каже ні хто, ні коли.- Імена та адреси відправника й одержувача — це те, що записали програма-відправник і поштові
сервери, і їх можна підробити. Адреси
EX— це розрізнювальні імена Exchange (distinguished names) (/o=…/ou=…/cn=Recipients/cn=…); SMTP-адреса міститься вSenderSMTP-AddressіSMTP-Address, коли елемент зберігає її додатково. Щоб перевірити, звідки надійшло повідомлення, читайте його інтернет-заголовки:0x007D001Fабо0x007D001E(PidTagTransportMessageHeaders) у таблиці Властивості. - Елементи, видалені в Outlook, лежать у папці Видалені (Deleted Items), доки її не очистять, і читаються як будь-які інші. Елементи, яких уже немає в таблиці жодної папки і які сховище може зберігати, доки не використає їхнє місце повторно, поки що не читаються.
ItemID— це ідентифікатор вузла (node id) повідомлення в його PST або OST: той самий елемент в іншій копії сховища може мати інший. Ідентифікатор вбудованого елемента складається з ідентифікатора батьківського елемента та індексу вкладення (2097348/0,0/0/1); елемент файлу.msgабо.oftмає ідентифікатор0.Userбереться лише зі шляху (папка післяUsers) і втрачається, коли файл копіюють в інше місце. PST може належати будь-якому користувачеві.- Текст не в Unicode читається в кодовій сторінці елемента (його власній, кодовій сторінці його
локалі або його інтернет-кодовій сторінці).
--code-pageзадає кодову сторінку для елементів, які її не вказують: кодову сторінку ANSI системи, що їх записала,932для японської системи. - Пароль PST не шифрує файл: Juntei читає PST, захищені паролем, як і будь-які інші.
Encryptionсховища (Permute, «стискуване шифрування» Outlook (compressible encryption), абоCyclic) лише маскує його блоки. Повідомлення, зашифровані за допомогою S/MIME, зберігають свій текст і вкладення в зашифрованому вкладенні (smime.p7m), яке не розшифровується. - Вкладення часто бувають шкідливим програмним забезпеченням.
--extract-attachmentsзаписує їхні дані у файли, названі за їхнім SHA-256, з режимом0600для нових файлів у Unix; ніколи не запускайте їх і тримайте їх в ізольованій системі для аналізу.
Що поки не читається¶
Офлайнові адресні книги (OAB), потік автозаповнення (Stream_Autocomplete_*.dat) і файли .nk2,
налаштування надсилання й отримання (.srs), кеші налаштувань Outlook (RoamCache, Autodiscover), бази
даних SQLite Outlook, а також повідомлення, яких уже немає в таблиці жодної папки.
Аналіз за допомогою Juntei¶
Usage: juntei parse-file outlook <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find *.pst, *.ost, *.msg and *.oft
-f, --file <FILE> Parse one PST, OST, MSG or OFT file, whatever its name
--code-page <CP> Code page of items that don't give theirs (default 1252)
Output:
-o, --output <PATH> Directory of CSV tables, or JSON/JSONL file
-t, --output-type <TYPE> csv, json, or jsonl
--properties Add the Properties table: every property as stored
--extract-attachments <DIR> Write each attachment's data once, named by its SHA-256
-C, --clobber Overwrite files when saving or extracting
juntei parse-file outlook -d Users -o outlook-csv
juntei parse-file outlook -f mailbox.ost -t jsonl \
| jq 'select(.Table == "Items" and .Hidden == false) | {DeliveryTime, SenderAddress, Subject}'
juntei parse-file outlook -f suspicious.msg -o msg-csv --properties --extract-attachments isolated/
-d шукає файли, назви яких закінчуються на .pst, .ost, .msg і .oft, без урахування регістру.
Хоч би як було задано файл, що це за файл, визначають його перші байти: !BDN для PST або OST,
сигнатура складеного файлу для MSG або OFT. Про будь-що інше повідомляється як про файл, який не
вдалося розібрати. Код завершення дорівнює 1, коли не вдалося прочитати жодного файлу.
--extract-attachments записує дані кожного вкладення один раз, як <SHA-256> з розширенням
вкладення, якщо воно складається з 1–10 літер і цифр ASCII (0c7d…1311.jpg); жодне ім'я з
елемента не використовується у шляху. Каталог має бути порожнім, якщо не задано -C; з -C файл з
тим самим ім'ям, що містить щось інше, замінюється.
Таблиці виводу¶
CSV створює вісім файлів, а з --properties — дев'ять; файл без рядків містить лише заголовок. Рядки
JSON і JSONL містять Table (Files, Folders, Items, Recipients, Attachments, Contacts,
Calendar, Tasks або Properties) після SourceFile. Рядки елемента йдуть після нього, а рядки
його вбудованих елементів — після них; рядок файлу в таблиці Файли йде після решти його рядків.
| Файл CSV | Вміст |
|---|---|
Outlook-Files.csv |
Один рядок на кожен прочитаний файл: сховище або файл і те, що він містить. |
Outlook-Folders.csv |
Папки файлів PST і OST. |
Outlook-Items.csv |
Усі елементи: повідомлення папок, їхні приховані елементи, елементи файлів .msg і .oft та елементи, вбудовані в їхні вкладення. |
Outlook-Recipients.csv |
Одержувачі елементів. |
Outlook-Attachments.csv |
Вкладення елементів. |
Outlook-Contacts.csv |
Поля контактів і списків розсилки. |
Outlook-Calendar.csv |
Поля елементів календаря та повідомлень про наради. |
Outlook-Tasks.csv |
Поля завдань і запитів на завдання. |
Outlook-Properties.csv |
З --properties: усі властивості сховищ, папок, елементів, одержувачів і вкладень у збереженому вигляді. |
Поля¶
Кожна таблиця починається з таких полів:
| Поле | Інтерпретація |
|---|---|
SourceFile |
Файл, з якого прочитано рядок. |
User |
Користувач Windows, у профілі якого лежить шлях (папка після Users). |
Файли (Files)¶
| Поле | Інтерпретація |
|---|---|
FileType |
PST, OST, MSG, OFT або CFB для складеного файлу, прочитаного як елемент, ідентифікатор класу (class ID) якого не належить ні повідомленню, ні шаблону (багато програм, крім Outlook, залишають його порожнім). |
Format |
Структура сховища: ANSI (Outlook від 97 до 2002), Unicode (Outlook 2003 і новіші) або Unicode 4K (файли OST Outlook 2013 і новіших); для файлу MSG або OFT — версія складеного файлу (CFB v3, CFB v4). |
Version, ClientVersion |
wVer і wVerClient із заголовка сховища. |
Encryption |
Як закодовано блоки сховища: None, Permute або Cyclic. |
DisplayName |
Назва сховища (Personal Folders, адреса електронної пошти). |
RecordKey |
Ідентичність сховища (у шістнадцятковому вигляді), яку містять ідентифікатори записів (entry ids) його елементів. |
Folders |
Папки сховища. |
Items |
Повідомлення його папок або 1 для файлу MSG чи OFT. |
HiddenItems |
Приховані елементи (пов'язана з папками інформація) його папок. |
EmbeddedItems |
Елементи, вбудовані у вкладення, на всіх рівнях. |
Attachments |
Вкладення всіх цих елементів. |
Problems |
Проблеми, виявлені у файлі. |
Папки (Folders)¶
| Поле | Інтерпретація |
|---|---|
FolderID, ParentID |
Ідентифікатор вузла папки та ідентифікатор її батьківської папки (порожній для кореневої папки). |
FolderPath |
Назви папок від кореня вниз: /Top of Personal Folders/Inbox, /Root - Mailbox/IPM_SUBTREE/Sent Items. |
Name |
Назва папки. |
ContainerClass |
Що містить папка: IPF.Note (пошта), IPF.Appointment, IPF.Contact, IPF.Task, IPF.Imap, …. |
ContentCount, UnreadCount |
Повідомлення та непрочитані повідомлення, які, за словами папки, вона має. |
Messages, HiddenItems, Subfolders |
Рядки її таблиці вмісту, таблиці пов'язаного вмісту та таблиці ієрархії — те, що читає Juntei. Розбіжність із ContentCount варто перевірити. |
CreationTime, LastModifiedTime |
Коли папку створено і востаннє змінено (UTC), якщо сховище це зберігає. |
Problem |
Чому папку не вдалося відкрити; її підпапки тоді не читаються. |
Елементи (Items)¶
| Поле | Інтерпретація |
|---|---|
FolderPath |
Папка елемента; порожнє у файлі MSG або OFT. |
ItemID |
Ідентифікатор елемента: його ідентифікатор вузла в PST або OST, 0 у файлі MSG або OFT, ідентифікатор батьківського елемента та індекс вкладення для вбудованого елемента (2097348/0). |
Hidden |
Чи є елемент пов'язаною з папкою інформацією, тобто прихованим елементом. |
EmbeddedIn |
Ідентифікатор елемента, до якого його вкладено; порожнє для інших. |
ItemType |
Чим є елемент згідно з класом повідомлення: Mail, MeetingMessage, Appointment, Contact, DistributionList, Task, TaskRequest, StickyNote, Journal, Post, Report, Configuration або Other. |
MessageClass |
Клас повідомлення в збереженому вигляді (IPM.Note, IPM.Note.SMIME, IPM.Schedule.Meeting.Request, REPORT.IPM.Note.NDR, …). |
SubmitTime |
Коли клієнт відправника передав повідомлення на надсилання (UTC, за годинником відправника). |
DeliveryTime |
Коли його доставлено до цієї поштової скриньки (UTC). |
CreationTime, LastModifiedTime |
Коли цю копію створено в сховищі або файлі і коли її востаннє змінено (UTC). |
Subject |
Тема з її префіксом (RE:). |
SenderName, SenderAddressType, SenderAddress |
Хто його надіслав: ім'я, тип адреси (SMTP, EX) і адреса цього типу. |
SenderSMTP-Address |
SMTP-адреса відправника, якщо її збережено додатково до адреси іншого типу. |
SentRepresentingName, SentRepresentingAddress |
Від чийого імені його надіслано (делегат надсилає від імені керівника; спільна поштова скринька), з SMTP-адресою, якщо її збережено, інакше з адресою відповідного типу. |
To, Cc, Bcc |
Імена одержувачів так, як їх показує елемент (їхні адреси див. у таблиці Одержувачі). Bcc є лише в копії відправника. |
InternetMessageID, InReplyTo |
Message-ID повідомлення та ідентифікатор повідомлення, на яке воно відповідає. |
ConversationTopic |
Тема без префікса, спільна для повідомлень однієї розмови. |
Importance, Sensitivity |
Low, Normal або High; Normal, Personal, Private або Confidential. |
Read |
Чи позначено елемент як прочитаний. |
Flags |
Прапорці повідомлення (PidTagMessageFlags, у шістнадцятковому вигляді): 0x1 прочитано, 0x2 не змінено, 0x4 передано на надсилання, 0x8 не надіслано (чернетка), 0x10 має вкладення, 0x20 від мене, 0x40 приховано, 0x80 надіслано повторно, 0x400 колись прочитано, 0x2000 з інтернету. |
Size |
Розмір елемента в сховищі разом із вкладеннями. |
Recipients, Attachments |
Скільки в нього одержувачів і вкладень. |
Categories |
Його категорії, розділені ;. |
BodyPreview |
Початок його текстового вмісту в простому тексті зі згорнутими пробілами, не більше ніж 256 символів; порожнє, якщо вміст є лише в HTML або RTF. |
Problems |
Що не вдалося прочитати в елементі (не більше 10, а далі — скільки ще). |
Одержувачі (Recipients)¶
| Поле | Інтерпретація |
|---|---|
ItemID |
Ідентифікатор елемента. |
Index |
Рядок одержувача в таблиці одержувачів елемента, починаючи з 0. |
RecipientType |
To, Cc, Bcc, Originator або значення в збереженому вигляді (у шістнадцятковому вигляді). |
Name, AddressType, Address |
Ім'я, тип адреси та адреса одержувача. |
SMTP-Address |
SMTP-адреса, якщо її збережено додатково до адреси іншого типу. |
Вкладення (Attachments)¶
| Поле | Інтерпретація |
|---|---|
ItemID, Index |
Ідентифікатор елемента та рядок вкладення в його таблиці вкладень, починаючи з 0. |
Method |
ByValue (файл), ByReference, ByReferenceResolve, ByReferenceOnly (шлях до файлу), EmbeddedMessage (елемент), OLE (об'єкт OLE), ByWebReference або число. |
Filename |
Ім'я вкладення: його довге ім'я файлу, коротке ім'я або відображуване ім'я. |
Extension |
Його розширення в збереженому вигляді (.pdf), інакше розширення з його імені. |
MimeType, ContentID |
Його тип MIME та ідентифікатор вмісту, за яким на нього посилається вміст HTML. |
Inline |
Чи показує його вміст листа (зображення у вмісті HTML), а не перелічує серед вкладень. |
Hidden |
Чи приховує його Outlook зі списку вкладень. |
Size |
Його розмір, як його подає сховище, разом із його властивостями. |
DataSize, SHA256 |
Розмір і SHA-256 його даних: файлу або складеного файлу об'єкта OLE в PST чи OST. Порожні для вбудованого елемента та вкладення за посиланням. |
Pathname |
Шлях вкладення за посиланням. |
CreationTime, LastModifiedTime |
Час вкладення (UTC): часто це час файлу, з якого його створено. |
EmbeddedSubject |
Тема вбудованого елемента, власні рядки якого мають ItemID <ItemID>/<Index>. |
ExtractedFile |
З --extract-attachments — файл у цьому каталозі, до якого записано його дані. |
Problems |
Що не вдалося прочитати у вкладенні або записати. |
Контакти (Contacts)¶
| Поле | Інтерпретація |
|---|---|
FolderPath, ItemID, ItemType |
Як у таблиці Елементи: Contact або DistributionList. |
DisplayName, GivenName, Surname, Nickname |
Імена контакту. |
FileUnder |
Ім'я, під яким зберігається контакт. |
Company, Title, Department |
Де працює контакт. |
Email1Name, Email1Address, Email2Name, Email2Address, Email3Name, Email3Address |
Три адреси електронної пошти контакту, кожна з відображуваним ім'ям. |
BusinessPhone, HomePhone, MobilePhone |
Номери телефонів контакту. |
InstantMessaging |
Адреса контакту для обміну миттєвими повідомленнями. |
CreationTime, LastModifiedTime |
Як у таблиці Елементи. |
Календар (Calendar)¶
| Поле | Інтерпретація |
|---|---|
FolderPath, ItemID, ItemType, Subject |
Як у таблиці Елементи: Appointment або MeetingMessage. |
StartTime, EndTime |
Коли зустріч починається і закінчується (UTC); для повторюваної — час першого повторення. |
DurationMinutes |
Її тривалість у хвилинах. |
Location |
Де вона відбувається. |
AllDay, Recurring |
Чи це подія на весь день і чи вона повторюється (її винятки — вбудовані елементи). |
BusyStatus |
Free, Tentative, Busy, OutOfOffice або WorkingElsewhere. |
ResponseStatus |
Відповідь користувача: None, Organized, Tentative, Accepted, Declined або NotResponded. |
Organizer |
Ім'я відправника елемента. |
AllAttendees, ToAttendees, CcAttendees |
Учасники так, як їх перелічує елемент. |
GlobalObjectID |
Ідентичність наради в різних поштових скриньках (у шістнадцятковому вигляді): та сама нарада в календарях організатора й учасників. |
ReminderSet, ReminderTime |
Чи встановлено нагадування і на який час (UTC). |
CreationTime, LastModifiedTime |
Як у таблиці Елементи. |
Завдання (Tasks)¶
| Поле | Інтерпретація |
|---|---|
FolderPath, ItemID, ItemType, Subject |
Як у таблиці Елементи: Task або TaskRequest. |
Status |
NotStarted, InProgress, Complete, Waiting або Deferred. |
PercentComplete |
Яку частину виконано, від 0 до 100. |
StartTime, DueTime |
Коли завдання починається і коли його термін виконання: дати в часовому поясі користувача, без зміщення. |
CompletedTime |
Коли його виконано (UTC). |
Complete |
Чи його виконано. |
Owner, Assigner |
Хто є його власником і хто його призначив. |
ReminderSet, ReminderTime |
Як у таблиці Календар. |
CreationTime, LastModifiedTime |
Як у таблиці Елементи. |
Властивості (Properties)¶
| Поле | Інтерпретація |
|---|---|
ItemID |
Ідентифікатор елемента; store для власних властивостей сховища; folder:<FolderID> для властивостей папки. |
Scope |
Чия це властивість: Store, Folder, Item, Recipient або Attachment. |
Index |
Індекс одержувача або вкладення; порожнє для інших. |
PropertyTag |
Ідентифікатор і тип властивості у вигляді 0x0037001F (PidTagSubject, рядок). |
PropertyName |
Для іменованої властивості (ідентифікатори від 0x8000) — її набір властивостей та ім'я: PSETID_Address:0x8083, PS_PUBLIC_STRINGS:Keywords або GUID набору, якщо це не загальновідомий набір. |
Type |
Тип властивості: PtypString, PtypInteger32, PtypTime, PtypBinary, PtypMultipleString, …. |
Value |
Значення: текст для рядків, ISO 8601 UTC для часу (який -Z не перетворює), шістнадцятковий вигляд для двійкових значень (перші 4 096 байтів, далі …(N bytes)), значення багатозначної властивості як список (у CSV розділені ,), (object) для вбудованого елемента або даних вкладення, для значення типу, який не декодується, — байти в шістнадцятковому вигляді з приміткою, а для пошкодженого значення — те, що вдалося з нього відновити, а за ним примітка з його байтами в шістнадцятковому вигляді (лише байти й примітка, якщо нічого не вдалося відновити). |
Автоматичний аналіз¶
auto-parse записує таблиці до нової категорії Communication як Outlook-Files.csv,
Outlook-Folders.csv, Outlook-Items.csv, Outlook-Recipients.csv, Outlook-Attachments.csv,
Outlook-Contacts.csv, Outlook-Calendar.csv і Outlook-Tasks.csv (один файл Outlook.json або
Outlook.jsonl з -t json чи -t jsonl) разом із Communication/Outlook-logs.txt. Він передає
аналізатору свій --code-page і не додає таблицю Властивості та не видобуває вкладення: для цього
запускайте parse-file outlook. Об'єднана хронологія -j містить кожен рядок, із Comp та
ідентифікатором Artifact outlook. -Z перетворює кожне поле, назва якого закінчується на Time,
крім StartTime і DueTime завдання.
Додаткові відомості¶
- Microsoft — [MS-PST]: Outlook Personal Folders (.pst) File Format
- Microsoft — [MS-OXMSG]: Outlook Item (.msg) File Format
- Microsoft — [MS-OXCMSG]: Message and Attachment Object Protocol
- Microsoft — [MS-OXPROPS]: Exchange Server Protocols Master Property List
- libpff — Personal Folder File (PFF) format
- ys-outlook-parser