본문 바로가기

보안/포렌식

Shortcut

출처 : https://msdn.microsoft.com/en-us/library/windows/desktop/cc144175(v=vs.85).aspx


레지스트리 상세 위치 : 


\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\[프로그램이름]\shell\open\command


유저가 파일과 같은 Shell 객체를 마우스 우클릭 했을 때 이 Shell은 shortcut 메뉴를 보여준다. 이 메뉴는 유저가 다양한 행동을 취할 수 있도록하는 명령어 목록으로 구성된다. 이러한 명령어들은 shortcut menu items 또는 verbs이라 한다. shortcut 메뉴는 커스터마이징될 수 있다.



1. 파일 시스템의 Shorcut Menus에대한 소개


shortcut 메뉴들은 대개 파일 관리를 위해 사용된다. Shell은 잘라내기, 복사와 같은 기본 명령어 집합을 제공하고 파일 또는 폴더와 같은 파일 시스템 객체를 위한 shortcut 메뉴를 보여준다. 다음의 예는 MyFile.xyz-ms 파일을 마우스 오른쪽 클릭했을 때 기본적으로 나타나는 shortcut 메뉴를 보여준다.




MyFile.xyz-ms에 대하여 기본적인 shortcut 메뉴가 보여지는 이유는 .xyz-ms가 등록된 파일 타입이 아니기 때문이다. 대조적으로 .txt는 등록된 파일 타입이다. 만약 .txt 파일을 마우스 우클릭한다면 열기, 인쇄, 편집과 같은 세가지의 추가적인 명령어가 포함된 shortcut 메뉴를 볼 수 있다. 




파일 타입에 대하여 shortcut 메뉴를 확장시키기 위해 각 명령어에 관한 레지스트리 엔트리를 생성해야만 한다. 

좀더 정교한 접근은 shortcut 메뉴 핸들러를 구성하는 것이다. 이를 통해 shortcut 메뉴를 file by file를 기반한 파일 타입으로 확장할 수 있다. 좀더 많은 정보를 위해서는 Creating Context Menu HandlersContext Menu Reference를 참고하길.



2. Shortcut 메뉴에 명령어들을 추가하기


Shortcut 메뉴 핸들러는 기존에 존재했던 shortcut 메뉴에 명령어들을 추가하는 파일 타입 핸들러이다. shotcut menu handler는 파일타입과 연관되어 있고 shortcut 메뉴가 클래스의 멤버로 보여질때마다 호출된다. Shell은 파일 타입이 shortcut 메뉴 핸들러와 연관되어 있는지를 보기 위해 레지스트리를 체크한다. 만약 그렇다면 쉘은 추가적인 shortcut 메뉴 항목을 위해 핸들러에게 쿼리를 날린다. 


Shortcut Menu verbs


shortcut menu에 대한 각 명령어는 그것의 verb로 레지스티에 식별되어 있다. 이러한 verb들은 애플리케이션이 실행될 때 ShellExecuteEx를 사용되는 것과 동일하다. 

verb는 관련된 명령어를 식별하기 위해 Shell에 의해 사용되는 간단한 텍스트 문자열이다. 각 verb는 배치 파일이나 console 창에서 명령어를 실행하기 위해 사용되는 명령어 문자열과 일치한다. 

예를들어 열기 verb는 정상적으로 파일을 열기 위해 프로그램을 실행한다. 이 명령어는 일반적으로 다음과 같이 보여진다.


"My Program.exe" "%1"


만약 어떤 명령어 문자열이 공백을 포함한다면 이것은 반드시 쌍따옴표로 묶여져 있어야 한다. 반대로 구성요소가 공백을 포함한다면 정확하게 파싱될 것이다. 예를 들어 "My Program.exe"은 애플리케이션이 적절하게 시작되지만 쌍따옴표 없이 My  Program.exe을 실행하면 시스템은 My를 실행하고 첫번째 아규먼트로 Program.exe를 실행할 것이다. 따라서 쌍다옴표로 "%1"과 같이 아규먼트들을 묶어주어야 한다. 



3. 임의 파일 타입을 다루는 애플리케이션 등록하기


특정 파일 타입에 관하여 shortcut menu item들을 정의하는 것은 관련된 애플리케이션이 파일타입의 한 멤버를 어떻게 open 할 것인지 구체화하는 것을 가능하게 한다. 별도로 유저는 관련되지 않는 파일 타입을 여는 애플리케이션을 사용할려고 시도할 때 개별적인 기본 절차를 등록할 수 있다. shortcut menu item들을 등록할 때와 동일한 방법으로 기본 절차(default procedure)를 등록한다.


shortcut menu item들을 정의하는 것에 대한 사제한 정보를 알고 싶으면 Creating Context Menu Handlers를 참고해라


기본 절차는 2가지를 목표로 한다. 하나는 애플리케이션이 임의의 파일 타입을 열는 방법에 대해 명확히 하는 것이다. 다른 목적은 shortcut menu item들과 icon과 같은 파일 타입의 다양한 특성들을 정의하는 것이다. 만약 사용자가 애플리케이션을 추가적인 파일 타입과 연관시키려면 그러한 분류는 이러한 특성들을 가져야만 한다. 추가적인 파일 타입이 이전에 또다른 애플리케이션과 연관되었다면 이러한 특성들은 원래의 것과 대체될 것이다.  기본절차를 등록하기 위해 같은 레지스트리 키를 애플리케이션의 ProgID에 생성된 레지스트리키와 같은 것을 애플리케이션의 HKEY_CLASSES_ROOT\Applications 서브키에 두면 된다. 또한 애플리케이션에게 친근한 이름(friendly name)을 시스템에 제공하기 위해 FriendlyAppName 값을 포함할 수 있다. FriendlyAppName의 value가 비어있다면 애플리케이션의 친근한 이름은 실행 파일로부터도 추출될 수 있다.


다음의 샘플 레지스트리 엔트리는 MyProgram.exe의 친근한 이름과 각각의 shortcut menu items를 정의하는 기본 절차를 설명한다. 명령어 문자열은 애플리케이션이 임의의 파일 타입을 열려고 할 때 이를 통지하기 위해 /a 플래그를 포함한다. 만약 DefaultIcon 서브키를 포함한다면 generic 아이콘을 사용해야만 한다.



HKEY_CLASSES_ROOT

   MyProgram.exe

      shell

         open

            command

               (Default) = C:\MyDir\MyProgram.exe /a "%1"

         print

            command

               (Default) = C:\MyDir\MyProgram.exe /a /p "%1"

         printto

            command

               (Default) = C:\MyDir\MyProgram.exe /a /p "%1" "%2"


'보안 > 포렌식' 카테고리의 다른 글

윈도우 악성코드 포렌식  (0) 2016.05.22
log2timeline(plaso) 사용방법  (1) 2016.05.22
[Sleuth Kit] fls - 이미지 파일 목록 추출  (0) 2015.11.02
프로세스 실행 횟수 확인  (0) 2015.08.20
Extensible Storage Engine  (0) 2015.07.06