Skip to content

4104script blocksPSReadLinetranscripts

PowerShell Parser

Reconstruya Script Block Logging (evento 4104) desde el .evtx, lea el log clásico de PowerShell, el historial de PSReadLine y las transcripciones, y decodifique comandos codificados y ofuscación, todo en su navegador con WebAssembly. No se sube nada.

Suelte aquí logs, historial y transcripciones de PowerShell

Microsoft-Windows-PowerShell%4Operational.evtx y Windows PowerShell.evtx, ConsoleHost_history.txt y PowerShell_transcript.*.txt. Las carpetas y colecciones de triaje en ZIP (KAPE, Velociraptor) funcionan tal cual.

Un conjunto sintético de una intrusión ficticia, sin datos reales. Consejo: abra el evento 4104 marcado y use la vista de desofuscación de abajo.

100 % en el cliente: WebAssembly analiza los archivos en su navegador y nunca se suben. Nunca se ejecuta nada.

Cómo obtener sus datos

Guía completa de adquisición

Exporte los registros de eventos de PowerShell y copie el historial de PSReadLine y las transcripciones de todas las cuentas; después suelte el resultado aquí. En un equipo Windows en vivo tarda unos dos minutos.

  1. Exporte los logs y copie historial / transcripciones
  2. Suelte la carpeta o el ZIP aquí
  3. Analizado en su navegador, nunca se sube

Péguelo en Windows PowerShell ejecutado como administrador (unidad del sistema C:). Exporta los logs operativo y clásico de PowerShell (y el log de PowerShell 7 si existe) y luego copia el historial de PSReadLine y las transcripciones de todas las cuentas, conservando la ruta Users\<name>\ para atribuir cada uno.

PowerShell · Admin
New-Item -ItemType Directory -Force C:\triage\logs | Out-Null
wevtutil epl Microsoft-Windows-PowerShell/Operational "C:\triage\logs\Microsoft-Windows-PowerShell%4Operational.evtx" /ow:true
wevtutil epl "Windows PowerShell" "C:\triage\logs\Windows PowerShell.evtx" /ow:true
wevtutil epl PowerShellCore/Operational "C:\triage\logs\PowerShellCore%4Operational.evtx" /ow:true 2>$null
robocopy C:\Users C:\triage\Users *_history.txt PowerShell_transcript.*.txt /S /XJ /R:0 /W:0 /NP /NDL

Resultado: C:\triage\logs\*.evtx más C:\triage\Users\<user>\… con los archivos de historial y transcripción. Suelte aquí toda la carpeta C:\triage (arrástrela o use Elegir una carpeta).

¿Lo analiza en otro equipo? Empaquételo en un único ZIP con el tar.exe integrado en Windows 10 1803 y posteriores:

PowerShell / cmd
tar -a -c -f C:\triage\powershell.zip -C C:\triage logs Users

Puntos a tener en cuenta

  • Script Block Logging (4104) está desactivado por defecto hasta que se habilita por directiva; aun así, Windows registra con nivel Advertencia los bloques que considera sospechosos. El log clásico de Windows PowerShell y el historial de PSReadLine están activos por defecto.
  • El servicio EventLog mantiene los logs abiertos, por lo que una copia simple de archivos falla. Use wevtutil epl, KAPE o Velociraptor.
  • El historial de PSReadLine no tiene marcas de tiempo y puede ser semanas más antiguo que los logs; trate su orden como la única cronología y corrobórelo con los registros de eventos.
  • Las transcripciones registran la hora local del equipo sin zona horaria: anote la zona horaria de la máquina al correlacionarlas con los registros de eventos en UTC.

Vista de desofuscación

Pegue cualquier línea de comandos, cadena -EncodedCommand o bloque ofuscado. Se decodifica capa por capa (base64/UTF-16LE, gzip/deflate, códigos de carácter, concatenación, operador de formato, acentos graves) y se muestra como texto inerte: no se ejecuta nada.

Qué registran los logs de PowerShell

PowerShell genera varios rastros independientes. Script Block Logging (evento 4104, en el log Microsoft-Windows-PowerShell/Operational) registra el código realmente ejecutado: el texto del script desofuscado, dividido en varios eventos 4104 en el caso de bloques largos. El registro de módulos (4103) registra los detalles de ejecución de la canalización. El log clásico "Windows PowerShell" registra el ciclo de vida del motor y de los proveedores (400/403/600) y, con una directiva, la ejecución de la canalización (800).

Fuera de los registros de eventos, PSReadLine mantiene un historial en texto plano de todo lo escrito en una consola interactiva, y Start-Transcript (o la directiva de transcripción) escribe la transcripción completa de una sesión en un archivo de texto. En conjunto, constituyen uno de los registros más ricos de lo que un operador —o un intruso— hizo en un equipo Windows.

