Skip to content

Análisis forense de archivos .job en C:\Windows\Tasks

Cómo leer los archivos .job heredados: secciones fija y variable de MS-TSCH, desencadenadores, la última ejecución en SYSTEMTIME local y su presencia en Windows actual.

Publicado el 6 min de lectura

Resumen. Los archivos .job son el formato del Programador de tareas 1.0 y se guardan en C:\Windows\Tasks. Microsoft los especifica en MS-TSCH: una sección fija de 68 bytes (versiones, UUID del job, prioridad, estado, flags, hora de última ejecución como SYSTEMTIME) y una sección variable (comando, parámetros, directorio de trabajo, autor, comentario, desencadenadores). Son poco frecuentes en Windows moderno, y precisamente por eso merece atención que aparezca uno.

Este artículo forma parte de la serie de fundamentos que empieza con la guía de análisis forense de tareas programadas.

De dónde salen los archivos .job

ÉpocaAlmacén principal de tareasArchivos .job
Windows 2000, XP, Server 2003C:\Windows\Tasks\*.jobTodas las tareas
Vista, 7, Server 2008 (R2)XML en System32\Tasks + TaskCacheLas tareas creadas mediante la API 1.0 o at.exe también pueden tener un .job por compatibilidad
Windows 8 y posterioresXML + TaskCachePoco habituales; at.exe está obsoleto en favor de schtasks

El resumen de Cyber Triage describe la misma evolución. En un equipo con Windows 10 u 11, un archivo .job indica por tanto una de estas situaciones: una aplicación muy antigua que sigue usando la interfaz 1.0, un resto de una actualización in situ o el uso deliberado de herramientas heredadas. Ninguna es maliciosa por sí misma; todas merecen una explicación.

El target ScheduledTasks de KapeFiles recopila C:\Windows\Tasks\*.job y su equivalente en Windows.old, junto con SchedLgU.txt, el registro de texto del programador 1.0.

La sección de longitud fija

MS-TSCH la llama FIXDLEN_DATA. La documentación del formato Job de libyal la describe con 68 bytes:

DesplazamientoTamañoCampoUso forense
02Versión del productoSistema operativo que escribió el archivo (p. ej. 0x0501 XP, 0x0600 Vista, 0x0a00 Windows 10)
22Versión del formato de archivo
416UUID del jobÚnico para cada job
202Desplazamiento del nombre de aplicaciónDónde empieza la sección variable
222Desplazamiento de los desencadenadores
244Número de reintentos tras error e intervalo
284Plazo y espera de inactividad
324Clase de prioridadNormal, alta, inactiva, tiempo real
364Tiempo máximo de ejecución (ms)
404Código de salidaÚltimo código de salida del programa
444EstadoLista, en ejecución, deshabilitada, no se ha ejecutado...
484FlagsIncluye los bits de deshabilitada y oculta
5216Hora de última ejecuciónSYSTEMTIME

La versión del producto sirve para comprobar rápidamente la procedencia: un archivo .job en un equipo con Windows 10 cuya versión de producto indica XP probablemente se copió desde otro sitio en lugar de crearse localmente.

La hora de última ejecución

La hora de última ejecución es un SYSTEMTIME (año, mes, día de la semana, día, hora, minuto, segundo, milisegundo), no un FILETIME. No lleva zona horaria. En general se trata como hora local, y la documentación de libyal indica expresamente que esto está pendiente de confirmar. Anótela tal como está almacenada, explicite la suposición y corrobórela con otra fuente antes de construir una cronología sobre ella. Un valor cero significa que el job nunca se ha ejecutado.

La sección de longitud variable

Tras la sección fija vienen, en este orden:

  1. Número de instancias en ejecución.
  2. Nombre de la aplicación (el comando), en UTF-16 precedido de su longitud.
  3. Parámetros.
  4. Directorio de trabajo.
  5. Autor.
  6. Comentario.
  7. Datos de usuario y datos reservados (blobs opacos).
  8. Desencadenadores: un recuento y después registros de desencadenador de tamaño fijo con fecha de inicio, fecha de fin, hora de inicio, duración, intervalo, flags y un tipo (una vez, diario, semanal, mensual, en inactividad, al iniciar, al iniciar sesión).
  9. Opcionalmente, una firma del job.

