
Un analizador rápido (y seguro) para el formato de Registro de Eventos XML de Windows (EVTX)
Un analizador multiplataforma para el formato Windows XML EventLog

¿Prefieres una opción sin instalación? Un explorador EVTX con todas las funciones se ejecuta directamente en tu navegador, impulsado por el mismo núcleo Rust compilado a WebAssembly.
👉 Pruébalo ahora: https://omerbenamram.github.io/evtx/
Todo ocurre localmente – los archivos nunca salen de tu máquina. Destacados:
.evtx (o haz clic para explorar) – ¡maneja logs muy grandes!EventData – todo respaldado por DuckDB-WASMEl visor se sirve estáticamente desde GitHub Pages; tras la primera carga funciona completamente sin conexión.
cargo install evtxevtx_dump (Utilidad binaria):La utilidad binaria principal proporcionada con esta crate es evtx_dump, y proporciona una forma rápida de convertir archivos .evtx a diferentes formatos de salida.
Algunos ejemplos
evtx_dump <evtx_file> volcará el contenido de los registros evtx como xml.evtx_dump -o json <evtx_file> volcará el contenido de los registros evtx como JSON.evtx_dump -f <output_file> -o json <input_file> volcará el contenido de los registros evtx como JSON a un archivo dado.cat <evtx_file> | evtx_dump -o jsonl - leerá el archivo EVTX desde stdin (útil para tuberías/descompresión).evtx_dump se puede combinar con fd para el procesamiento por lotes conveniente de archivos:
fd -e evtx -x evtx_dump -o jsonl escaneará una carpeta y volcará todos los archivos evtx a un único archivo jsonlines.fd -e evtx -x evtx_dump '{}' -f '{.}.xml' creará un archivo xml junto a cada archivo evtx, ¡para todos los archivos en la carpeta de forma recursiva!xargs (o gxargs en mac) y jq: fd -a -e evtx | xargs -I input sh -c "evtx_dump -o jsonl input | jq --arg path "input" '. + {path: \$path}'"Nota: por defecto, evtx_dump intentará utilizar multihilo, esto significa que los registros pueden devolverse desordenados.
Para forzar el uso de un solo hilo (lo que también asegurará el orden), se puede pasar -t 1.
Los registros EVTX pueden hacer referencia a definiciones de plantillas almacenadas en binarios de proveedores (EXE/DLL/SYS). evtx_dump puede extraer esas plantillas en una caché sin conexión y usarlas al renderizar.
Nota: esta funcionalidad requiere compilar evtx_dump con la característica de Cargo wevt_templates (los binarios de lanzamiento pueden ya incluirla).
.wevtcache):
evtx_dump extract-wevt-templates --input <provider.dll> --output /tmp/wevt_cache.wevtcache --overwriteevtx_dump --wevt-cache /tmp/wevt_cache.wevtcache <log.evtx>Ayudantes de depuración:
TemplateInstance de un registro (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>Consulte docs/wevt_templates.md para obtener detalles y antecedentes (issue #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),
}
}
La versión en paralelo se habilita al compilar con la característica "multithreading" (habilitada por defecto).
Al usar multihilo, evtx es significativamente más rápido que cualquier otro analizador disponible. En rendimiento de un solo núcleo, es tanto el más rápido como el único analizador multiplataforma que soporta salidas XML y JSON.
El rendimiento se evaluó en mi máquina usando hyperfine (herramienta de mediciones estadísticas).
Estoy ejecutando pruebas en un AMD Ryzen 3900X de 12 núcleos.
Ejecución del benchmark: Junio 2026 (evtx 0.12.2).
Sistema: Arch Linux (Linux 7.0.11-arch1-1 x86_64).
Commit del benchmark: 99a6def.
Las columnas de evtx — y pyevtx-rs, nuestros propios bindings de Python, que envuelven el mismo núcleo Rust — fueron re-medidas en junio de 2026 en esta misma máquina, después de que la reescritura de plantillas compiladas se implementara (consulte docs/compiled-templates.html). Ambos son las compilaciones PGO que se distribuyen para Linux/macOS (el binario de lanzamiento y el wheel de PyPI; detalles abajo). pyevtx-rs está limitado por el marshaling de Python por registro (un dict por registro) en lugar del analizador, por lo que no ve la aceleración completa del núcleo. Las cifras restantes de competidores (libevtx, velocidex/evtx, golang-evtx, python-evtx) se trasladan sin cambios desde la ejecución de enero de 2026 en el mismo hardware — herramientas externas cuyo rendimiento no ha cambiado.
Libraries benched:
python-evtx(https://github.com/williballenthin/python-evtx) - Con CPython y PyPypyevtx-rs(https://github.com/omerbenamram/pyevtx-rs) / evtx(https://pypi.org/project/evtx/) - bindings de Python para esta bibliotecalibevtx(https://github.com/libyal/libevtx)golang-evtx(https://github.com/0xrawsec/golang-evtx.git) - solo JSON (usa multihilo)evtx(https://github.com/Velocidex/evtx) - solo JSON.evtx (Esta biblioteca)Nota: los números mostrados son mediciones de tiempo real (tiempo que tarda la invocación en completarse). Las mediciones de tiempo de usuario son más altas cuando se usa más multihilo/multiprocesamiento, debido a la sobrecarga de sincronización.
Con 8 hilos, evtx es más de 7000x más rápido que python-evtx al volcar logs xml.
El rendimiento ahora se satura alrededor de 8 hilos en esta muestra de 30MB: el análisis de un solo hilo se volvió lo suficientemente rápido (~3.8 veces más rápido que los números de enero de 2026, en la misma máquina) que 30MB ya no tiene suficiente trabajo para mantener ocupados los 24 núcleos lógicos — 24 hilos no es más rápido que 8 (ambos están dentro del ruido de medición, por lo que la tabla destaca la columna de 8 hilos como el punto de saturación). En ese punto, evtx es aproximadamente 65x más rápido que golang-evtx, que utiliza una estrategia de multihilo similar.
Los números anteriores provienen de una compilación guiada por perfil (./build_pgo.sh): entrena un binario instrumentado en el corpus de muestra, luego recompila con ese perfil. CI ejecuta esto para los binarios de lanzamiento de Linux (x86_64) y macOS, por lo que la tabla refleja el artefacto que la mayoría de la gente descarga (la salida es byte-idéntica a una compilación normal). PGO vale aproximadamente un 2–5% de rendimiento de un solo hilo en comparación con un cargo build --release --features fast-alloc simple (JSON 77.6 → 75 ms, XML 73.0 → 71 ms); con 8+ hilos la carga de trabajo está limitada por saturación, por lo que PGO allí está dentro del ruido de medición.
Si el analizador da error en alguno de estos nodos, no dudes en abrir un issue o enviarme un correo electrónico con una muestra.
Licenciado bajo cualquiera de
a tu elección.
A menos que indiques explícitamente lo contrario, cualquier contribución enviada intencionalmente para su inclusión en el trabajo por ti, según lo definido en la licencia Apache-2.0, se licenciará de forma dual como se indica arriba, sin términos ni condiciones adicionales.
| evtx (1 hilo) | evtx (8 hilos) | evtx (24 hilos) | libevtx (C) | velocidex/evtx (go) | golang-evtx (usa multiprocesamiento) | 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 ms | 20.7 ms ± 1.0 ms | 22.1 ms ± 1.7 ms | 2.439 s ± 0.035 s | No support | No support | 204.6 ms ± 5.7 ms | 2m41.075s (ran once) | 40.096s (ran once) |
| 30MB evtx (JSON) | 75.1 ms ± 2.1 ms | 20.5 ms ± 0.8 ms | 20.1 ms ± 0.9 ms | No support | 5.467 s ± 0.038 s | 1.344 s ± 0.005 s | 223.1 ms ± 4.7 ms | No support | No support |