
فولاتيليتي 3 مُنقَل إلى Rust. نفس المخرجات، أسرع بكثير.
منفذ لإطار عمل Volatility 3 لتحليل الذاكرة الجنائي من Python إلى Rust. يقرأ نفس صور الذاكرة، ويشغّل نفس الإضافات بنفس الخيارات، ويطبع نفس المخرجات، بايت ببايت، وبسرعة أكبر بكثير.
هذا المشروع منفذ لـ Volatility 3 وبالتالي يُعد "إضافة" بموجب ترخيص برمجيات Volatility 1.0، لذلك يُنشر بموجب نفس الترخيص. النص الكامل موجود في LICENSE وعلى الإنترنت على https://www.volatilityfoundation.org/license/vsl-v1.0. يحتفظ كل ملف مصدري بإشعار يوضح ما اشتُق منه.
هذا المشروع غير تابع لمؤسسة Volatility ولا يحظى بتأييدها. يُستخدم اسم Volatility فقط للتوضيح أن هذا منفذ له.
يتطلب Rust 1.85 أو أحدث، ثم:
cargo build --release
يقع الملف التنفيذي في target/release/vol-rs. لا حاجة لأي شيء اختياري. فك ضغط الرموز، وRC4، وDES، وAES، ومطابقة YARA، وفك تجميع x86، وكتابة PNG، وأرشيفات tar كلها مدمجة، بينما تعتمد النسخة Python على pycryptodomex وyara-python وcapstone وpillow.
./target/release/vol-rs -f memory.raw windows.pslist.PsList
./target/release/vol-rs -f memory.lime linux.bash.Bash
./target/release/vol-rs -f memory.raw -r csv windows.netscan.NetScan
./target/release/vol-rs windows.malfind.Malfind --help
./target/release/vol-rs --list-plugins
كل خيار تقبله النسخة Python يُقبل هنا أيضًا، بنفس الأسماء ونفس القيم الافتراضية، بما في ذلك -o و-r و-s و-c و-e و--filters و--hide-columns و--save-config و--stackers و--single-swap-locations. كما تتطابق خيارات كل إضافة على حدة، وهو ما تظهره صفحات المساعدة: جميعها البالغ عددها 197 مطابقة لتلك الموجودة في Python، حرفًا بحرف.
تُوضع حزم الرموز في $XDG_DATA_HOME/vol-rs/symbols، أو في ~/.local/share/vol-rs/symbols عندما لا يكون المتغير معيّنًا. تُحدد حزمة في مكان آخر باستخدام --symbol-dirs أو عبر متغير البيئة VOLRS_SYMBOL_PATH. تُجلب رموز Windows من خادم رموز Microsoft عند الطلب وتُخزَّن مؤقتًا تحت ~/.cache/vol-rs.
تم تشغيل الجانبين على نفس اللقطات ومقارنتهما، بما في ذلك ترويسة الإطار والأسطر الجديدة الزائدة:
| الفحص | النتيجة |
|---|---|
| إضافات Windows بدون وسائط | 99 من 100 متطابقة |
| إضافات Linux بدون وسائط | 56 من 57 متطابقة |
الملفات الثمانية التي لم تكن متطابقة هي الحالتان المذكورتان تحت "الاختلافات المعروفة" أدناه. سبعة منها ملفات جزئية تتركها النسخة Python على القرص بعد الإبلاغ عن عدم قدرتها على تفريغها، وهذا المنفذ لا ينشئها، وواحد هو أرشيف tar تتطابق محتوياته لكن طوابع الوقت تسجل وقت كل عملية تشغيل.
الإضافتان المفقودتان من تلك الأعداد هما اللتان لا تستطيع النسخة Python إنهاءهما على جهاز الاختبار. تُقتل windows.memmap.Memmap بواسطة مُنهي نفاد الذاكرة بعد 7.8 مليون سطر، وتُقتل linux.pscallstack.PsCallStack قبل انتهائها. في كلتا الحالتين، يُعاد إنتاج كل سطر تمكنت النسخة Python من كتابته أولًا بشكل مطابق تمامًا.
عبر كل إضافة تعمل بدون وسائط، يستغرق مسح Windows 273 ثانية هنا مقابل 5723 ثانية، ومسح Linux 68 ثانية مقابل 3130 ثانية.
أوسع عشر فجوات في كل لقطة، من بين كل إضافة تعمل بدون وسائط:
يحتوي BENCHMARKS.md على الباقي: كل إضافة على اللقطتين، وعمليات التشغيل بالوسائط، والجهاز الذي قيست عليه الأرقام.
هناك أمور قليلة لا يمكن أن تتطابق، وكل منها مقصود:
linux.pagecache.RecoverFs يختم كل ملف في أرشيف tar الذي يكتبه بلحظة تشغيل الإضافة، لذلك لا تتطابق أي عمليتا تشغيل، ولا حتى تشغيلان من Python. الجدول متطابق وكذلك الشجرة المفكوكة.--save-config وtimeliner --record-config يسجلان كل إعداد يصف الصورة، لكن ليس فحوصات النسخة Python بأن المكوّن المستورد حديث بما يكفي، لأن هذا المنفذ لا يحتوي على مثل هذه الفحوصات لتسجيلها.linux.mountinfo --mount-format يدمج مجموعة Python، لذلك يتغير ترتيب أعمدتها بين تشغيلي Python. يسرد هذا المنفذ خيارات التحميل أولًا ثم خيارات نظام الملفات بعدها، بالترتيب الذي يحتفظ به النواة.frameworkinfo وisfinfo يصفان الأداة وليس الصورة، لذلك يبلغان عن طبقات هذا المنفذ وإضافاته وملفات رموزه الخاصة.windows.dumpfiles لا يترك الملفات الجزئية التي تنشئها النسخة Python قبل أن تكتشف أنها لا تستطيع قراءتها. الجداول متطابقة، وتختلف الأدلة بتلك الملفات.--help الذي يسمي دليل ذاكرة التخزين المؤقت يسمي ذاكرة التخزين المؤقت الخاصة بهذا المنفذ.كل ما يلي منقول ويُبنى، لكن لم يُشغَّل بعد على أدلة حقيقية:
Volatility 3 هو عمل مؤسسة Volatility ومساهميها. هذا منفذ لتصميمهم ومجموعة إضافاتهم وصيغة مخرجاتهم، وهو موجود لأن ذلك العمل مفتوح.
| عمليات تشغيل بوسائط | 43 من 43 متطابقة |
| ملفات كتبتها إضافات الاستخراج | تمت مقارنة 1,747 ملفًا، وكل ملف كتبته الأداتان متساوٍ |
| صفحات مساعدة الإضافات | 197 من 197 متطابقة |
| الإضافة | Rust | Python | الأسرع |
|---|
windows.malware.suspicious_threads.SuspiciousThreads | 0.47 ث | 281.6 ث | x599 |
windows.suspicious_threads.SuspiciousThreads | 0.50 ث | 259.1 ث | x518 |
windows.malware.hollowprocesses.HollowProcesses | 0.52 ث | 257.9 ث | x496 |
windows.suspended_threads.SuspendedThreads | 0.090 ث | 42.0 ث | x467 |
windows.malware.malfind.Malfind | 0.52 ث | 236.5 ث | x455 |
windows.hollowprocesses.HollowProcesses | 0.59 ث | 263.0 ث | x446 |
windows.debugregisters.DebugRegisters | 0.090 ث | 37.0 ث | x411 |
windows.malfind.Malfind | 0.65 ث | 239.7 ث | x369 |
windows.vadinfo.VadInfo | 0.99 ث | 329.7 ث | x333 |
windows.verinfo.VerInfo | 0.99 ث | 150.7 ث | x152 |
| الإضافة | Rust | Python | الأسرع |
|---|
linux.library_list.LibraryList | 1.99 ث | 788.7 ث | x396 |
linux.kallsyms.Kallsyms | 2.41 ث | 161.6 ث | x67 |
linux.netfilter.Netfilter | 0.89 ث | 56.3 ث | x63 |
linux.lsof.Lsof | 0.89 ث | 55.6 ث | x62 |
linux.sockstat.Sockstat | 1.60 ث | 97.2 ث | x61 |
linux.check_idt.Check_idt | 0.82 ث | 49.7 ث | x61 |
linux.malware.netfilter.Netfilter | 1.07 ث | 62.0 ث | x58 |
linux.pagecache.Files | 1.67 ث | 93.4 ث | x56 |
linux.kthreads.Kthreads | 0.87 ث | 47.2 ث | x54 |
linux.proc.Maps | 2.53 ث | 135.4 ث | x54 |