Web에서 Agent 실행하기(1) - Custom URI

2018. 9. 11. 20:00IT-개발/winapi 및 MFC

반응형


Web page를 방문했을때, PC의 특정 Application이 실행되도록 하는 방법은 다양하지만,


Custom URI 라는 거는 처음 본다. Custom URI에 대한 내용과 소개는 다른 분들이 너무 잘 정리해놓아서


ㅠ_ㅠ.. 이번에도 긁어다 놓습니다. 인생이 긁는 인생이네요. ㅋ


아래 내용보면 한마디로 이겁니다. OS의 Registry에 특정 EXE를 실행할 수 있도록 등록해 놓으면


Web page에서 해당 EXE를 실행해줄 수 있다~ 그런데, 이렇게 EXE를 실행시켜주려면, 당연히


1. 먼저 Registry에 등록해주는 프로그램(exe)가 있어야 겠죠? (관리자 권한 필요할 듯)


2. IE의 권한이 낮으므로 실행되는 exe가 권한이 똑같이 낮습니다. PC User에서 권한 상승동의를 받고


   권한을 높여서 실행하면 되겠죠? 그러나, 이도 귀찮으니 UAC를 끄고 사용할 수 있는 환경에 적접할 듯 합니다.


아무래도 위에 2번항목이 Custom URI가 ActiveX를 대체하는데 제일 걸림돌이 되는 항목인거 같네요.


그러나, 잘 생각해보면, 1번째 registry에 등록해주는 프로그램에서 모든 동작을 하는 Service 형태의 프로그램(A)을


실행해주고, Web page 방문시 A에게 실제적인 동작 명령을 주는 Custom URI 로 실행되는 exe하나만 위 1번 


EXE에서 배포해준다면 ActiveX 없이 하나의 프로그램을 설치하고는 특정 site 방문시 Application이 동작되게


할 수 있겠네요. 금융권이나 다른 인증 관련 application들이 ActiveX가 사라지면서 이렇게 동작하지 않나 생각해


봅니다. 인터넷 결재할때, 권한 상승 요구창 좀 제발 그만 띄웠으면... ㅠㅠ.. 


솔직히 거기에 회사 이름, 모듈이름등 보여줘봐야


이넘이 뭐하는 녀석인지 어떻게 알고 "확인" / "취소" 를 선택할 수 있겠어요??? 이건 아마도 MS가


모든 책임을 사용자에게 떠넘기려는 의도로 만든게 아닐까 싶기도 하고~ ㅜ_ㅜ.. 혼자만의 망상인가요?






