LNK 파일은 Windows 운영체제에서 특정 응용프로그램, 디렉터리, 파일, 문서 등을 참조하는 바로가기 파일이다. 일반적으로 "Windows Shortcut" 또는 "Shell Link"라고도 불린다. 이러한 링크 파일은 사용자가 직접 생성할 수도 있지만, 운영체제가 자동으로 생성하는 경우도 있다. 예를 들어, Windows를 설치하면 바탕화면에 "내 컴퓨터", "휴지통", "최근 문서" 등의 바로가기 파일이 기본적으로 생성된다.
LNK 파일은 디지털 포렌식에서 중요한 아티팩트로 활용된다. 사용자가 최근 접근한 파일과 폴더의 정보를 포함하고 있어 자료 유출 분석 및 사용자 활동 추적에 유용하다. 또한, 원본 파일이 로컬에서 삭제되었더라도 해당 파일과 관련된 LNK 파일이 남아 있는 경우가 많아, 삭제된 파일의 존재 여부를 확인하는 데 도움을 줄 수 있다.
LNK 파일은 아래와 같은 폴더에 저장된다.
- 바탕화면(Desktop) 폴더
- C:\Users\<user name>\Desktop
- 최근 문서(Recent) 폴더
- C:\Users\<user name>\AppData\Roaming\Microsoft\Windows\Recent
- 빠른 실행(QuickLaunch) 폴더
- C:\Users\<user name>\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch
링크 파일 분석으로 알 수 있는 정보는 아래와 같다.
- 원본 파일 시스템 경로
- 원본 파일과 LNK 파일 타임스탬프
- 원본 파일의 크기
- 원본 파일 속성(예: 읽기 전용, 숨김, 아카이브 등)
- 시스템 이름, 볼륨 이름, 볼륨 일련번호
- 로컬 또는 MAC 주소 대상이 저장된 원격 시스템에 저장 여부
LinkParser를 사용하면 GUI 형태로 링크 파일을 분석할 수 있다.
1. LNK File Structure
기본적으로 5개의 구조체로 이루어져 있는데, 각각의 Link File마다 다 다르게 존재한다.
- ShellLinkHeader(default): 기본적인 헤더로 식별정보, 시간 정보, 대상 파일 크기, 대상 파일 특성 등의 정보가 저장
- LinkTargetIDList(optional): ShellLinkHeader의 HasLinkTargetIDList 플래그가 설정되어 있을 때만 존재하는 구조로, 링크된 대상의 다양한 정보를 리스트 형태로 구성해 놓은 구조
- LinkInfo(optional): ShellLinkHeadr의 HasLinkInfo 플래그가 설정되어 있을 때만 존재하는 구조로, 링크 대상을 참조하기 위한 정보를 가진 구조
- StringData(optional): ShellLinkHeader에 관련된 플래그가 설정되어 있을 때만 존재하는 구조로, 링크 대상의 문자열 정보(이름, 상대 경로, 작업 디렉터리 등)를 저장하는 구조
- ExtraData(optional): 링크 대상의 화면 표시 정보, 문자열 코드 페이지, 환경 변수와 같은 추가적인 정보 저장을 위한 구조
2. ShellLinkHeader 구조
범위(Hex) | 크기(Byte) | 이름 | 설명 |
0x00 - 0x03 | 4 | HeaderSize | 헤더의 크기, 향상 0x4C(76) 값 |
0x04 - 0x13 | 16 | LinkCLSID | 클래스 식별자, 항상 0x4600000000000C0000000000021401 값 |
0x14 - 0x17 | 4 | LinkFlags | 링크 대상의 다양한 정보에 대한 플래그 |
0x18 - 0x1B | 4 | FileAttributes | 링크 대상의 파일 특성 정보 |
0x1C - 0x23 | 8 | CreationTime | 링크 대상의 생성 시각 |
0x24 - 0x2B | 8 | AccessTime | 링크 대상의 접근 시각 |
0x2C - 0x33 | 8 | WriteTime | 링크 대상의 쓰기 시각 |
0x34 - 0x37 | 4 | FileSize | 링크 대상의 크기 |
0x38 - 0x3B | 4 | IconIndex | 아이콘 인덱스 |
0x3C - 0x3F | 4 | Show Command | 링크가 실행될 때 응용프로그램의 동작 모드 |
0x40 - 0x41 | 2 | HotKey | 핫키 정보(응용 프로그램을 바로 실행하기 위한 키보드 조합) |
0x42 - 0x43 | 2 | Reserved 1 | 예약된 필드 (항상 0) |
0x44 - 0x47 | 4 | Reserved 2 | 예약된 필드 (항상 0) |
0x48 - 0x4B | 4 | Reserved 3 | 예약된 필드 (항상 0) |
3. LinkTargetIDList 구조
범위(Hex) | 크기(Byte) | 이름 | 설명 |
0x4C - 0x4D | 2 | IDListSize | ID List 크기 |
0x4E - 0xCD | 128 | IDListData | ID List 데이터 저장 |
4. LinkInfo 구조
범위(Hex) | 크기(Byte) | 이름 | 설명 |
0x00 - 0x03 | 4 | LnkInfoSize | LinkInfo 구조체 크기 |
0x04 - 0x07 | 4 | LnkInfoHeaderSize | LinkInfo Header Section 크기, 일반적으로 0x0000001C |
0x08 - 0x0B | 4 | LnkInfoFlags | LnkInfo 플래그 |
0x0C - 0x0F | 4 | VolumeIDOffset | Volume ID 위치 |
0x10 - 0x13 | 4 | LocalBasePathOffset | Local 경로 위치 |
0x14 - 0x17 | 4 | CommonNetworkRelativeLnkOffset | Network Volume Info 위치 |
0x18 - 0x1B | 4 | CommonPathSuffixOffset | CommonPathSuffix 위치 |
0x1C - 0x26 | 11 | Volume ID | Volume ID |
0x27 - 0x30 | 10 | LocalBasePath | Local 경로 |
0x31 - 0x31 | 1 | CommonPathSuffix | 링크 대상의 전체 경로를 구성하는 데 사용되는 페이지 |
0x32 - 0x35 | 4 | CommonNetworkRelativeLnkSize | Network Volume 크기 |
0x36 - 0x39 | 4 | CommonNetworkRelativeLnkFlags | Network Volume 플래그 |
0x3A - 0x3D | 4 | NewNameOffset | 유저 정보 위치 |
0x3E - 0x41 | 4 | DeviceNameOffset | 실제 파일 위치 |
0x42 - 0x45 | 4 | NetworkProviderType | 타입 |
0x46 - 0x55 | 16 | NetName | 유저 정보(가변적) |
0x56 - 0x81 | 44 | DeviceName | 실제 파일의 위치 경로(가변적) |
'Forensics > Windows Forensics' 카테고리의 다른 글
Thumbnail (0) | 2025.02.27 |
---|---|
점프 리스트 (0) | 2025.02.25 |
슈퍼패치 (0) | 2025.02.23 |
프리패치(Prefetch) (0) | 2025.02.23 |
Volume Shadow Copy (0) | 2025.02.23 |