Dónde se almacena

  • C:\Windows\System32\winevt\Logs\Microsoft-Windows-PowerShell%4Operational.evtx — Script Block Logging (4104) y registro de módulos (4103).
  • C:\Windows\System32\winevt\Logs\Windows PowerShell.evtx — eventos clásicos de motor/proveedor/canalización (400/403/600/800).
  • C:\Users\<user>\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt — historial de comandos interactivos, por usuario.
  • C:\Users\<user>\Documents\PowerShell_transcript.<host>.<random>.<timestamp>.txt — transcripciones, si están habilitadas.

Por qué es importante en una investigación

  • Script Block Logging captura el código tal como lo vio PowerShell, por lo que un -EncodedCommand o un one-liner ofuscado queda registrado en su forma expandida; además, este analizador decodifica por usted las capas codificadas y comprimidas.
  • La reconstrucción de los 4104 por ScriptBlockId y MessageNumber/MessageTotal recompone los scripts largos que Windows dividió en muchos eventos y señala cualquier parte que falte.
  • El historial de PSReadLine y las transcripciones capturan actividad interactiva que puede no pasar nunca por un archivo de script, incluidos errores tipográficos y comandos abandonados.
  • Los hallazgos señalan download cradles, evasiones de AMSI/ETW, manipulación del registro y de Defender, evasión de la directiva de ejecución, ventanas ocultas, degradaciones del motor y ofuscación habitual, como pistas que verificar, no veredictos.

Limitaciones

  • Script Block Logging está desactivado por defecto; sin él quizá solo vea los bloques de nivel Advertencia que Windows marcó por su cuenta, además del log clásico y el historial.
  • El historial de PSReadLine no tiene marcas de tiempo: su orden es la única cronología y puede ser mucho más antiguo que los logs.
  • Las horas de las transcripciones son la hora local del equipo sin zona horaria; las de los registros de eventos están en UTC.
  • Los logs se sobrescriben y pueden borrarse; esta herramienta señala los comandos de borrado, pero no puede recuperar eventos ya eliminados.

Cómo obtener los archivos

  • Exporte los dos registros de eventos de PowerShell con wevtutil epl (o recopile todos los .evtx con KAPE / Velociraptor) y copie el historial de PSReadLine y las transcripciones de cada usuario.
  • El servicio EventLog mantiene los logs abiertos en un equipo en vivo, así que use una exportación en lugar de una copia simple.
  • Conserve la estructura de carpetas Users\<name>\ para que el historial y las transcripciones se atribuyan a la cuenta correcta.

Preguntas frecuentes

¿Se suben mis archivos a algún sitio?

No. El analizador, incluido el lector de .evtx, está escrito en Rust compilado a WebAssembly y se ejecuta en un Web Worker en su navegador. No existe ningún endpoint de subida y nunca se ejecuta nada de un script.

¿Decodifica -EncodedCommand y scripts ofuscados?

Sí. El -EncodedCommand en base64 se decodifica desde UTF-16LE, y las capas adicionales (cargas gzip/deflate, códigos [char], concatenación de cadenas, el operador de formato -f y el escape con acentos graves) se deshacen y se muestran como texto inerte. Nunca ejecuta el script.

¿Cómo reconstruye un bloque de script repartido en varios eventos?

Windows divide un bloque de script largo en varios eventos 4104 que comparten un ScriptBlockId, cada uno con MessageNumber de MessageTotal. El analizador agrupa por ScriptBlockId, ordena por MessageNumber, concatena el texto y señala cualquier parte que falte.

¿Y si Script Block Logging estaba desactivado?

Seguirá viendo el log clásico de Windows PowerShell (eventos de motor y canalización), el historial de PSReadLine y las transcripciones que haya. Windows también registra con nivel Advertencia los bloques de script que considera sospechosos aunque el registro completo esté desactivado, y también se capturan.

¿Qué archivos debo recopilar?

Microsoft-Windows-PowerShell%4Operational.evtx y Windows PowerShell.evtx de winevt\Logs, el ConsoleHost_history.txt de cada usuario y cualquier PowerShell_transcript.*.txt. La guía de recopilación integrada ofrece exportaciones con un solo comando.

Paso a paso: abra registros .evtx de PowerShell, el historial de PSReadLine y las transcripciones en un visor gratuito en el navegador, reconstruya los bloques de script, decodifique comandos codificados y exporte a CSV o JSON.
Cómo se estructuran las transcripciones de PowerShell, qué registra el encabezado, cómo funcionan las marcas de tiempo de los comandos con -IncludeInvocationHeader y cómo investigarlas.
Qué registra el archivo de historial de PSReadLine, dónde se encuentra, por qué no tiene marcas de tiempo y cómo usarlo (y cuáles son sus límites) en una investigación.