Skip to content

macOS.logarchive · tracev3 · ndjson

Unified Log Parser

Decodifique los Unified Logs de macOS — tracev3 de un .logarchive o de un /private/var/db copiado — o abra exportaciones de log show; después filtre por subsistema, proceso y hora, haga triaje con preajustes DFIR y exporte. Funciona en su navegador con WebAssembly: no se sube nada.

Suelte un .logarchive, una carpeta diagnostics o una exportación de log show

Un paquete .logarchive o su ZIP, /private/var/db/diagnostics junto con /private/var/db/uuidtext, una recolección de UAC o Velociraptor (ZIP, tar.gz), o la salida de log show --style ndjson / json / default. Todo se decodifica en su dispositivo.

El ejemplo es sintético: una intrusión ficticia en el Mac FIN-MBP-03, el 14 de septiembre de 2026.

Decodificado en su navegador con WebAssembly — no se sube nada

Las entradas de Unified Log están en archivos binarios .tracev3, pero su texto no: las cadenas de formato están en los archivos uuidtext y dsc. Recolecte siempre ambos, más la carpeta timesync que convierte las horas. Un .logarchive los contiene todos.

  1. Recolecte un .logarchive o las carpetas diagnostics + uuidtext
  2. Suelte aquí el paquete, las carpetas o un ZIP / tar.gz
  3. Decodificado localmente — nada sale del navegador

En el Mac, en Terminal con una cuenta de administrador. log collect copia todo el almacén (tracev3, uuidtext, dsc, timesync) en un único .logarchive; ditto lo comprime para moverlo y calcular su hash como un solo archivo.

Terminal · admin
sudo log collect --output ~/Desktop/$(hostname -s).logarchive
ditto -c -k --keepParent ~/Desktop/$(hostname -s).logarchive ~/Desktop/$(hostname -s).logarchive.zip

Suelte la carpeta .logarchive (o el ZIP) en esta página.

Un tramo más pequeño de los últimos días (--last acepta m, h o d):

Terminal · admin
sudo log collect --last 3d --output ~/Desktop/$(hostname -s)_3d.logarchive

O copie el almacén en bruto sin la herramienta de Apple (conserva archivos que log collect no incluiría, como archivos Special antiguos). Copie ambas carpetas:

Terminal · admin
OUT=/Volumes/EVIDENCE/$(hostname -s)_ul
sudo mkdir -p "$OUT"
sudo ditto /private/var/db/diagnostics "$OUT/diagnostics"
sudo ditto /private/var/db/uuidtext "$OUT/uuidtext"

Trampas

  • Un .logarchive es una carpeta (un paquete de macOS): algunos selectores de archivos no pueden elegirlo. Arrástrelo a la página o comprímalo antes con ditto.
  • Los mensajes marcados <private> se ocultaron al registrarse; ningún analizador puede recuperarlos.
  • La redacción de los mensajes de Apple cambia entre versiones de macOS; una búsqueda que funciona en una versión puede perder eventos en otra.
  • Recolecte lo antes posible: el almacén rota y sudo log erase lo borra.

¿Qué son los Unified Logs de macOS?

Desde macOS 10.12 Sierra, el kernel, los daemons de Apple y cualquier app que use os_log escriben en un único sistema de registro. logd guarda las entradas en archivos binarios comprimidos .tracev3 bajo /private/var/db/diagnostics; el texto de cada mensaje se reconstruye a partir de una cadena de formato guardada en /private/var/db/uuidtext (por binario) o en los archivos dsc de la caché compartida, más los valores registrados con la entrada.

Para un investigador es el registro cronológico más rico de un Mac: inicios de sesión y sudo, decisiones de privacidad (TCC), Gatekeeper y XProtect, launchd e ítems de inicio, SSH y Compartir pantalla, montajes de discos — cada entrada con su proceso, PID, subsistema, categoría y una marca de tiempo al microsegundo.

Qué lee esta herramienta

  • Un .logarchive (de log collect o sysdiagnose), como carpeta o ZIP, o las carpetas en bruto diagnostics + uuidtext copiadas de un Mac o de una imagen de disco, incluidas las recolecciones de UAC (.tar.gz) y Velociraptor (ZIP).
  • Los bloques tracev3: cabecera, catálogo, chunksets comprimidos con LZ4, firehose (log, activity, trace, signpost, loss), cadenas oversize, statedump y simpledump; horas Mach relativas al arranque convertidas a UTC mediante los registros timesync (bases de tiempo de Intel y Apple silicon).
  • Cadenas de formato resueltas a través de los archivos uuidtext y dsc y mostradas como log show (conversiones printf, %{public}/%{private}, decodificadores errno, UUID y mask.hash).
  • Exportaciones de log show: --style ndjson y json (todos los campos), y los estilos de texto default, compact y syslog, mensajes multilínea incluidos.
  • Filtros por texto libre o expresión regular, tipo, proceso, subsistema, categoría y PID (con exclusiones), un intervalo de tiempo al segundo con franja de densidad, reglas de triaje DFIR y exportación a CSV, NDJSON (nombres de campo de log show), JSON y Timesketch.

