
विंडोज XML इवेंट लॉग (EVTX) प्रारूप के लिए एक तेज़ (और सुरक्षित) पार्सर
Windows XML EventLog प्रारूप के लिए एक क्रॉस-प्लेटफ़ॉर्म पार्सर

क्या आप शून्य-इंस्टॉल विकल्प पसंद करते हैं? एक पूर्ण-सुविधा संपन्न EVTX एक्सप्लोरर सीधे आपके ब्राउज़र में चलता है, जो उसी Rust कोर द्वारा संचालित है जो WebAssembly में संकलित है।
👉 अभी आज़माएं: https://omerbenamram.github.io/evtx/
सब कुछ स्थानीय रूप से होता है – फ़ाइलें कभी आपकी मशीन नहीं छोड़तीं। मुख्य विशेषताएं:
.evtx फ़ाइलें (या ब्राउज़ करने के लिए क्लिक करें) – बहुत बड़े लॉग को भी संभालता है!EventData फ़ील्ड पर फ़ैक्टेड फ़िल्टर – सभी DuckDB-WASM द्वारा समर्थितदर्शक GitHub Pages से स्थिर रूप से परोसा जाता है; पहले लोड के बाद यह पूरी तरह से ऑफ़लाइन काम करता है।
cargo install evtx का उपयोग करके स्रोतों से निर्माण करेंevtx_dump (बाइनरी उपयोगिता):इस crate के साथ प्रदान की गई मुख्य बाइनरी उपयोगिता evtx_dump है, और यह .evtx फ़ाइलों को विभिन्न आउटपुट स्वरूपों में बदलने का एक त्वरित तरीका प्रदान करता है।
कुछ उदाहरण:
evtx_dump <evtx_file> evtx रिकॉर्ड की सामग्री को xml के रूप में डंप करेगा।evtx_dump -o json <evtx_file> evtx रिकॉर्ड की सामग्री को JSON के रूप में डंप करेगा।evtx_dump -f <output_file> -o json <input_file> evtx रिकॉर्ड की सामग्री को दी गई फ़ाइल में JSON के रूप में डंप करेगा।cat <evtx_file> | evtx_dump -o jsonl - stdin से EVTX फ़ाइल पढ़ेगा (पाइपिंग/डीकंप्रेसन के लिए उपयोगी)।evtx_dump को फ़ाइलों के सुविधाजनक बैच प्रोसेसिंग के लिए fd के साथ जोड़ा जा सकता है:
fd -e evtx -x evtx_dump -o jsonl एक फ़ोल्डर को स्कैन करेगा और सभी evtx फ़ाइलों को एक एकल jsonlines फ़ाइल में डंप करेगा।fd -e evtx -x evtx_dump '{}' -f '{.}.xml' फ़ोल्डर में सभी फ़ाइलों के लिए प्रत्येक evtx फ़ाइल के बगल में एक xml फ़ाइल बनाएगा!xargs (या मैक पर gxargs) और jq का उपयोग किया जा सकता है: fd -a -e evtx | xargs -I input sh -c "evtx_dump -o jsonl input | jq --arg path "input" '. + {path: \$path}'"ध्यान दें: डिफ़ॉल्ट रूप से, evtx_dump मल्टीथ्रेडिंग का उपयोग करने का प्रयास करेगा, जिसका अर्थ है कि रिकॉर्ड क्रम से बाहर वापस आ सकते हैं।
सिंगल थ्रेडेड उपयोग को बाध्य करने के लिए (जो क्रम भी सुनिश्चित करेगा), -t 1 पारित किया जा सकता है।
EVTX रिकॉर्ड प्रदाता बाइनरी (EXE/DLL/SYS) में संग्रहीत टेम्पलेट परिभाषाओं को संदर्भित कर सकते हैं। evtx_dump उन टेम्पलेट्स को एक ऑफ़लाइन कैश में निकाल सकता है और रेंडर समय पर उनका उपयोग कर सकता है।
ध्यान दें: इस कार्यक्षमता के लिए evtx_dump को Cargo फीचर wevt_templates के साथ बनाने की आवश्यकता है (रिलीज़ बाइनरी में यह पहले से शामिल हो सकता है)।
.wevtcache फ़ाइल):
evtx_dump extract-wevt-templates --input <provider.dll> --output /tmp/wevt_cache.wevtcache --overwriteevtx_dump --wevt-cache /tmp/wevt_cache.wevtcache <log.evtx>डिबगिंग सहायक:
TemplateInstance प्रतिस्थापन मान डंप करें (JSONL):
evtx_dump dump-template-instances --input <log.evtx> --record-id <ID> | head -n1evtx_dump apply-wevt-cache --cache /tmp/wevt_cache.wevtcache --template-guid <GUID> --evtx <log.evtx> --record-id <ID>विवरण और पृष्ठभूमि के लिए docs/wevt_templates.md देखें (मुद्दा #103)।
use evtx::EvtxParser;
use std::path::PathBuf;
// Change this to a path of your .evtx sample.
let fp = PathBuf::from(format!("{}/samples/security.evtx", std::env::var("CARGO_MANIFEST_DIR").unwrap()));
let mut parser = EvtxParser::from_path(fp).unwrap();
for record in parser.records() {
match record {
Ok(r) => println!("Record {}\n{}", r.event_record_id, r.data),
Err(e) => eprintln!("{}", e),
}
}
समानांतर संस्करण फीचर "multithreading" के साथ संकलित करने पर सक्षम होता है (डिफ़ॉल्ट रूप से सक्षम)।
मल्टीथ्रेडिंग का उपयोग करते समय - evtx किसी भी उपलब्ध अन्य पार्सर की तुलना में काफी तेज़ है।
एकल कोर प्रदर्शन के लिए, यह XML और JSON दोनों आउटपुट का समर्थन करने वाला सबसे तेज़ और एकमात्र क्रॉस-प्लेटफ़ॉर्म पार्सर है।
प्रदर्शन को मेरी मशीन पर hyperfine (सांख्यिकीय माप उपकरण) का उपयोग करके बेंच किया गया था।
मैं 12-कोर AMD Ryzen 3900X पर परीक्षण चला रहा हूं।
बेंच रन: जून 2026 (evtx 0.12.2)।
सिस्टम: Arch Linux (Linux 7.0.11-arch1-1 x86_64)।
बेंचमार्क कमिट: 99a6def।
evtx कॉलम — और pyevtx-rs, हमारे अपने Python बाइंडिंग, जो उसी Rust कोर को लपेटते हैं — को जून 2026 में इसी मशीन पर, संकलित-टेम्पलेट पुनर्लेखन के आने के बाद (देखें docs/compiled-templates.html) पुनः मापा गया। दोनों PGO बिल्ड हैं जो Linux/macOS के लिए भेजे जाते हैं (रिलीज़ बाइनरी और PyPI व्हील; विवरण नीचे)। pyevtx-rs प्रति-रिकॉर्ड Python मार्शलिंग (प्रति रिकॉर्ड एक dict) द्वारा सीमित है, पार्सर द्वारा नहीं, इसलिए यह पूर्ण कोर गति नहीं देखता है। शेष प्रतियोगी आंकड़े (libevtx, velocidex/evtx, golang-evtx, python-evtx) उसी हार्डवेयर पर जनवरी 2026 के रन से अपरिवर्तित लिए गए हैं — बाहरी उपकरण जिनका प्रदर्शन नहीं बदला है।
बेंच की गई लाइब्रेरी: