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:
LECmdde 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/lnkinfode 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
.lnksospechosos. 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
.lnkpuede renderizar cualquier icono víaIconLocationindependientemente de lo que realmente lance. Truco de phishing clásico: un icono PDF sobre un destinocmd.exe. - No asumas que la extensión coincide. Windows oculta
.lnkpor defecto en Explorer, así queInvoice.pdf.lnkpareceInvoice.pdf. Inspecciona primero. - No subas a parsers en línea aleatorios. Un
.lnkfiltra 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
.lnkes parte de un caso mayor: Jumplist parser, Prefetch parser, parser de registro.