Windows 8의 Metro style app은 설치 과정과 실행 과정이 기존의 전통적인 desktop application과 사뭇 다릅니다. 하지만 Disk 어딘가에 저장되어 있는 것은 분명할 것이고, 이미 설치된 Metro style App들을 참고할 수 있다면 개발과정에 많은 도움이 될 것 같아서 조금 살펴보았습니다.
Metro Style App은 어떤 언어를 사용하여 개발되었는지에 따라 수행 모델이 조금 상이한데, 개발 언어에 따라 다음과 같이 분류해 볼 수 있겠습니다.
1. C++, XAML : native binary 생성
2. C#, XAML : managed binary 생성
3. Javascript, HTML : 추가로 코드를 생성하지 않고 javascript와 HTML을 그대로 packaging
1과 2의 경우는 실행파일(executable)이 생성되기 때문에, 이를 수행하면 상관이 없지만, 3번의 경우 적절한 surrogate process가 반드시 필요하겠지요. 이 경우 WWAHost.exe 가 그 역할을 담당하게 됩니다.
다음과 같이 한번 확인해 보시죠.
1. 기본으로 설치된 Metro style app 중 Finance를 수행합니다.
2. Desktop 으로 돌아와서 작업관리자(Task Manager)를 띄웁니다.
3. 오른쪽 마우스 버튼을 클릭하여 Go to Details를 누릅니다.

4. Details 탭으로 이동하게 되는데 다음과 같이 WWAHost.exe 가 선택됨을 알 수 있습니다.

5. WWAHost.exe 프로세스 내부를 살펴보기 위해서는 여러가지 도구를 활용할 수 있지만, 그 중 가장 간편한 Process Explorer(http://technet.microsoft.com/en-us/sysinternals/bb896653 ) 와 같은 도구를 이용해서 WWAHost(8140) Process를 살펴보면 다음과 같습니다.

예상하실 수 있는 바와 같이 jscript9.dll 파일이 load되어 있고, mshtml 등도 로드되어 있음을 알 수 있습니다.
사실 오늘 말씀드리고 싶었던 내용은 이미 설치된 파일의 내용을 한번 들여다 보고자 하는 것이기에 이 정도에서 Process Model은 각설하고, 좀더 아랫쪽으로 내려가 보도록 하죠.
Process Monitor(http://technet.microsoft.com/en-us/sysinternals/bb896645 )와 같은 도구를 이용하면 특정 프로세스가 접근하는 레지스트리나 파일 등등에 대해서 조목조목 그 내용을 살펴볼 수 있는데요, 이 도구를 이용하여 Metro style app들의 구동시에 동작 메커니즘을 쭉 따라가다 보면 Startup시에는 Registry에 집중적인 접근이 나타나고, 이후에 Program Files\WindowsApps 라는 폴더로 부터 Binary들에 접근함을 알 수 있습니다.
따라서 Metro App의 설치 과정이 이 폴더와 연관성이 있음을 단번에 알 수 있습니다. 이 폴더에 접근하기 위해서는 조금 까다로운 절차를 거쳐야 합니다. (권한설정 등의 정보를 변경하면 조금 쉽게 접근할 수 있지만 다시 rollback을 하는 것이 귀찮으므로 다른 방법으로 접근해 보죠.)
1. 명령창을 관리자 권한으로 엽니다.
2. Explorer.exe를 수행합니다.
3. 탐색기 탭의 View 에서 Hidden items를 check 하여 숨겨진 폴더를 살펴봅니다.

오호라, 일단 숨겨진 “WindowsApps” 폴더가 있음을 발견하셨지요?
4. 더블클릭 해도 폴더 내용이 보이지 않고 약간의 경고 창이 뜨면서 security tab을 이용해서 access 권한을 설정하라는 내용이 나타날 겁니다. 이 폴더의 소유권은 TruestedInstaller가 가지고 있는데, 소유권을 뺏어와서 내 맘대로 그 내용을 살펴 볼 수도 있겠지만 추후 작업이 귀찮아지므로 참기로 하고 대신 관리자 권한으로 띄웠던 명령창을 이용해 봅시다.
5. C:\Program Files\WindowsApps 폴더로 이동하여, dir을 해보면 여러 폴더가 보일텐데요, 이 중 Finance라는 Keyword를 가진 folder를 찾아보면 다음과 같은 결과가 나옵니다.

6. 이 중 version 정보가 1.0.1030.0 인 폴더로 이동한 다음 dir을 해보면

7. Finance App이 구성하고 있는 모든 파일들의 List를 살펴볼 수 있습니다.
8. 폴더 각각을 드려다 보면 html 파일과 javascript 들이 어떻게 작성되어 있는지 source level로 그대로 확인해 보실 수 있습니다.
Javascript/HTML은 source 자체가 packaging 되므로 위와 같이 쉽게 내용을 살펴보실 수 있지만, C#/XAML은 조금 다를 수 있습니다. 이번에는 C#/XAML 형태로 작성된 녀석들을 살펴보겠습니다.
Solitaire 같은 App이 대표적으로 C#을 이용하여 작성된 코드인데요(참고적으로 C#으로 DX를 사용하는 방법도 아시게 될겁니다.)
1. 절차는 위의 예와 거의 같습니다.

2. XAML 파일과 DLL 파일이 List에 보이는데 XAML 파일은 txt 파일이므로 그대로 내용을 살펴보실 수 있습니다.
3. dll 파일의 경우 managed dll 이므로 reflector(http://www.reflector.net/ )와 같은 도구를 이용해서 그 내용을 살펴보실 수 있습니다.

살펴보신 내용은 제발~~~~ 지구의 평화를 위해서 사용하여 주세요!!!
감사합니다.
몇몇분이 고맙게도 제 글을 읽어주시고 feedback을 보내주셨습니다. 대부분 소스코드의 공개에 대한 불안함을 피력해 주신 부분이었는데요.. 다음과 같이 정리하면 될 것 같습니다.
1. html/js는 소스코드를 볼 수 없었던 적이 단 한번도 없습니다.
브라우져에서 오른쪽 마우스를 막는 등의 유치한 방법 정도가 있었지만 마음먹으면 몇초 이내로 내용을 다 볼 수 있습니다.
2. Managed Code(C#/VB) 등의 reflection 기술은 이미 오래되고 성숙된 기술입니다.
기존에 Managed Code로 개발된 모든 binary는 소개해 드린 것과 같은 reflection tool을 이용해서 얼마 던지 볼 수 있었습니다.
3. C/C++ native : 이쪽은 그나마 내용을 쉽게 확인 할 수 없지만, 머리속에서 assembly-->C++로의 reversing을 하는 사람들이 얼마던지 있습니다.
상기 1,2번의 문제점을 보완하기 위해서 스크램블링(난독처리)하는 도구들이 일부 나와 있고, 이 경우 코드를 상당히 어렵게 변경하기 때문에 코드를 읽기가 매우 매우 어려워집니다.
결과적으로, Metro Style App이라고 해서 이전보다 보안이 더욱 취약해서져서 내용이 모두 공개되는 것은 아니며, 기존과 동일 수준이 그대로 유지되고 있다고 보시는 편이 적절합니다. 제 글이 약간 충격적이셨다면 그것은 기존에 이러한 방법을 몰랐기 때문이지 더 나빠진 것은 절대로! 아닙니다.
감사합니다.
공유하기 버튼
|
|








최근 덧글