Saltar al contenido
← Volver al blog

¿Qué es un archivo .lnk de Windows?

· 3 min de lectura

Un .lnk es un Windows Shell Link, el pequeño archivo binario creado cuando "creas un acceso directo" a un programa, documento o carpeta. Parece trivial en Explorer. El binario es todo lo contrario. El formato está completamente especificado en [MS-SHLLINK], y una vez que has leído unos cuantos, empiezas a tratar los accesos directos como uno de los artefactos más informativos que produce Windows.

Qué hay dentro

El formato es una cabecera fija de 76 bytes seguida de una serie de secciones opcionales, cada una controlada por un bit en los LinkFlags de la cabecera. En el orden en que un parser las lee:

  • ShellLinkHeader, flags, los atributos NTFS del destino, tres marcas temporales FILETIME (creación, acceso, escritura del destino vistos cuando se creó el enlace), el comando show-window, el índice del icono y una tecla rápida.
  • LinkTargetIDList, la lista de ID de shell items que recorre el namespace de Explorer desde una carpeta raíz hasta el destino.
  • LinkInfo, VolumeID (tipo de unidad, serial, etiqueta), LocalBasePath y CommonNetworkRelativeLink si el destino vivía en un recurso compartido de red.
  • StringData, NAME_STRING, RELATIVE_PATH, WORKING_DIR, COMMAND_LINE_ARGUMENTS, ICON_LOCATION. Con prefijo de longitud en caracteres, ANSI o UTF-16LE dependiendo del flag IsUnicode.
  • ExtraData, bloques opcionales, cada uno con una firma de 4 bytes: EnvironmentVariableDataBlock, ConsoleDataBlock, TrackerDataBlock, SpecialFolderDataBlock, ConsoleFEDataBlock, DarwinDataBlock, IconEnvironmentDataBlock, ShimDataBlock, PropertyStoreDataBlock, KnownFolderDataBlock, VistaAndAboveIDListDataBlock.

El TrackerDataBlock es el famoso: lleva el nombre NetBIOS de la máquina de origen y un GUID "droid" cuyos últimos seis bytes son la dirección MAC de la máquina que creó el enlace. Ese único bloque es responsable de una larga lista de victorias públicas de atribución, incluyendo varios informes APT que nombraron la VM de build detrás de una campaña.

Por qué importa

Como un acceso directo registra dónde fue creado y a qué apuntaba, los archivos .lnk son un pilar del DFIR. Revelan unidades extraíbles, archivos eliminados, recursos compartidos de red y la máquina de origen, incluso después de que el destino haya desaparecido hace tiempo. Los tres FILETIMEs de la cabecera son una instantánea de los metadatos del destino en la creación del enlace; combinados con la propia entrada MFT del enlace, anclan tanto "cuándo el usuario vio el destino" como "cuándo el usuario escribió el enlace". Los accesos directos independientes viven por todas partes, Escritorio, Menú Inicio, %APPDATA%\Microsoft\Windows\Recent\, unidades extraíbles, y la misma estructura LNK también forma la carga útil de cada entrada en archivos Jumplist bajo Recent\AutomaticDestinations\ y Recent\CustomDestinations\.

Privacidad

El parser de este sitio es un crate Rust compilado a WebAssembly. El archivo se decodifica en tu navegador. Nunca cruza la red, nada se sube, sin telemetría. Eso importa porque un .lnk de un entorno real filtra el nombre de usuario, hostname NetBIOS, dirección MAC y rutas de documentos de la máquina que lo escribió, campos que generalmente no quieres que crucen una frontera de proveedor.

Lecturas adicionales