
वोलैटिलिटी 3 को Rust में पोर्ट किया गया। समान आउटपुट, कहीं अधिक तेज़।
Volatility 3 मेमोरी फोरेंसिक फ्रेमवर्क का Python से Rust में एक पोर्ट। यह समान मेमोरी इमेज पढ़ता है, समान विकल्पों के साथ समान प्लगइन चलाता है, और समान आउटपुट प्रिंट करता है, बाइट दर बाइट, काफी तेज़ी से।
यह प्रोजेक्ट Volatility 3 का एक पोर्ट है और इसलिए Volatility सॉफ्टवेयर लाइसेंस 1.0 के तहत एक "Addition" है, इसलिए इसे उसी लाइसेंस के तहत प्रकाशित किया गया है। पूरा पाठ LICENSE में है और ऑनलाइन https://www.volatilityfoundation.org/license/vsl-v1.0 पर उपलब्ध है। हर स्रोत फ़ाइल में वह नोटिस रहता है जो दर्ज करता है कि वह किससे व्युत्पन्न हुई है।
यह प्रोजेक्ट Volatility Foundation से संबद्ध या समर्थित नहीं है। 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 प्लगइन | 100 में से 99 समान |
| बिना तर्कों के Linux प्लगइन |
आठ फ़ाइलें जो समान नहीं पाई गईं, वे नीचे ज्ञात अंतरों के अंतर्गत सूचीबद्ध दो मामले हैं। सात आंशिक फ़ाइलें हैं जिन्हें Python संस्करण डिस्क पर छोड़ देता है जब यह रिपोर्ट करता है कि वह उन्हें डंप नहीं कर सका, जिन्हें यह पोर्ट नहीं बनाता है, और एक टारबॉल है जिसकी सामग्री मेल खाती है लेकिन जिसके टाइमस्टैम्प दर्ज करते हैं कि प्रत्येक रन कब हुआ।
उन गणनाओं से लापता दो प्लगइन वे हैं जिन्हें Python संस्करण परीक्षण मशीन पर पूरा नहीं कर सकता है। windows.memmap.Memmap को 7.8 मिलियन पंक्तियों के बाद आउट ऑफ मेमोरी किलर द्वारा मार दिया जाता है, और linux.pscallstack.PsCallStack को समाप्त होने से पहले मार दिया जाता है। दोनों मामलों में Python संस्करण द्वारा पहले लिखी गई हर पंक्ति बिल्कुल पुनरुत्पादित की जाती है।
हर प्लगइन में जो बिना तर्कों के चलता है, Windows स्वीप यहाँ 273 सेकंड लेता है जबकि 5723 सेकंड के विरुद्ध, और Linux स्वीप 68 सेकंड जबकि 3130 सेकंड के विरुद्ध।
प्रत्येक कैप्चर पर दस सबसे बड़े अंतराल, हर प्लगइन में से जो बिना तर्कों के चलता है:
BENCHMARKS.md में बाकी है: दोनों कैप्चर पर हर प्लगइन, तर्क लेने वाले रन, और वह मशीन जिस पर संख्याएँ मापी गईं।
कुछ चीज़ें मेल नहीं खा सकतीं, और प्रत्येक जानबूझकर है:
linux.pagecache.RecoverFs अपने द्वारा लिखे गए टारबॉल में हर फ़ाइल को उस क्षण के साथ स्टैम्प करता है जब प्लगइन चला, इसलिए कोई भी दो रन सहमत नहीं होते, यहाँ तक कि दो Python रन भी नहीं। तालिका मेल खाती है और अनपैक्ड ट्री भी।--save-config और timeliner --record-config हर सेटिंग दर्ज करते हैं जो इमेज का वर्णन करती है, लेकिन Python संस्करण की जाँच नहीं कि एक आयातित घटक पर्याप्त नया है, क्योंकि इस पोर्ट में दर्ज करने के लिए ऐसी कोई जाँच नहीं है।linux.mountinfo --mount-format एक Python सेट को जोड़ता है, इसलिए इसका कॉलम क्रम दो Python रनों के बीच बदलता है। यह पोर्ट माउंट विकल्पों को पहले और फ़ाइलसिस्टम विकल्पों को बाद में सूचीबद्ध करता है, उस क्रम में जिसमें कर्नेल उन्हें रखता है।frameworkinfo और isfinfo इमेज के बजाय उपकरण का वर्णन करते हैं, इसलिए वे इस पोर्ट की अपनी परतों, प्लगइन और सिंबल फ़ाइलों की रिपोर्ट करते हैं।windows.dumpfiles उन आंशिक फ़ाइलों को पीछे नहीं छोड़ता जिन्हें Python संस्करण बनाता है इससे पहले कि वह पता लगाए कि वह उन्हें पढ़ नहीं सकता। तालिकाएँ सहमत हैं, निर्देशिकाएँ उन फ़ाइलों द्वारा भिन्न हैं।--help में कैश निर्देशिका का नाम देने वाली पंक्ति इस पोर्ट की अपनी कैश का नाम देती है।नीचे सब कुछ पोर्ट किया गया है और बनता है, लेकिन अभी तक वास्तविक साक्ष्य के विरुद्ध नहीं चलाया गया है:
Volatility 3 Volatility Foundation और उसके योगदानकर्ताओं का काम है। यह उनके डिज़ाइन, उनके प्लगइन सेट और उनके आउटपुट प्रारूप का एक पोर्ट है, और यह इसलिए मौजूद है क्योंकि वह काम खुला है।
| 57 में से 56 समान |
| तर्क लेने वाले रन | 43 में से 43 समान |
| निष्कर्षण प्लगइन द्वारा लिखी गई फ़ाइलें | 1,747 तुलना की गईं, दोनों उपकरणों द्वारा लिखी गई हर फ़ाइल बराबर है |
| प्लगइन सहायता पृष्ठ | 197 में से 197 समान |
| प्लगइन | Rust | Python | तेज़ |
|---|
windows.malware.suspicious_threads.SuspiciousThreads | 0.47 s | 281.6 s | x599 |
windows.suspicious_threads.SuspiciousThreads | 0.50 s | 259.1 s | x518 |
windows.malware.hollowprocesses.HollowProcesses | 0.52 s | 257.9 s | x496 |
windows.suspended_threads.SuspendedThreads | 0.090 s | 42.0 s | x467 |
windows.malware.malfind.Malfind | 0.52 s | 236.5 s | x455 |
windows.hollowprocesses.HollowProcesses | 0.59 s | 263.0 s | x446 |
windows.debugregisters.DebugRegisters | 0.090 s | 37.0 s | x411 |
windows.malfind.Malfind | 0.65 s | 239.7 s | x369 |
windows.vadinfo.VadInfo | 0.99 s | 329.7 s | x333 |
windows.verinfo.VerInfo | 0.99 s | 150.7 s | x152 |
| प्लगइन | Rust | Python | तेज़ |
|---|
linux.library_list.LibraryList | 1.99 s | 788.7 s | x396 |
linux.kallsyms.Kallsyms | 2.41 s | 161.6 s | x67 |
linux.netfilter.Netfilter | 0.89 s | 56.3 s | x63 |
linux.lsof.Lsof | 0.89 s | 55.6 s | x62 |
linux.sockstat.Sockstat | 1.60 s | 97.2 s | x61 |
linux.check_idt.Check_idt | 0.82 s | 49.7 s | x61 |
linux.malware.netfilter.Netfilter | 1.07 s | 62.0 s | x58 |
linux.pagecache.Files | 1.67 s | 93.4 s | x56 |
linux.kthreads.Kthreads | 0.87 s | 47.2 s | x54 |
linux.proc.Maps | 2.53 s | 135.4 s | x54 |