Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
evtx — Быстрый (и безопасный) парсер для формата Windows XML Event Log (EVTX) | Kitploit
Инструменты/GitHubGitHub/omerbenamram/evtx
ФорензикаЦифровая криминалистикаРеагирование на ИнцидентыАнализ Журналов
GitHubomerbenamram/evtx

evtx

Быстрый (и безопасный) парсер для формата Windows XML Event Log (EVTX)

Репозиторий
9498122 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

EVTX

Кроссплатформенный парсер формата журнала событий Windows XML


Crates.io version Download docs.rs docs safety-dance Build status

Features

  • 🔒 Реализован на 100% безопасном Rust и работает на всех платформах, поддерживаемых Rust (имеющих stdlib).
  • ⚡ Быстрый - см. бенчмарки ниже. Он быстрее любой другой реализации на порядки!
  • 🚀 Многопоточный.
  • ✨ Поддерживает вывод XML и JSON, оба напрямую создаются из общего промежуточного представления (IR) (без преобразования xml2json!)
  • ⛏️ Поддерживает базовое восстановление отсутствующих записей/чанков!
  • 🐍 Python-биндинги также доступны на https://github.com/omerbenamram/pyevtx-rs (и на PyPi https://pypi.org/project/evtx/)

Веб-просмотрщик (EVTX Web)

EVTX Web Screenshot

Предпочитаете вариант без установки? Полнофункциональный EVTX-проводник работает прямо в вашем браузере, основанный на том же ядре Rust, скомпилированном в WebAssembly.

👉 Попробуйте сейчас: https://omerbenamram.github.io/evtx/

Все происходит локально – файлы никогда не покидают ваш компьютер. Основные возможности:

  • Перетаскивание .evtx файлов (или нажмите для просмотра) – обрабатывает очень большие логи!
  • Молниеносный парсинг через WebAssembly и виртуальный скроллинг
  • Фасетные фильтры по уровню, провайдеру, каналу, ID события и динамическим полям EventData – все на базе DuckDB-WASM
  • Полнотекстовый поиск, управление колонками и экспорт отфильтрованного набора в JSON/XML на лету
  • Светлая/темная темы, навигация с клавиатуры и интерфейс в стиле Windows

Просмотрщик статически размещается на GitHub Pages; после первой загрузки он полностью работает офлайн.

Установка (связанная утилита бинарного файла):

  • Загрузите последний исполняемый релиз с https://github.com/omerbenamram/evtx/releases
    • Релизы автоматически собираются для Windows, macOS и Linux. (Только 64-битные исполняемые файлы)
  • Соберите из исходников с помощью cargo install evtx

evtx_dump (Утилита командной строки):

Основная бинарная утилита, предоставляемая этим крейтом, — 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 - прочитает EVTX файл из stdin (полезно для конвейеров/распаковки).

evtx_dump можно комбинировать с fd для удобной пакетной обработки файлов:

  • fd -e evtx -x evtx_dump -o jsonl просканирует папку и выведет все evtx файлы в один файл jsonlines.
  • fd -e evtx -x evtx_dump '{}' -f '{.}.xml' создаст xml-файл рядом с каждым evtx файлом, рекурсивно для всех файлов в папке!
  • Если нужно добавить исходный путь файла в json, можно использовать xargs (или gxargs на mac) и 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.

Отрисовка шаблонов офлайн (WEVT_TEMPLATE)

Записи 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 --overwrite

Дамп EVTX-файла с использованием кэша (детерминированное правило: применяется только при сбое записи из-за явно отсутствующего/поврежденного GUID шаблона):

  • evtx_dump --wevt-cache /tmp/wevt_cache.wevtcache <log.evtx>

Вспомогательные средства отладки:

  • Дамп значений подстановки TemplateInstance записи (JSONL):
    • evtx_dump dump-template-instances --input <log.evtx> --record-id <ID> | head -n1
  • Отрисовка указанного GUID шаблона с подстановками (XML в stdout):
    • evtx_dump apply-wevt-cache --cache /tmp/wevt_cache.wevtcache --template-guid <GUID> --evtx <log.evtx> --record-id <ID>

