انتقل إلى المحتوى

Prefetch

ما هو Prefetch

تسجل ملفات Windows Prefetch معلومات تُستخدم لتحسين بدء تشغيل التطبيقات. ويخزن ملف .pf الخاص ببرنامج معين عادةً اسم الملف التنفيذي وتجزئته، وعدد مرات التشغيل، وأوقات التشغيل الأخيرة، ومعلومات وحدات التخزين، والمجلدات، والملفات التي جرت الإشارة إليها أثناء بدء التشغيل.

في إصدارات Windows المدعومة، يُعد سجل Prefetch صالح لتطبيق ما عادةً دليلًا قويًا على أن الملف التنفيذي قد شُغِّل. وهو من أكثر آثار التنفيذ الرقمية فائدةً من خارج سجلات الأحداث.

أفضل استنتاج: شُغِّل الملف التنفيذي المسمى في وقت (أو أوقات) التشغيل الأخيرة المسجلة، مع مراعاة سلوك نظام التشغيل وصلاحية التحليل.

الموقع والجمع

C:\Windows\Prefetch\*.pf

يدعم 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 مدمجة بفواصل.

استراتيجية التحقيق

  1. استخدم -T لإضافة عمليات التشغيل المحفوظة إلى جدول زمني.
  2. جمّع السجلات حسب اسم الملف التنفيذي مع تجزئة Prefetch؛ فقد يكون للاسم نفسه مسارات/تجزئات مختلفة.
  3. راجع ExecutablePath، ومسارات التجهيز، ونتائج الملفات الثنائية للنظام المنقولة، وملفات DLL المحمّلة.
  4. طابق مراجع MFT ومسارات الملفات المستهدفة مع سجلات $MFT/USN.
  5. اربط أوقات التشغيل بسجلات الأحداث، وSRUM، وبيانات القياس عن بُعد للشبكة، والخدمات، والمهام، والآثار الرقمية للمستخدم.

مزيد من التفاصيل