Reflector 강좌 #1: 둘러보기

Reflector는 닷넷 기반 프로그램을 분석하는 종합적인 소프트웨어 검사 도구입니다. Reflector는 Lutz Roeder에 의해 개발되었고 지속적인 버전 업그레이드 결과 현재 메이저 버전 5라는 적지 않은 역사를 가지고 있습니다. 무엇보다도 Reflector가 인기있는 이유는 다른 유사한 유틸리티들 모두가 상용인것과는 대조적으로 Reflector는 처음부터 지금까지 프리웨어이기 때문이고 공개된 플러그인 개발 시스템을 지원하므로 나날이 인기가 오르고 있습니다.

Reflector를 처음 실행하면 다음과 같은 화면을 볼 수 있습니다.

사용자 삽입 이미지

기본 목록에서 사용할 어셈블리 그룹을 선택하는 대화 상자가 나타납니다. .NET Framework 1.1, 2.0, 3.0은 물론 PDA 및 스마트 폰을 위한 .NET Compact Framework 1.0, 2.0을 선택할 수 있습니다. 만약 Mono Framework가 설치되어있다면 여기에도 나타나게 됩니다.

Visual Studio .NET 2003을 사용 중이면 .NET Framework 1.1을 선택하시고, Visual Studio 2005만을 사용 중이면 .NET Framework 2.0을, Windows SDK 및 Orcas Extension Toolkit을 Visual Studio 2005 위에 설치했다면 .NET Framework 3.0을 선택하면 적당합니다.

여기서는 .NET Framework 3.0을 선택해보기로 합니다.

사용자 삽입 이미지
화면의 구성 요소들을 하나씩 나누어 살펴보도록 하겠습니다.

사용자 삽입 이미지
제목 표시줄 아래에 두 줄의 도구 모음을 볼 수 있습니다. File, View, Tools, Help는 메뉴 모음이며 여기에 Reflector의 주요 기능들이 모두 포함되어있습니다. 메뉴의 구성을 살펴보면 대략 다음과 같습니다.

사용자 삽입 이미지File – Open 메뉴: C#, VB.NET 등 닷넷 컴파일러로 컴파일한 EXE 또는 DLL 파일을 열거나 Reflector 어셈블리 목록 파일을 열어서 현재 목록에 추가합니다.

File – Open Cache 메뉴: Global Assembly Cache 및 Visual Studio .NET Assembly Cache에 등록된 어셈블리를 조회합니다. 주로 시스템에서 공용으로 사용하는 어셈블리들을 이곳에서 쉽게 찾을 수 있습니다.

File – Open List 메뉴: Reflector 프로그램이 직접 관리하는 리스트 목록을 보여주고 관리합니다. 이 메뉴를 사용하지 않고 Reflector를 처음 기능 그대로 사용하면 계속 “Default” 목록을 이용하는 것입니다.

File – Close 메뉴: 현재 목록에서 특정 어셈블리를 제거합니다. 여기에서 항목을 제거하더라도 실제로 제거되는 것은 아니며 단지 현재 Reflector 프로그램의 메모리로부터 해제하는 것일 뿐입니다.

File – Exit 메뉴: Reflector를 종료합니다.

사용자 삽입 이미지View – Bookmarks 메뉴: 특정 어셈블리의 특정 형식 (클래스, 구조체, 인터페이스, 나열 상수, 대리자 등) 안의 멤버를 북마크에 등록해두었을 경우 이 메뉴로 탐색할 수 있습니다.

View – Search 메뉴: 현재 열려있는 어셈블리들의 모든 형식과 멤버들을 검색합니다. 열려있는 어셈블리의 수와 형식, 멤버의 수에 비례하여 검색 소요 시간이 증가합니다.

View – Refresh 메뉴: 현재 열려있는 어셈블리들을 모두 다시 읽어들입니다.

View – Back 메뉴: 여러 멤버들을 탐색하였을 경우 탐색 기록이 Reflector에 의하여 자동으로 남게되는데, 이것을 기준으로 인터넷 브라우저에서처럼 현재 탐색 중인 멤버 이전에 보았던 멤버로 이동합니다.

View – Forward 메뉴: 여러 멤버들을 탐색하였을 경우 탐색 기록이 Reflector에 의하여 자동으로 남게되는데, 이것을 기준으로 인터넷 브라우저에서처럼 현재 탐색 중인 멤버 다음에 보았던 멤버로 이동합니다.