Los desencadenadores guardan las fechas como palabras separadas de año, mes y día, sin zona horaria. La misma advertencia que antes: hora local por convención.

Leer un archivo .job en la práctica

Esto es lo que el Scheduled Tasks Parser extrae de cada archivo .job: el comando, los parámetros, el directorio de trabajo, el autor, el comentario, los flags (deshabilitada, oculta), el estado, el código de salida, los desencadenadores con sus fechas de inicio y fin, y la hora de última ejecución tal como está almacenada, etiquetada como local. Las filas .job aparecen junto a las tareas XML y de TaskCache, y se marcan como acciones heredadas para que destaquen en un sistema moderno.

Preguntas que conviene hacerse ante cada archivo:

  • ¿El comando está en una ruta en la que el usuario puede escribir? La misma regla que para las tareas XML; consulte detectar tareas programadas maliciosas.
  • ¿El autor corresponde a una cuenta real? Igual que el Author del XML, es texto libre.
  • ¿Hay una tarea XML equivalente? En Vista y 7, un job registrado a través de la capa de compatibilidad debería tenerla. Un .job sin XML ni entrada en TaskCache no lo registró el servicio actual, o se limpió solo en parte.
  • ¿Concuerdan las marcas de tiempo del sistema de archivos? Las horas $MFT del archivo .job, y de la propia carpeta C:\Windows\Tasks, acotan su creación y su última modificación. El programador actualiza el archivo cuando el job se ejecuta, así que la hora de modificación suele seguir a la de última ejecución. Un diario USN puede mostrar cuándo se creó o se borró el archivo.

Herramientas heredadas y detecciones modernas

at.exe sigue existiendo en las versiones actuales de Windows por compatibilidad con versiones anteriores, pero está obsoleto; Microsoft remite a schtasks en su lugar. Encontrar at.exe en las evidencias de ejecución de procesos (Prefetch, Amcache) en una estación de trabajo moderna es poco habitual, y debería llevarle a revisar C:\Windows\Tasks y TaskCache en busca de nombres de tarea del tipo At1.

Preguntas frecuentes

¿Qué es un archivo .job?

Un archivo binario de tarea programada que usa el Programador de tareas 1.0, almacenado en C:\Windows\Tasks. Microsoft documenta el formato en MS-TSCH como una sección de longitud fija seguida de una sección de longitud variable con el comando, los argumentos, el autor, el comentario y los desencadenadores.

¿Siguen usando Windows 10 y 11 archivos .job?

Rara vez. Las tareas modernas son XML más TaskCache. Aun así, puede aparecer un archivo .job en tareas registradas mediante las interfaces heredadas del Programador de tareas 1.0 o el comando at, ya obsoleto, y en sistemas actualizados desde versiones antiguas. Recopile C:\Windows\Tasks de todos modos.

¿La hora de última ejecución de un archivo .job está en UTC?

Se almacena como una estructura SYSTEMTIME sin información de zona horaria y en general se entiende que es hora local. La documentación de libyal todavía lo marca como pendiente de confirmar, así que corrobórelo antes de basarse en ello.

Artículos relacionados

Paso a paso: cargue XML de tareas, archivos .job y el hive SOFTWARE en un parser gratuito en el navegador, lea tareas ocultas, ajuste la zona horaria y exporte.
Lista práctica para detectar tareas programadas maliciosas: rutas escribibles, PowerShell codificado, LOLBins, SYSTEM, tareas ocultas y discrepancias XML/registro.
Qué guarda la clave TaskCache de SOFTWARE para cada tarea programada: Id/Index/SD de Tree, valores de Tasks, DynamicInfo, blobs Actions y Triggers, y el Hash.