(퍼옴 : http://nsinc.tistory.com/77)


인터넷을 하다가 URL 링크가 특정 어플리케이션과 연결되는 경우가 있다. 어떻게 이걸 구현했을까 정보를 찾아 여기에 정리하였다. 모두 URI Scheme를 통해서 구현하는 것이었고 구현도 생각보다 간단하다.

URI Scheme

URI는 특정 Resource에 대한 위치정보를 제공한다. 그래서 링크를 열었을 때 해당자원(HTML 문서, 이미지 등)을 찾아 내려받게 된다. 하지만 내려받은 후 해당자원이 어떤 유형이고 어떻게 처리할지는 어떻게 식별하는 것일까? 확장자로 식별할까? 여러 방법이 있겠지만 그중 하나가 바로 URI Scheme을 통한 식별이다. URI의 시작부터 ':'(콜론)까지의 정보가 URI Scheme이다.

  • http://www.naver.com : 여기서는 http가 URI Scheme이며 이 형태를 만나면 보통 브라우저와 연결되어 HTTP 문서가 해석된다.
  • ftp://file.mycompany.com : 여기서는 ftp가 URI Scheme이며 이 형태를 만나면 보통 FTP 프로그램과 연결되어 FTP처리를 수행한다.
  • kakaolink://sendurl?msg=helloworld : 여기서는 kakaolink가 URI Scheme이며 Custom URI Scheme이다. 시스템에서 Custom URI Scheme을 만나면 해당 Custom URI Scheme의 적합한 처리 방법이 있는지 찾아서 실행한다. (없으면 '알 수 없는 URI Scheme'라고 오류가 뜬다.)
    해당 Custom URI Scheme를 찾지 못한 Firefox Browser가 'The address wasn't understood' 라는 내용을 출력하고 있다

Official URI schemes

IANA(ICNN)에서 이미 여러 URI Scheme를 정의하고 관리하고 있다. http, mailto, magnet 외 다수가 있으며 상세 정보는 http://en.wikipedia.org/wiki/URI_scheme에서 확인할 수 있다.

Custom URI schemes

공식적으로 지정되고 관리되는 URI Scheme도 있지만 사용자가 직접 URI Scheme를 만들수도 있다. 대부분의 OS에서 URI Scheme을 직접 등록하고 설정할 수 있도록 지원하고 있으며 Andrond, iOS, Windows 등 시스템에 따라 각각 이를 등록하는 방법은 다르다.

사용자는 잘 모르겠지만 Software를 인스톨 할 때마다 각 Software들은 자신만의 URI Scheme를 시스템에 등록해 놓는다. 카카오톡을 깔면 kakaolink가.. Visual Studio 2012를 깔면 vstfs라는 URI Scheme가 시스템에 등록된다. 해당 URI Scheme이 포함된 URL을 사용자가 클릭하면 일반적으로 해당 어플리케이션으로 연결되는 방식으로 동작한다. 시스템에 등록되지 않은 URI Scheme이 포함된 링크를 클릭하면 알 수 없는 Scheme라고 메시지가 나타날 것이다.

Custom URI Scheme in Windows OS

Windows에서는 Registry를 편집함으로써 URI Scheme를 등록할 수 있다. 자세한 Custom URI Scheme의 구현 및 등록방법은 http://msdn.microsoft.com/en-us/library/aa767914%28VS.85%29.aspx#app_reg에서 확인할 수 있으며 몇가지 핵심 절차를 간단히 설명하면 아래와 같다.

  1. [Windows Key + R키]를 누른다. [실행] 창이 나타나면 [regedit]를 입력하여 레지스트리 편집기를 열자. [HKEY_CLASSES_ROOT]를 열어보면 시스템에 등록된 확장자 정보 또는 URI Scheme 정보들을 볼 수 있다.
  2. [HKEY_CLASSES_ROOT]의 하위에 [Key]를 추가하여 URI Scheme을 등록할 수 있다. 여기서 [Key]의 이름이 바로 스키마 명이 되게 된다.
  3. 여기서는 [test]라는 URI Scheme명칭을 등록해보도록 하겠다.

  4. 추가된 [Key]에 [String Value]를 추가하자.
  5. 이름은 [URL Protocol]으로 지정하고 값은 공백("")으로 그대로 남겨두면 된다. 이 [URL Protocol]을 통해서 시스템은 이 [Key]가 URI Scheme이라는 것을 식별하게 된다.

  6. 이제 URI Scheme를 통해 실행될 기능을 설정하기 위해 새로운 [Key]를 등록하자.
  7. [Key]의 이름은 [shell]로 지정하면 된다.
  8. 이제 실행될 동작에 해당하는 이름을 가진 [Key]를 하위에 추가하면 된다. 여기서는 프로그램을 실행하는 [open]이라는 [Key]를 [shell] 하위에 추가하도록 하겠다.

  9. [open]하위에 다시 [command] Key를 추가하고 [command] Key의 '(Default)' 항목을 더블클릭하자.

  10. [문자열 편집]창이 나타나면 값으로 실행할 Application을 지정하자. 여기선 경로 주위에 쌍따옴표를 붙여야 한다.

  11. 만약 프로그램 실행 시 매개변수를 넘기고 싶다면 Application Path 뒤에 한칸 뛰우고 "%1"을 추가하면(쌍따옴표 포함) URI값이 Application으로 전달되게 된다.
  12. 아래 그림과 같이 위에서 작성한 URI Scheme를 포함한 링크를 작성하여 테스트 해보자.
  13. 아래와 같이 위에서 지정한 Application이 잘 열리는 것을 확인할 수 있다.


Custom URI Scheme in iOS

iOS에서 Custom URI Scheme를 구현하는 방법은 iOS Developer Library에서 자세히 다르고 있으며 주소는 다음과 같다. 
http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/AdvancedAppTricks/AdvancedAppTricks.html#//apple_ref/doc/uid/TP40007072-CH7-SW50

기타 정보

  • 직접 URI Scheme를 등록하고 Application과 연동하는 방법은 일반적으로 99% 좋지 않은 방법이라고 하는 정보도 있는데 http://infomesh.net/2001/09/urischemes에서 확인할 수 있다. URI Scheme를 사용하면 반드시 무작위로 넘어오는 URI 정보를 엄격하게 처리해서 프로그램이 공격에 취약해지지 않도록 해야 한다고 한다. 그렇지 않으면 해커들이 공격대상으로 쉽게 삼을 수 있다.
  • 만약 동일한 URI Scheme를 이용하는 Application들이 있다면 어떻게 될까.. 그건 시스템마다 상황에 따라 다르지만 보통 중복된 것 중 하나의 Custom URI Scheme만 실행된다고 한다. 이를 막을 방법은 원칙적으로 없으며, 자신의 Application이 유명해져서 다른 Software들이 알아서 자신의 URI Scheme를 이를 피해가게 하는 것이 하나의 방법이라고들 이야기 한다..



출처: http://nsinc.tistory.com/77 [NakedStrength Inc.]




(좋은 Link : http://rainflys.tistory.com/211)