View – Add-Ins 메뉴: 추가 기능 관리자를 엽니다. 추가 기능에 대한 자세한 내용은 나중에 따로 살펴보기로 합니다.

View – Options 메뉴: Reflector의 동작 옵션을 설정합니다.

사용자 삽입 이미지Tools – Disassemble 메뉴: 형식명 위에서 이 메뉴를 선택하면 형식 안의 모든 멤버 및 하위 형식들을 현재 선택한 언어로 프로토타입으로 표기합니다. 특정 멤버 위에서 이 메뉴를 선택하면 특정 언어로 실제 소스 코드를 역 컴파일하여 표시합니다. 이 기능에 대해서는 나중에 따로 살펴보기로 하겠습니다.

Tools – Analyze 메뉴: 현재 선택한 항목을 기준으로 종속 관계 (현재 항목이 완전하기 위하여 필요한 다른 항목 – 또는 – 현재 항목이 다른 항목에 대하여 어떻게 사용되는가에 대한 분포)를 조사하고 어셈블리의 경우 관련된 어셈블리 및 해당 어셈블리가 참조하는 플랫폼 호출 멤버 (Win32 DLL에 대한 참조)들을 조사합니다.

Tools – Search Google 메뉴: 선택한 항목을 Google 검색 엔진의 키워드로 활용하여 검색을 시작합니다. 인터넷에 연결되어있어야 이 기능을 사용할 수 있습니다.

Tools – Search MSDN 메뉴: 선택한 항목을 MSDN Library 검색 엔진의 키워드로 활용하여 검색을 시작합니다. 인터넷에 연결되어있어야 이 기능을 사용할 수 있습니다.

사용자 삽입 이미지Help – Send Feedback 메뉴: 프로그램 개발자(?)에게 직접 프로그램에 대한 의견, 버그, 개선 사항을 보냅니다. 영어로 보내는 것이 합당하겠지요? 🙂

Help – Check for Updates 메뉴: Reflector의 최신 버전을 확인합니다. 최신 버전이 있으면 자동으로 업데이트까지 해줍니다. 이 메뉴를 이용하지 않더라도 프로그램을 시작하면 자동으로 검사합니다. (단, 인터넷에 연결되어있어야 합니다.)

Help – About .NET Reflector 메뉴: Reflector의 버전 정보 및 저작권 정보를 나타내는 대화 상자를 봅니다.

이어서 도구 모음들을 살펴보겠습니다.

사용자 삽입 이미지
메뉴에서 살펴본 기능들 중 몇 가지 자주 사용하는 기능들을 따로 내어놓은 것을 볼 수 있습니다. 뒤로 가기, 앞으로 가기, 어셈블리 추가, 새로 고침, 북마크 창 열기, 검색, 프로그램 옵션 설정, 피드백 보내기는 기본적으로 메뉴와 동일한 기능들입니다. 여기에 특이한 드롭다운 컨트롤 하나가 보이는데, 처음에는 “C#”으로 쓰여있는 드롭다운 컨트롤이 있을 것입니다. 펼쳐보면 아래와 같이 나타납니다.

사용자 삽입 이미지어떤 언어로 디스어셈블한 결과를 표현할 지를 나타내는 부분입니다. 보기에 편리한 언어를 선택하면 되는데 주로 C#을 선택하는 경우가 많습니다. IL은 MSIL을 의미하며 이것을 선택하고 디스어셈블을 시도하면 기본 유틸리티인 ildasm과 비슷하게 사용할 수 있습니다. C#, Visual Basic은 우리가 알고 사용하는 언어와 같습니다. 물론 VB는 VB.NET을 의미하겠지요. MC++은 Visual C++의 .NET 프로그래밍 확장을 의미하는데, Reflector는 MC++ 1.x의 문법을 기준으로 표현합니다. Delphi는 Delphi의 .NET 확장을 기반으로 표현하는 것을 의미합니다. (실제로 Delphi는 Win32 모드와 .NET 모드로 나뉘어져 있습니다.) Chrome은 Delphi와 유사하지만 원래의 Object Pascal에 더 가까운 언어입니다.

Reflector를 실제로 활용하는 모습은 다음과 같습니다.

사용자 삽입 이미지
다음 단원에서는 Reflector를 이용하여 디스어셈블하여 내용을 살펴보는 방법을 살펴보고 Analyze 기능의 활용 사례를 보기로 합니다.

댓글 남기기