Saltar al contenido
← Volver al blog

Cómo abrir un archivo .lnk (y leer lo que hay dentro)

· 4 min de lectura

Hacer doble clic en un .lnk ejecuta lo que sea a lo que apunta. Eso está bien cuando el acceso directo es tuyo y confías en el destino. Es lo contrario de lo que quieres cuando el acceso directo salió de un ZIP de phishing, una memoria USB o un adjunto de email. Las cuatro opciones a continuación abren el .lnk en sí, no el destino.

Opción 1: pégalo en el parser de este sitio

La zona de soltar en la página de inicio acepta cualquier .lnk. El archivo es parseado por un crate Rust compilado a WebAssembly, en tu navegador. Nada se sube. Obtienes una vista estructurada de cada campo: bits del ShellLinkHeader, LinkFlags, LinkTargetIDList, el LinkInfo (con VolumeID y LocalBasePath), las cadenas StringData (NAME_STRING, RELATIVE_PATH, WORKING_DIR, COMMAND_LINE_ARGUMENTS, ICON_LOCATION) y cualquier bloque ExtraData. El TrackerDataBlock, si está presente, expone el nombre NetBIOS de la máquina de origen y el GUID droid derivado del MAC, campos que son oro para el triaje pero PII que no quieres que cruce una frontera de proveedor.

Opción 2: PowerShell, para una verificación local rápida

PowerShell usa el mismo resolvedor COM de shell que usa Explorer, así que su vista coincide con lo que mostraría hacer doble clic, pero se detiene antes de lanzar.

$ws = New-Object -ComObject WScript.Shell
$lnk = $ws.CreateShortcut("C:\path\to\file.lnk")
$lnk | Format-List TargetPath, Arguments, WorkingDirectory, IconLocation, WindowStyle, Description, Hotkey

Lo que esto te da es rápido y coincide con el resolvedor. Lo que no te da son los LinkFlags, las marcas temporales FILETIME en la cabecera, el recorrido shell item de LinkTargetIDList o los bloques ExtraData. Para una mirada DFIR real, usa una de las herramientas dedicadas a continuación.

Opción 3: un visor hexadecimal para la prueba olfativa

Si solo quieres confirmar que un archivo es un Shell Link, mira los primeros 20 bytes. Cada .lnk conforme se abre con un HeaderSize de 4C 00 00 00 (76 little-endian) seguido del LinkCLSID 00021401-0000-0000-C000-000000000046. Cualquier otra cosa y no es un .lnk real, sea lo que sea que afirme su extensión. Útil cuando sospechas que un archivo ha sido renombrado a .lnk para parecer uno, o cuando un parser se niega a cargar y necesitas saber por qué.

Opción 4: herramientas forenses dedicadas

Las que realmente uso:

  • LECmd de Eric Zimmerman, el estándar de facto en DFIR. Línea de comandos, .NET, rápido, salida CSV/JSON que las herramientas de timeline esperan. El esquema de salida es esencialmente el estándar de la comunidad.
  • liblnk / lnkinfo de libyal, el equivalente en Linux. Misma spec MS-SHLLINK, diferente lenguaje. Encaja en pipelines de shell.
  • lnkparse3, parser Shell Link puro Python. Conveniente cuando ya estás en un notebook Python y quieres extraer campos programáticamente.
  • Windows-LNK-Parsing-Library (lcorbasson y amigos), útil para integración a nivel de código con herramientas personalizadas.

Las cuatro implementan MS-SHLLINK. Coinciden en el conjunto de campos; discrepan en el formato de salida y en lo estrictos que son con los bytes reservados-deben-ser-cero. Para inmersiones profundas donde sospechas bytes manipulados, ejecuta dos de ellas y compara los resultados.

Lo que no deberías hacer

  • No hagas doble clic en archivos .lnk sospechosos. Ese es el vector de ataque. Consulta malware en archivos LNK para ver qué tiende a estar en el otro extremo.
  • No confíes en el icono. Un .lnk puede renderizar cualquier icono vía IconLocation independientemente de lo que realmente lance. Truco de phishing clásico: un icono PDF sobre un destino cmd.exe.
  • No asumas que la extensión coincide. Windows oculta .lnk por defecto en Explorer, así que Invoice.pdf.lnk parece Invoice.pdf. Inspecciona primero.
  • No subas a parsers en línea aleatorios. Un .lnk filtra tu nombre NetBIOS y MAC. Un parser local en el navegador no lo hace.

Si ya sabes lo que significan los bytes y quieres un recorrido por cada campo, ¿Qué es un archivo .lnk de Windows? es la siguiente lectura. Para extracción específica de DFIR, ver análisis forense de archivos .lnk.

Lecturas adicionales

  • La especificación [MS-SHLLINK] de Microsoft en Microsoft Learn, la referencia autoritativa.
  • Eric Zimmerman, LECmd, la herramienta offline.
  • libyal, liblnk, el equivalente en Linux.
  • Para artefactos corroborantes cuando un .lnk es parte de un caso mayor: Jumplist parser, Prefetch parser, parser de registro.