Skip to content

Marcas de tiempo PE: compilación, depuración y firma

Dónde guarda sus fechas un ejecutable de Windows, cuáles son fiables, cómo se delatan las compilaciones reproducibles y el timestomping, y cómo usarlas.

Publicado el 5 min de lectura

En resumen. Un archivo PE contiene varias fechas: el TimeDateStamp de COFF (la clásica «fecha de compilación»), copias de ese valor en los directorios de depuración y de exportaciones y, si está firmado, una fecha de firma. Ninguna es fiable por sí sola. Las compilaciones reproducibles sustituyen el valor por un hash; los atacantes lo ponen a cero, lo aleatorizan o lo copian. La coherencia entre las fechas es la señal útil.

Dónde están las fechas

FechaUbicaciónEscrita porNotas
Fecha de compilaciónTimeDateStamp de la cabecera COFFenlazadorsegundos Unix, UTC
Fecha de depuracióncada entrada IMAGE_DEBUG_DIRECTORYenlazadornormalmente igual a la fecha de compilación
Fecha de exportaciónTimeDateStamp del directorio de exportacionesenlazadorDLL; a menudo igual, a veces 0
Fecha de recursoscabeceras del directorio de recursoscompilador de recursosnormalmente 0
Fecha de firmaatributo firmado de Authenticode o token de sellado de tiempofirmante o autoridad de sellado de tiemposolo la fecha de la contrafirma / RFC 3161 está avalada

PE Parser las muestra todas en el resumen de cada archivo y permite filtrar una colección completa por fecha de compilación, de depuración o de firma.

Compilaciones reproducibles: cuando la marca de tiempo es un hash

Desde Windows 10, Microsoft compila gran parte del sistema operativo de forma que el mismo código fuente produzca los mismos bytes. El campo de la marca de tiempo contiene entonces un hash del contenido, y por eso los archivos del sistema muestran fechas a décadas de distancia. Raymond Chen lo explica en Why are the module timestamps in Windows 10 so nonsensical?. Estos binarios tienen una entrada del directorio de depuración de tipo 16, IMAGE_DEBUG_TYPE_REPRO. El SDK de .NET hace lo mismo de forma predeterminada con sus ensamblados.

PE Parser detecta la entrada REPRO, etiqueta el valor como hash y excluye el archivo del filtrado por fecha de compilación en lugar de situarlo en 2089.

Valores reveladores

  • 0: algunas cadenas de herramientas y muchos archivos manipulados. Mire las demás fechas.
  • 1992-06-19 22:22:17 UTC (0x2A425E19): el valor fijo que escribían los enlazadores antiguos de Borland Delphi; identifica la cadena de herramientas, no una fecha.
  • En el futuro (sin REPRO): editado a mano, falsificado o una máquina de compilación con el reloj mal configurado.
  • Anterior a 1995: inverosímil para un archivo PE; falsificado o aleatorio.
  • Fecha de compilación ≠ fecha de depuración en más de un día: una de las dos se editó; es un signo clásico de timestomping, porque las herramientas que parchean la cabecera suelen olvidar el directorio de depuración.
  • Firmado antes de compilado: imposible; una de las dos fechas es falsa.

Cómo usar las fechas en un caso

  1. Agrupar, no demostrar. Varias compilaciones de una herramienta con días de diferencia y un mismo imphash informan sobre el ciclo de desarrollo del atacante. La colección de ejemplo de PE Parser tiene dos compilaciones de m64.exe compiladas el 2026-09-03 y el 2026-09-12.
  2. Comparar con el equipo. Un binario compilado después de aparecer en el disco (según las fechas de primera aparición del sistema de archivos, Prefetch o Amcache) tiene una cabecera falsificada.
  3. Confiar sobre todo en la autoridad de sellado de tiempo. Un token RFC 3161 o una contrafirma los emite un tercero en el momento de la firma; el atributo signingTime del propio firmante no (Authenticode sin conexión).
  4. Anotar la zona horaria. Todas las fechas PE están en UTC. Preséntelas en UTC en los informes e indique la zona de cualquier conversión a hora local.

La barra de rango de tiempo de PE Parser trabaja con estos campos para un lote de archivos: elija el campo, ajuste Desde/Hasta al segundo o use «alrededor de esta fecha» ±5 min / ±1 h / ±24 h a partir de cualquier archivo, y todos los recuentos, listas y exportaciones siguen el rango. La guía del formato PE sitúa las fechas en el contexto de las demás cabeceras.

Preguntas frecuentes

¿Dónde está la fecha de compilación de un ejecutable de Windows?

En el campo TimeDateStamp de la cabecera de archivo COFF, como segundos desde el 1970-01-01 UTC. El enlazador suele escribir el mismo valor en las entradas del directorio de depuración y en el directorio de exportaciones.

¿Por qué algunos archivos de Windows tienen fechas de compilación futuras o muy antiguas?

Las cadenas de herramientas recientes de Microsoft y .NET compilan de forma reproducible y guardan un hash del contenido en el campo de la marca de tiempo en lugar de una fecha. Una entrada del directorio de depuración de tipo REPRO identifica esos archivos.

¿Se puede confiar en la marca de tiempo de compilación de un PE?

No por sí sola: es un campo simple que cualquiera puede editar. Compárela con las marcas de tiempo de depuración y de exportación, con la fecha de firma de una autoridad de sellado de tiempo y con las fechas del sistema de archivos del equipo.

Artículos relacionados

Triaje estático paso a paso de ejecutables de Windows con PE Parser, gratuito: cargue archivos o un ZIP, lea los indicadores, compare y exporte.
Cómo firma Authenticode un archivo PE, qué comprobaciones se pueden hacer solo con el archivo y por qué una firma válida no es una firma de confianza.
Lo que importa de un archivo PE al analizar un EXE, una DLL o un driver sospechoso: cabeceras, secciones, importaciones, recursos, firma y overlay.