См. docs/wevt_templates.md для деталей и предыстории (issue #103).

Пример использования (как библиотека):

root@kitploit:~
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-маршалингом для каждой записи (один словарь на запись), а не парсером, поэтому он не видит полного ускорения ядра. Остальные цифры конкурентов (libevtx, velocidex/evtx, golang-evtx, python-evtx) перенесены без изменений из январского 2026 прогона на том же оборудовании — внешние инструменты, чья производительность не изменилась.

Протестированные библиотеки:

  • python-evtx(https://github.com/williballenthin/python-evtx) - С CPython и PyPy
  • pyevtx-rs(https://github.com/omerbenamram/pyevtx-rs) / evtx(https://pypi.org/project/evtx/) - Python-биндинги для этой библиотеки
  • libevtx(https://github.com/libyal/libevtx)
  • golang-evtx(https://github.com/0xrawsec/golang-evtx.git) - только JSON (использует многопоточность)
  • evtx(https://github.com/Velocidex/evtx) - только JSON.
  • evtx (Эта библиотека)

Примечание: показанные числа — это измерения real-time (время, необходимое для завершения вызова). Измерения user-time выше при использовании многопоточности/многопроцессорности из-за накладных расходов на синхронизацию.

С 8 потоками evtx более чем в 7000 раз быстрее python-evtx при дампе xml-логов.

Пропускная способность теперь насыщается примерно на 8 потоках на этом 30МБ образце: однопоточный парсинг стал достаточно быстрым (~в 3.8 раза быстрее январских 2026 цифр на той же машине), что 30МБ уже не содержит достаточно работы, чтобы занять все 24 логических ядра — 24 потока не быстрее 8 (оба в пределах погрешности измерений, поэтому таблица выделяет столбец 8 потоков как точку насыщения). На этом этапе evtx примерно в 65 раз быстрее golang-evtx, который использует аналогичную стратегию многопоточности.

PGO-сборка

Приведенные выше числа получены из профильно-управляемой сборки (./build_pgo.sh): она обучает инструментированный бинарник на корпусе примеров, затем пересобирает с этим профилем. CI запускает это для релизных бинарников Linux (x86_64) и macOS, поэтому таблица отражает артефакт, который загружает большинство людей (вывод побайтно идентичен обычной сборке). PGO дает примерно 2–5% прироста однопоточной производительности по сравнению с обычным cargo build --release --features fast-alloc (JSON 77.6 → 75 мс, XML 73.0 → 71 мс); при 8+ потоках нагрузка насыщена, поэтому PGO там в пределах погрешности измерений.

Предостережения

  • В настоящее время не реализовано:
    • Узлы CDATA.
    • Тип узла EVTHandle.

Если парсер выдает ошибку на любом из этих узлов, не стесняйтесь открыть issue или отправить мне письмо с примером.

Лицензия

Лицензировано на условиях

  • Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
  • MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)

на ваш выбор.

Вклад

Если вы явно не укажете иное, любой вклад, намеренно предоставленный вами для включения в работу, как определено в лицензии Apache-2.0, будет двойным лицензированием, как указано выше, без каких-либо дополнительных условий.

Скачать инструмент
evtx (1 thread)evtx (8 threads)evtx (24 threads)libevtx (C)velocidex/evtx (go)golang-evtx (uses multiprocessing)pyevtx-rs (CPython 3.14.5)python-evtx (CPython 3.13.11)python-evtx (PyPy 7.3.19)
30MB evtx (XML)71.6 ms ± 1.8 ms20.7 ms ± 1.0 ms22.1 ms ± 1.7 ms2.439 s ± 0.035 sNo supportNo support204.6 ms ± 5.7 ms2m41.075s (ran once)40.096s (ran once)
30MB evtx (JSON)75.1 ms ± 2.1 ms20.5 ms ± 0.8 ms20.1 ms ± 0.9 msNo support5.467 s ± 0.038 s1.344 s ± 0.005 s223.1 ms ± 4.7 msNo supportNo support