brunch

매거진 Rnfwoa

You can make anything
by writing

C.S.Lewis

by Rnfwoa Jun 04. 2016

링크 파일 포맷 분석

링크 파일과 링크 파일 포맷에 대해서 알아보자

1. 링크 파일


Shell link나 shortcut로 불리는 Link 파일 구조체는 다른 데이터를 접근하는 데 필요한 정보를 포함하고 데이터이다. Shell Link Binary File Format은 확장자가 “.LNK”인 윈도우 파일의 포맷이다.

Shell Link는 보통 응용프로그램을 실행하거나 OLE(Object Linking and Embedding) 같은 시나리오를 linking을 제공하기 위해 사용되는 것뿐만 아니라 대상 파일에 대한 참조를 저장하는 기능을 필요한 애플리케이션에서 사용할 수도 있다.


2. 링크 파일 포맷


Shell Link Binary File Format은 다음과 같은 구조로 되어 있다.

표 2-1 Shell Link File Format


2.1 ShellLinkHeader


ShellLinkHeader 구조는 LinkTargerlDLIST, LinkInfo, StringData를 포함하고 있는 식별 정보, 타임스탬프, 선택적인 구조의 형태가 명시된 플래그를 포함한다.

표 2-2 ShellLinkHeader 구조

※ 참고 : LinkFlags, FileAttributes, HotKey Flag


ShellLinkHeader에서 ShowCommand의 Flag는 아래 표와 같다.

표 2-3 ShowCommand Flags


2.2 LnkTargertIDList


LinkTargetIDList 구조체는 대상의 링크를 명시하고 있다. 이 구조체는 ShellLinkHeader안에 HasLinkTargetIDList bit에 의해 지정된다.

표 2-4 LinkTargetIDList 구조

저장된 IDList 구조체는 itemID로 구성되어 있다.

표 2-5 IDList 구조

ItemID는 IDList 구조체의 단위이다. ItemID에 저장된 데이터는 선행 ItemID의 대상 공간에서의 위치에 대응하는 소스에 의해 정의된다. 이 데이터는 유일하게 고유 네임 스페이스의 해당 부분의 항목을 식별한다.

표 2-6 ItemID 구조


2.3 LinkInfo


LinkInfo 구조체는 대상 링크의 원본 위치를 찾지 못했을 때 해결하기 위한 필수적인 정보를 명시한다. 여기에는 링크가 생성되었을 때에 존재하는 대상이 저장된 볼륨과 매핑된 드라이브 문자 및 UNC(Universal Naming Convention) 형식의 경로가 저장된 볼륨에 대한 정보를 포함한다. LinkInfoHeader는 LinkInfoSize, LinkInfoHeaderSize, LinkInfoFlags, VolumeIDOffset, LocalBasePathOffset, CommonNetworkRelativeLinkOffset, CommonPathSuffixOffset, LocalBasePathOffsetUnicode, CommonPathSuffixOffsetUnicode이다. 아래에서 나오는 Offset은 LinkInfo 구조체의 시작에서부터의 offset을 나타낸다.

표 2-7 LinkInfo 구조

LinkInfo 구조체에서 LinkInfoFlags에 대한 자세한 내용은 아래 그림을 참고하면 된다.

그림 2-1 LinkInfoFlags 정보


2.3.1 VolumeID


VolumeID는 링크가 생성되었을 때 대상 링크가 있는 볼륨에 대한 정보를 명시한다. 원본 위치에 파일이 존재하지 않으면 링크를 유용하게 해결 위한 정보이다.

표 2-8 VolumeID 구조

DriveType의 대한 정보는 다음과 같다.

표 2-9 DriveType


2.3.2 CommonNetworkRelativeLink


CommonNetworkRelativeLink 구조체는 링크 대상이 연결된 드라이브명과 UNC path prefix를 포함한 저장된 네트워크 장소에 대한 정보를 명시한다.

표 2-10 CommonNetworkRelativeLink 구조
그림 2-2 CommonNetworkRelativeLinkFlags 관련 자료


2.4 StringData


