Prefetch¶
ما هو Prefetch¶
تسجل ملفات Windows Prefetch معلومات تُستخدم لتحسين بدء تشغيل التطبيقات. ويخزن ملف .pf الخاص
ببرنامج معين عادةً اسم الملف التنفيذي وتجزئته، وعدد مرات التشغيل، وأوقات التشغيل الأخيرة، ومعلومات
وحدات التخزين، والمجلدات، والملفات التي جرت الإشارة إليها أثناء بدء التشغيل.
في إصدارات Windows المدعومة، يُعد سجل Prefetch صالح لتطبيق ما عادةً دليلًا قويًا على أن الملف التنفيذي قد شُغِّل. وهو من أكثر آثار التنفيذ الرقمية فائدةً من خارج سجلات الأحداث.
أفضل استنتاج: شُغِّل الملف التنفيذي المسمى في وقت (أو أوقات) التشغيل الأخيرة المسجلة، مع مراعاة سلوك نظام التشغيل وصلاحية التحليل.
الموقع والجمع¶
يدعم Juntei إصدارات التنسيق من 17 إلى 31 (من Windows XP إلى Windows 11)، بما في ذلك ملفات Windows 8+ المضغوطة. اجمع المجلد بأكمله حتى تتمكن من مقارنة تجزئات أسماء الملفات التنفيذية والسجلات المجاورة.
تحذيرات للمحلل¶
- لا يخزن Windows سوى وقت تشغيل تاريخي واحد في الإصدارات الأقدم، وما يصل إلى ثمانية أوقات في الإصدارات الأحدث.
وقد تتجاوز قيمة
RunCountعدد الطوابع الزمنية المتاحة. - قد يكون Prefetch معطلًا أو منظَّفًا أو مستثنى أو غير متاح على بعض الأنظمة/الأدوار. ولا يُعد غيابه دليلًا على أن البرنامج لم يُشغَّل.
- تصف قوائم الملفات المحمّلة تبعيات بدء التشغيل وعمليات الوصول؛ ولا تثبت أن كل ملف مدرج فيها كان ضارًا أو فُتح عمدًا أو قُرئ بالكامل.
- اسم الملف التنفيذي في ترويسة Prefetch محدود الطول؛ ويستنتج Juntei المسار من الملفات المحمّلة عندما يمكن تحديده بشكل فريد.
- الطوابع الزمنية لنظام الملفات الخاصة بملف المصدر
.pfمنفصلة عن أوقات التشغيل المضمّنة فيه. - تمثل
Findingsملاحظات لأغراض البحث عن التهديدات. وكثيرًا ما تستخدم برامج التثبيت وعمليات الإدارة المشروعة مسارات تجهيز مؤقتة.
التحليل باستخدام Juntei¶
Usage: juntei parse-file prefetch <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find *.pf files
-f, --file <FILE> Parse one Prefetch file
Records:
-T, --timeline Write one row per retained execution time, sorted by time
Output:
-o, --output <FILE> Save every record
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-file prefetch -d Prefetch/ -o prefetch.csv
juntei parse-file prefetch -d Prefetch/ -T -o prefetch-timeline.csv
juntei parse-file prefetch -d Prefetch/ -t jsonl \
| jq 'select(.ExecutableName? | test("powershell|rundll32"; "i"))'
حقول CSV القياسية¶
| الحقل | التفسير |
|---|---|
SourceFile |
ملف .pf المُدخل؛ احتفظ به للتمييز بين المضيفين وبين أسماء الملفات التنفيذية المكررة. |
ExecutableName |
اسم الملف التنفيذي في الترويسة. تعامل معه دون تمييز لحالة الأحرف في معظم عمليات البحث عن التهديدات، مع الحفاظ على تهجئته الأصلية. |
ExecutablePath |
المسار المحمّل الذي استنتجه Juntei عند الإمكان. تحقق منه بمقارنته مع Files ومع آثار رقمية أخرى. |
PathValidated |
المسار المختار يطابق تجزئة مسار SCCA. يؤكد ذلك نسبة المسار، وليس محتوى الملف أو موثوقيته. |
PathAmbiguous |
تبقى عدة مسارات محملة محتملة؛ يحتفظ ExecutablePath باسم الترويسة. راجع Files والأدلة الأخرى. |
PrefetchHash |
التجزئة التي يستخدمها Windows في اسم ملف .pf؛ وهي ليست تجزئة تشفيرية لمحتوى الملف. |
FormatVersion |
إصدار بنية Prefetch؛ ويحدد الحقول المتاحة وعدد الطوابع الزمنية. |
RunCount |
عدّاد تراكمي يسجله Windows. مفيد لمعرفة التكرار، لا لمعرفة التاريخ الدقيق. |
LastRun |
أحدث وقت تنفيذ محفوظ. |
PreviousRun1 … PreviousRun7 |
أوقات تنفيذ سابقة محفوظة، من الأحدث إلى الأقدم. تكون فارغة حين لا يتضمنها التنسيق أو السجل التاريخي. |
VolumeCount |
عدد وحدات التخزين المصدرية المسجلة. |
VolumeDevicePaths |
مسارات أجهزة NT لوحدات التخزين المستخدمة أثناء بدء التشغيل. اربطها بالأرقام التسلسلية. |
VolumeSerialNumbers |
معرّفات وحدات التخزين؛ مفيدة لربط الأدلة المتعلقة بمحركات الأقراص القابلة للإزالة أو المعاد تهيئتها. |
VolumeCreated |
أوقات إنشاء وحدات التخزين المسجلة، وليست أوقات إنشاء الملف التنفيذي. |
DirectoryCount |
عدد سلاسل المجلدات المسجلة. |
FileCount |
عدد مراجع الملفات المحمّلة المسجلة. |
Findings |
ملاحظات Juntei، مثل الملفات الثنائية للنظام التي نُقلت من موقعها أو مسارات التنفيذ المريبة. راجعها يدويًا. |
Files |
الملفات المحمّلة/المشار إليها مع مراجع NTFS المتاحة. نقطة محورية ممتازة للبحث في ملفات DLL والمسارات، لكنها ليست دليلًا على النية تجاه الملف. |
Dir |
سلاسل المجلدات المرتبطة ببدء التشغيل. مفيدة عندما تكون مسارات الملفات المحمّلة الفردية غير مكتملة. |
حقول CSV للجدول الزمني (-T)¶
| الحقل | التفسير |
|---|---|
RunTime |
وقت تنفيذ واحد محفوظ في Prefetch. |
ExecutableName، ExecutablePath |
هوية البرنامج وسياق مساره. |
PathValidated |
المسار المختار يطابق تجزئة مسار SCCA. يؤكد ذلك نسبة المسار، وليس محتوى الملف أو موثوقيته. |
PathAmbiguous |
تبقى عدة مسارات محملة محتملة؛ يحتفظ ExecutablePath باسم الترويسة. راجع Files والأدلة الأخرى. |
PrefetchHash |
يميّز بين المتغيرات/المسارات التي تشترك في اسم الملف التنفيذي نفسه. |
RunCount |
العدّاد المأخوذ من ملف Prefetch؛ ويتكرر في كل صف من صفوف الجدول الزمني. |
SourceFile |
ملف .pf المصدر لأغراض التحقق. |
تحتفظ JSON/JSONL بوحدات التخزين والمجلدات والملفات المحمّلة ومراجع ملفات NTFS على هيئة مصفوفات منظمة، بدلًا من خلايا CSV مدمجة بفواصل.
استراتيجية التحقيق¶
- استخدم
-Tلإضافة عمليات التشغيل المحفوظة إلى جدول زمني. - جمّع السجلات حسب اسم الملف التنفيذي مع تجزئة Prefetch؛ فقد يكون للاسم نفسه مسارات/تجزئات مختلفة.
- راجع
ExecutablePath، ومسارات التجهيز، ونتائج الملفات الثنائية للنظام المنقولة، وملفات DLL المحمّلة. - طابق مراجع MFT ومسارات الملفات المستهدفة مع سجلات
$MFT/USN. - اربط أوقات التشغيل بسجلات الأحداث، وSRUM، وبيانات القياس عن بُعد للشبكة، والخدمات، والمهام، والآثار الرقمية للمستخدم.