Aller au contenu
← Retour au blog

Qu'est-ce qu'un fichier .lnk Windows ?

· 3 min de lecture

Un .lnk est un Windows Shell Link, le petit fichier binaire créé lorsque vous "créez un raccourci" vers un programme, un document ou un dossier. Il paraît trivial dans Explorer. Le binaire est tout sauf trivial. Le format est entièrement spécifié dans [MS-SHLLINK], et une fois que vous en avez lu quelques-uns, vous commencez à traiter les raccourcis comme l'un des artefacts les plus informatifs que produit Windows.

Ce qu'il contient

Le format est un en-tête fixe de 76 octets suivi d'une série de sections optionnelles, chacune contrôlée par un bit dans les LinkFlags de l'en-tête. Dans l'ordre dans lequel un parser les lit :

  • ShellLinkHeader, drapeaux, les attributs NTFS de la cible, trois horodatages FILETIME (création, accès, écriture de la cible vus lors de la création du lien), la commande show-window, l'index de l'icône et un raccourci clavier.
  • LinkTargetIDList, la liste d'ID de shell items qui parcourt le namespace Explorer d'un dossier racine vers la cible.
  • LinkInfo, VolumeID (type de lecteur, serial, étiquette), LocalBasePath, et CommonNetworkRelativeLink si la cible vivait sur un partage réseau.
  • StringData, NAME_STRING, RELATIVE_PATH, WORKING_DIR, COMMAND_LINE_ARGUMENTS, ICON_LOCATION. Préfixés par leur longueur en caractères, ANSI ou UTF-16LE selon le drapeau IsUnicode.
  • ExtraData, blocs optionnels, chacun avec une signature de 4 octets : EnvironmentVariableDataBlock, ConsoleDataBlock, TrackerDataBlock, SpecialFolderDataBlock, ConsoleFEDataBlock, DarwinDataBlock, IconEnvironmentDataBlock, ShimDataBlock, PropertyStoreDataBlock, KnownFolderDataBlock, VistaAndAboveIDListDataBlock.

Le TrackerDataBlock est le célèbre : il porte le nom NetBIOS de la machine d'origine et un GUID "droid" dont les six derniers octets sont l'adresse MAC de la machine qui a créé le lien. Ce seul bloc est responsable d'une longue liste de victoires publiques d'attribution, y compris plusieurs rapports APT qui ont nommé la VM de build derrière une campagne.

Pourquoi cela compte

Parce qu'un raccourci enregistre où il a été créé et vers quoi il pointait, les fichiers .lnk sont un incontournable du DFIR. Ils révèlent les lecteurs amovibles, les fichiers supprimés, les partages réseau et la machine d'origine, même après que la cible a disparu depuis longtemps. Les trois FILETIMEs de l'en-tête sont un instantané des métadonnées de la cible à la création du lien ; combinés avec la propre entrée MFT du lien, ils épinglent à la fois "quand l'utilisateur a vu la cible" et "quand l'utilisateur a écrit le lien". Les raccourcis autonomes vivent partout, Bureau, Menu Démarrer, %APPDATA%\Microsoft\Windows\Recent\, lecteurs amovibles, et la même structure LNK forme aussi la charge utile de chaque entrée dans les fichiers Jumplist sous Recent\AutomaticDestinations\ et Recent\CustomDestinations\.

Confidentialité

Le parser sur ce site est un crate Rust compilé en WebAssembly. Le fichier est décodé dans votre navigateur. Il ne traverse jamais le réseau, rien n'est téléversé, pas de télémétrie. Cela compte parce qu'un .lnk d'un environnement réel divulgue le nom d'utilisateur, le hostname NetBIOS, l'adresse MAC et les chemins de documents de la machine qui l'a écrit, des champs que vous ne voulez généralement pas voir franchir une frontière de fournisseur.

Pour aller plus loin