مربعات حوار الفتح والحفظ باسم (OpenSaveMRU)¶
ما هو سجل مربعات الحوار¶
عندما يعرض برنامج مربع الحوار الشائع "فتح" أو "حفظ باسم"، يسجّل Windows في
NTUSER.DAT الخاص بالمستخدم:
- الملف الذي فُتح أو حُفظ: يحتوي
OpenSavePidlMRUعلى مفتاح فرعي لكل امتداد (docx،ps1، …) و*لكل الامتدادات، وكل منها قائمة للعناصر المستخدمة مؤخرًا (MRU)؛ - البرنامج الذي استخدم مربع الحوار، والمجلد الذي كان فيه:
LastVisitedPidlMRU(وLastVisitedPidlMRULegacyللبرامج التي تستخدم مربعات الحوار الأقدم)؛ - البرامج التي عرضت مربع الحوار:
CIDSizeMRU(حجم مربع الحوار لكل برنامج)، وFirstFolder(مسار البرنامج ومجلد)؛ - على Windows 2000 وXP،
OpenSaveMRU(مسارات لكل امتداد) وLastVisitedMRU(البرامج و مجلداتها على هيئة مسارات).
منذ Windows Vista، تكون الملفات والمجلدات قوائم عناصر shell، وهي البنى نفسها المستخدمة في هدف الاختصار: كل عنصر جزء من المسار (This PC، أو محرك أقراص، أو مجلد، أو الملف)، و يمكن لعنصر الملف أو المجلد أن يحمل أوقاته الخاصة ومرجع ملف NTFS.
أفضل استنتاج: استخدم برنامجٌ مربع حوار "فتح" أو "حفظ باسم" لفتح هذا الملف أو حفظه، أو في هذا المجلد، ضمن جلسة هذا المستخدم. ولا يُؤرَّخ إلا الإدخال الأحدث في كل قائمة: وقت آخر كتابة لمفتاحه.
الموقع¶
C:\Users\<user>\NTUSER.DAT
Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\
OpenSavePidlMRU\<extension> shell item lists, MRUListEx order (Vista and later)
OpenSavePidlMRU\* every extension
LastVisitedPidlMRU program name, then a shell item list
LastVisitedPidlMRULegacy the same
CIDSizeMRU program name
FirstFolder program path, then a folder path
OpenSaveMRU\<extension> paths, MRUList order (2000 and XP)
LastVisitedMRU program name, then a folder path (2000 and XP)
اجمع NTUSER.DAT مع سجلات المعاملات الخاصة به لكل ملف تعريف.
تحذيرات للمحلل¶
- وقت واحد لكل قائمة. يتغير وقت آخر كتابة للمفتاح عندما ينتقل أحد إدخالاته إلى
مقدمة قائمته، لذا فهو يؤرّخ الإدخال في الموضع 0 فقط (
IsMostRecent،LastUsedUTC). أما الإدخالات الأخرى فمرتبة، من الأحدث إلى الأقدم نزولًا في القائمة، لكنها غير مؤرّخة. - الملف نفسه في قائمتين. يوجد الملف في قائمة امتداده وفي
*؛ فلا تحسبه استخدامين. ويعطي*الترتيب عبر الامتدادات. - فُتح أم حُفظ. لا توضح القوائم أيهما. اربط ذلك بسجلات
$MFTودفتر يومية USN الخاصة بالملف، وملفات LNK وJump Lists. - أوقات العناصر هي أوقات الملف، لا مربع الحوار.
ItemModifiedUTCوItemCreatedUTCوItemAccessedUTCهي أوقات الملف عند كتابة العنصر، بدقة ثانيتين (FAT). وكثيرًا ما لا تحتوي عناصر المجلدات المعروفة (CLSID_ThisPCDocumentsRegFolder،Downloads، …) على أي منها. ولا تتضمن هذه الطوابع الزمنية بصيغة FAT إزاحة للمنطقة الزمنية. واللاحقةUTCفي اسم العمود اصطلاح عرض، لا دليل على أن الساعة الأصلية كانت بتوقيت UTC؛ فاربطها بالمنطقة الزمنية للنظام المصدر و الطوابع الزمنية الأخرى قبل مقارنتها بقيم FILETIME في سجل Windows. راجع إرشادات Microsoft حول أوقات الملفات. - المسارات مسارات shell. تبدأ من سطح المكتب:
This PC\C:\Users\…، أو مجلد معروف، أو مكتبة (UsersLibraries\Documents\…) أو موقع شبكة. والمسار الذي يبدأ بمجلد أو ملف موجود على سطح المكتب. والمسار الفارغ هو سطح المكتب نفسه. - عناصر لم يُفك ترميزها. يُعرض العنصر من نوع لا يعرفه محلل عناصر shell بفئته
(
[class 0x00])، ويكون نوعهunknown، وتوجد بايتات القائمة فيDataRaw. - البرامج أسماء. يحتفظ
LastVisitedPidlMRUوCIDSizeMRUباسم ملف (WINWORD.EXE)، لا بمسار. ويحتفظFirstFolderبمسار. - القوائم قصيرة وتُنظَّف. تحتفظ كل قائمة بعدد محدود من الإدخالات، وتحذف أدوات التنظيف
المفاتيح. استخدم
parse-registry read --recover-deletedللقيم المحذوفة.
التحليل باستخدام Juntei¶
Usage: juntei parse-registry open-save-mru <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find NTUSER.DAT hives
-f, --file <FILE> Parse one NTUSER.DAT
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
--code-page <CP> Code page of shell item names that aren't Unicode (default 1252)
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry open-save-mru -d evidence/ -o opensavemru.csv
juntei parse-registry open-save-mru -f NTUSER.DAT -t jsonl \
| jq 'select(.List == "OpenSavePidlMRU" and .Extension != "*")'
يسرد الملخص الإدخالات لكل قائمة، والبرامج التي استخدمت مربعات الحوار، والملف الأحدث
في كل خلية (الإدخال الأول في *).
حقول الإخراج¶
| الحقل | التفسير |
|---|---|
Host، User، UserSID، SourcePath |
المضيف، ومالك ملف التعريف (من المسار أو مجلدات shell)، ومعرّف SID من ProfileList الخاص بالنظام، والخلية. |
List |
OpenSavePidlMRU أو LastVisitedPidlMRU أو LastVisitedPidlMRULegacy أو CIDSizeMRU أو FirstFolder أو OpenSaveMRU أو LastVisitedMRU. |
Extension |
المفتاح الفرعي للامتداد (docx، *)؛ فارغ للقوائم الأخرى. |
MRU-Position، IsMostRecent |
الموضع في قائمة المفتاح (0 هو الأحدث)؛ فارغ عندما لا تسمّي القائمة القيمة. |
ValueName |
رقم القيمة (MRUListEx) أو حرفها (MRUList). |
Program |
البرنامج الذي عرض مربع الحوار. |
Path |
الملف أو المجلد: أسماء عناصر shell مدمجة، أو المسار المخزن كنص. |
ItemType |
نوع آخر عنصر shell: file، directory، root_folder، volume، network_location، property_view، unknown، … |
ItemModifiedUTC، ItemCreatedUTC، ItemAccessedUTC |
أوقات الملف أو المجلد، كما سجّلها عنصر shell الخاص به. |
MFT-Entry، MFT-Sequence |
مرجع ملف NTFS الذي سجّله عنصر shell. |
LastUsedUTC |
وقت آخر كتابة للمفتاح، للإدخال الأحدث فقط. |
KeyPath، KeyLastWrittenUTC |
المفتاح وآخر كتابة له: وقت إدخاله الأحدث، لا وقت كل صف. |
DataRaw |
بايتات القيمة (بالنظام السداسي عشري) عندما يتعذر فك ترميزها، أو قائمة عناصر shell عندما يكون نوع العنصر غير معروف. |
TransactionLogStatus، LogsApplied |
سياق استعادة سجل Windows. |
Problems |
قيم تسميها القائمة لكن المفتاح لا يحتويها، وقيم لا تسميها، وأنواع خاطئة، وأسماء أو قوائم مبتورة. |
استراتيجية التحقيق¶
- اقرأ
*بالترتيب لكل مستخدم، وLastUsedUTCللملف الأحدث. - ابحث عن برامج نصية وأرشيفات وملفات تنفيذية ومستندات في أماكن قابلة للكتابة من المستخدم أو قابلة للإزالة أو على الشبكة، وعن ملفات تحمل أسماء تشبه بيانات الاعتماد أو عمليات التصدير.
- استخدم
LastVisitedPidlMRUلربط برنامج بالمجلد الذي استخدمه آخر مرة، وCIDSizeMRUوFirstFolderللبرامج التي استخدمت مربعات الحوار أصلًا. - اربط المسارات و
MftEntryبـ$MFTودفتر يومية USN وملفات LNK وJump Lists وShellBags وRecentDocs.