Aller au contenu
← Retour au blog

Comment ouvrir un fichier .lnk (et lire ce qu'il contient)

· 4 min de lecture

Double-cliquer sur un .lnk exécute ce vers quoi il pointe. C'est très bien quand le raccourci est le vôtre et que vous faites confiance à la cible. C'est l'inverse de ce que vous voulez quand le raccourci est sorti d'un ZIP de phishing, d'une clé USB ou d'une pièce jointe d'email. Les quatre options ci-dessous ouvrent le .lnk lui-même, pas la cible.

Option 1 : collez-le dans le parser de ce site

La zone de dépôt sur la page d'accueil accepte tout .lnk. Le fichier est analysé par un crate Rust compilé en WebAssembly, dans votre navigateur. Rien n'est téléversé. Vous obtenez une vue structurée de chaque champ : bits du ShellLinkHeader, LinkFlags, LinkTargetIDList, le LinkInfo (avec VolumeID et LocalBasePath), les chaînes StringData (NAME_STRING, RELATIVE_PATH, WORKING_DIR, COMMAND_LINE_ARGUMENTS, ICON_LOCATION), et tous les blocs ExtraData. Le TrackerDataBlock, s'il est présent, expose le nom NetBIOS de la machine d'origine et le GUID droid dérivé de la MAC, des champs qui sont en or pour le triage mais des PII que vous ne voulez pas voir franchir une frontière de fournisseur.

Option 2 : PowerShell, pour une vérification locale rapide

PowerShell utilise le même résolveur COM shell qu'Explorer, donc sa vue correspond à ce qu'un double-clic montrerait, mais il s'arrête avant le lancement.

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

Ce que cela vous apporte est rapide et correspond au résolveur. Ce que cela ne vous apporte pas, ce sont les LinkFlags, les horodatages FILETIME dans l'en-tête, le parcours shell item de LinkTargetIDList, ou les blocs ExtraData. Pour un vrai regard DFIR, utilisez l'un des outils dédiés ci-dessous.

Option 3 : un visualiseur hex pour le test de reconnaissance

Si vous voulez juste confirmer qu'un fichier est un Shell Link, regardez les 20 premiers octets. Chaque .lnk conforme s'ouvre avec un HeaderSize de 4C 00 00 00 (76 little-endian) suivi du LinkCLSID 00021401-0000-0000-C000-000000000046. Tout le reste et ce n'est pas un vrai .lnk, quoi que prétende son extension. Utile quand vous suspectez qu'un fichier a été renommé .lnk pour en avoir l'apparence, ou quand un parser refuse de charger et que vous devez savoir pourquoi.

Option 4 : outils forensiques dédiés

Ceux que j'utilise réellement :

  • LECmd d'Eric Zimmerman, le standard de facto en DFIR. Ligne de commande, .NET, rapide, sortie CSV/JSON que les outils de timeline attendent. Le schéma de sortie est essentiellement le standard de la communauté.
  • liblnk / lnkinfo de libyal, l'équivalent Linux. Même spec MS-SHLLINK, langage différent. S'intègre aux pipelines shell.
  • lnkparse3, parser Shell Link pur Python. Pratique quand vous êtes déjà dans un notebook Python et voulez extraire des champs par programmation.
  • Windows-LNK-Parsing-Library (lcorbasson et compagnie), utile pour l'intégration au niveau code avec un outillage personnalisé.

Les quatre implémentent MS-SHLLINK. Ils sont d'accord sur l'ensemble des champs ; ils sont en désaccord sur le formatage de sortie et sur la rigueur concernant les octets réservés-doivent-être-zéro. Pour les plongées profondes où vous suspectez des octets fabriqués, exécutez-en deux et comparez les résultats.

Ce que vous ne devriez pas faire

  • Ne double-cliquez pas sur les fichiers .lnk suspects. C'est le vecteur d'attaque. Voir malware dans les fichiers LNK pour ce qui tend à se trouver à l'autre bout.
  • Ne faites pas confiance à l'icône. Un .lnk peut rendre n'importe quelle icône via IconLocation indépendamment de ce qu'il lance réellement. Astuce de phishing classique : une icône PDF sur une cible cmd.exe.
  • Ne supposez pas que l'extension correspond. Windows masque .lnk par défaut dans Explorer, donc Invoice.pdf.lnk ressemble à Invoice.pdf. Inspectez d'abord.
  • Ne téléversez pas vers des parsers en ligne aléatoires. Un .lnk divulgue votre nom NetBIOS et votre MAC. Un parser local navigateur ne le fait pas.

Si vous savez déjà ce que signifient les octets et voulez une visite de chaque champ, Qu'est-ce qu'un fichier .lnk Windows ? est la prochaine lecture. Pour l'extraction spécifique DFIR, voir analyse forensique des fichiers .lnk.

Pour aller plus loin

  • La spécification [MS-SHLLINK] de Microsoft sur Microsoft Learn, la référence faisant autorité.
  • Eric Zimmerman, LECmd, l'outil hors ligne.
  • libyal, liblnk, l'équivalent Linux.
  • Pour les artefacts corroborants lorsque un .lnk fait partie d'un cas plus large : parser Jumplist, parser Prefetch, parser de registre.