Por qué importa en una investigación

  • Autenticación y privilegios: comandos y fallos de sudo, su, derechos de autorización, sesiones SSH y de Compartir pantalla, cuentas locales nuevas.
  • Evasión de defensas y persistencia: permisos TCC como el acceso total al disco para Terminal, excepciones de Gatekeeper, eliminación de la cuarentena, nuevos agentes y daemons de arranque, ítems de inicio y extensiones.
  • Contexto de exfiltración: volúmenes USB montados por DiskArbitration, actividad de red y de archivos en los mismos minutos.
  • Ancla de la cronología: las marcas de tiempo al microsegundo y los UUID de arranque alinean el resto de artefactos de macOS.

Límites a tener en cuenta

  • Los mensajes solo están completos si lo están los archivos de cadenas: sin uuidtext ni dsc el texto no puede reconstruirse (las entradas se marcan sin resolver). Sin timesync, las horas son aproximadas.
  • Los valores <private> se ocultaron al registrarse y no pueden recuperarse. La mayoría de los mensajes Info y Debug nunca se escriben en disco.
  • El almacén rota por tamaño y a menudo solo conserva días. La ausencia de entradas no prueba que no pasara nada.
  • La representación sigue al analizador de código abierto macos-unifiedlogs, validado aquí frente a log show (alrededor del 99 % de los mensajes log, activity y state idénticos); el texto de los signposts y algunos decodificadores de objetos difieren. Compruebe las entradas clave con log show antes de apoyarse en ellas en un informe.
  • Todo se guarda en la memoria del navegador: los almacenes muy grandes (varios millones de entradas) pueden requerir las opciones de importación para cargar solo una ventana de tiempo.

Cómo recolectarlos

  • En el Mac: sudo log collect --output equipo.logarchive (todo el almacén); después suelte el paquete o su ZIP.
  • Desde una imagen u otra herramienta: copie /private/var/db/diagnostics y /private/var/db/uuidtext con su estructura (UAC macos_unified_logs, mac_apt UNIFIEDLOGEXPORT, Velociraptor Generic.Collectors.File).
  • Si solo tiene la herramienta de Apple: log show --archive equipo.logarchive --info --debug --timezone UTC --style ndjson > equipo.ndjson.

Preguntas frecuentes

¿Se suben mis registros a algún sitio?

No. Los archivos los lee código WebAssembly que se ejecuta en un Web Worker de su navegador. No se envía nada a ningún servidor; al cerrar la pestaña se olvida todo.

¿Necesito un Mac para usarla?

No. El decodificador de tracev3 funciona en cualquier navegador moderno en Windows, Linux o macOS. Solo necesita los archivos: un .logarchive, o las carpetas diagnostics y uuidtext de un Mac o de una imagen de disco.

¿Por qué algunos mensajes están incompletos o marcados sin resolver?

El texto de una entrada procede de cadenas de formato guardadas en los archivos uuidtext y dsc. Si faltan en su recolección, o si la entrada apunta a una cadena que no contienen, el mensaje no puede reconstruirse por completo. Recolecte la carpeta uuidtext, o un .logarchive, que la incluye.

¿El resultado es idéntico al de log show?

Muy parecido, pero sin garantía. El decodificador se basa en el analizador de código abierto macos-unifiedlogs de Mandiant, con correcciones para ajustarse a log show (formato de números, UUID, errno y hashes enmascarados). En un archivo real, alrededor del 99 % de los mensajes coincidían exactamente con log show; los signposts y algunos tipos de objeto se muestran de otra forma. Como prueba, confirme las entradas importantes con log show.

¿En qué zona horaria están las horas?

Las entradas se convierten a UTC a partir de la hora Mach relativa al arranque mediante los registros timesync. El selector UTC / Local solo cambia la presentación; las exportaciones van siempre en UTC.

¿Qué tamaño de almacén puede manejar?

Varios millones de entradas, según la memoria de la pestaña del navegador. Para almacenes mayores, use las opciones de importación para conservar solo una ventana de tiempo u omitir signposts, Info o Debug durante la lectura.

¿Puede leer la salida de log show?

Sí: --style ndjson y json conservan todos los campos; los estilos de texto default, compact y syslog también funcionan, con menos detalle. Use --timezone UTC para que las horas no sean ambiguas (el estilo compact no incluye el desfase UTC).

¿Los hallazgos del triaje prueban un compromiso?

No. Son preajustes que señalan entradas que vale la pena leer (sudo, permisos TCC, excepciones de Gatekeeper, nuevos ítems de arranque, montajes USB…). Muchos son habituales en un Mac normal; júzguelos en su contexto.

Paso a paso: abra un .logarchive de macOS, una carpeta diagnostics o una exportación de log show en Unified Log Parser, revise hallazgos y exporte.
Recopile los registros unificados de macOS con log collect, una copia de diagnostics y uuidtext, UAC, Velociraptor o mac_apt, sin lagunas.
Exporte los registros unificados de macOS con log show (ndjson, json, texto), evite errores de zona horaria y construya cronologías CSV o Timesketch.