StringData는 사용자 인터페이스와 경로 식별 정보를 전달하는 구조의 집합을 말한다. StringData에 들어가는 정보는 다음과 같다.

표 2-11 StringData 정보

StringData의 구조는 다음과 같다.

표 2 12 StringData 구조


2.5 ExtraData


Extra Data는 링크 대상에 대한 추가적인 정보를 나타내는 구조체 집합이다. 이 선택적 구조체는 기본 Shell Link Binary File Format에 추가된 extra data section에 존재할 수 있다.

표 2-13 EXTRA_DATA_BLOCK 종류
표 2-14 ExtraData 구조


2.5.1 ConsoleDataBlock


ConsoleDataBlock 구조체는 링크 대상이 콘솔 창에서 실행되는 응용프로그램을 지정하는 경우에 사용되는 표시 설정을 명시한다.

표 2 15 ConsoleDataBlock 구조
그림 2-3 FillAttributes 타입
그림 2-4 FontFamily 타입
그림 2-5 FontWeight 타입
그림 2-6 CursorSize 타입
그림 2-7 FullScreen Type


2.5.2 ConsoleFEDataBlock


ConsoleFEDataBlock 구조체는 링크 대상이 콘솔 창에서 실행되는 응용프로그램을 지정하는 경우에 텍스트를 보여주는 데 사용하는 코드 페이지를 명시한다.

표 2-16 ConsoleFEDataBlock 구조


2.5.3 DarwinDataBlock


DarwinDataBlock 구조체는 shell link가 동작할 때 응용프로그램을 설치하기 위해서 링크 대상 IDList 대신에 사용되는 응용프로그램 식별자를 명시한다.

표 2-17 DarwinDataBlock 구조


2.5.4 EnvironmentVariableDataBlock


EnvironmentVariableDataBlock 구조체는 링크 대상이 해당 환경 변수를 갖는 위치를 참조할 때 환경 변수 정보의 경로를 명시한다.

표 2-18 EnvironmentVariableDataBlock 구조


2.5.5 IconEnvironmentDataBlock


IconEnvironmentDataBlock 구조체는 아이콘에 경로를 명시한다.

표 2-19 IEnvironmentVariableDataBlock 구조


2.5.6 KnownFolderDataBlock


KnownFolderDataBlock 구조체는 알려진 폴더의 위치를 명시한다. 이 데이터는 링크가 로드될 때 링크 대상 IDList가 번역될 수 있도록 추적하는 알려진 폴더면 사용할 수 있다.

표 2-20 KnownFolderDataBlock 구조


2.5.7 PropertyStoreDataBlock


Shell link안에 extra data를 정장하기 위해서 응용프로그램을 사용되는 property의 집합을 명시한다.

표 2-21 PropertyStoreDataBlock 구조


2.5.8 ShimDataBlock


링크 대상이 활성화될 때 지정하는 shim의 이름을 명시한다.

표 2-22 ShimDataBlock 구조


2.5.9 SpecialFolderDataBlock


SpecialFolderDataBlock 구조체는 Special folder의 위치를 명시한다.  링크가 로드될 때 링크 대상 IDList가 번역될 수 있도록 추적하는 special folder이면 사용할 수 있다.

표 2-23 SpecialFolderDataBlock 구조


2.5.10 TrackerDataBlock


TrackerDataBlock 구조체는 링크가 resolve될 때 원래 위치에서 발견되지 않는 경우, 링크 대상을 resolve 하는 데 사용될 수 있는 데이터를 명시한다.

표 2-24 TrackerDataBlock 구조


2.5.11 VistaAndAboveIDListDataBlock


VistaAndAboveIDListDataBlock 구조체는 그것을 지원하는 플랫폼에 LinkTargetIDList구조체를 대신해 사용할 수 있는 대체적인 IDList를 명시한다.

표 2-25 VistaAndAboveIDListDataBlock 구조


3. Reference


[MS_SHELLLINK] : Shell Link Binary File Format

- https://msdn.microsoft.com/en-us/library/dd891294.aspx


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari