Reflector 강좌 #3: 리소스 분석 및 5.x 버전을 위한 다양한 플러그인

Reflector의 기능을 살펴보는 마지막 장으로 오늘은 Reflector의 리소스 분석 기능과 함께 5.x 버전부터 대폭 강화된 서드파티 플러그인들을 살펴보도록 하겠습니다. 닷넷 프레임워크 기반의 응용프로그램에서 리소스는 두 가지로 구분되는데, 하나는 기존의 Win32 리소스를 뜻하며 또 하나는 .NET Framework 전용 XML 리소스를 의미합니다.

Reflector가 인식하고 보여줄 수 있는 리소스는 .NET Framework 전용 XML 리소스 및 XML 리소스와 연결된 각종 데이터 파일들입니다. 닷넷 기반 프로그램이 가지고 있는 Win32 리소스를 보기 위해서는 우리가 종전에 알고 있던 방법을 그대로 사용할 수 있습니다. 즉, VIsual Studio .NET 버전의 IDE를 이용하여 해당 바이너리를 열거나 eXeScope, Resource Hacker 등의 유틸리티를 그대로 이용할 수 있습니다.

그리고 Reflector는 이미 컴파일되고 병합된 리소스를 역추적하는 기능만을 제공합니다. Visual Studio 외에 더 전문적인 컴파일 전의 XML Resource 편집기를 찾으신다면 Resourcer를 Lutz Roeder의 웹 사이트에서 같이 다운로드받으실 수 있습니다.

http://www.aisto.com/roeder/dotnet/Download.aspx?File=Resourcer

사용자 삽입 이미지

어셈블리 노드 밑의 자식 노드에 모듈 노드와 Resources 폴더 노드가 있습니다. 여기서 Resource 폴더 노드를 펼치면 이 어셈블리에 포함된 파일과 컴파일된 리소스 스크립트 파일을 보실 수 있습니다. mscorlib은 다국어 지원을 위해서 인코딩 테이블들을 리소스로 포함하고 있군요. 그리고 mscorlib.resources가 각종 메시지를 저장해놓은 테이블인듯 싶군요.

위에서 특정 항목을 더블 클릭하거나 Space 키를 누르면 데이터를 표시하게 됩니다. 분류할 수 없는 유형의 파일이면 자동으로 바이너리 뷰어가 열리게 되며, 지원되는 그림 파일 형식이면 그림을, 텍스트 파일이면 텍스트를, .resources 파일이면 이 파일의 내용을 출력해 주는 리스트 – 디테일 뷰를 보여줍니다.

그리고 리소스를 추출하고 싶을 때에는 해당 리소스 항목 위에서 오른쪽 버튼을 클릭하고 다음과 같이 메뉴를 선택하거나 – 또는 – 키보드의 F12키를 누릅니다.

사용자 삽입 이미지
이제 Reflector의 기본적인 기능들은 모두 살펴보았습니다. 하지만 Reflector를 더욱 강력하게 해 줄 플러그인들을 살펴보도록 하겠습니다. 이 문서를 작성하는 현재, Reflector 5.x 버전 이후부터는 Microsoft의 오픈 소스 프로젝트 호스팅 사이트인 Codeplex.com에 플러그인 컬렉션이 개설되어 품질높은 Reflector 플러그인들을 다운로드받을 수 있게 되었습니다.

http://www.codeplex.com/reflectoraddins

플러그 인을 하나 받았다면 플러그 인을 설치하기 위하여 보통 다음의 방법을 이용할 수 있습니다. 만약 플러그 인 자체에 내장 설치 프로그램이 있다면 이 프로그램을 직접 이용하여도 됩니다.

사용자 삽입 이미지웹 사이트에서 플러그 인을 다운로드받았을 때 DLL 파일이 한 개 – 또는 – 여러 개가 있다면 이 파일들을 찾기 쉬운 위치에 일단 저장하시면 됩니다. 그 다음에는 Reflector에서 View 메뉴를 클릭하고 옆의 메뉴처럼 항목을 선택하면 됩니다.

그 다음에는 아래와 같은 대화 상자가 나타나는데 여기서 Add버튼을 클릭하고 해당 플러그 인 DLL이 저장된 디렉터리를 지정하여 주시면 됩니다. 플러그 인을 등록한 후에 플러그 인을 사용하는 방법에 대해서는 플러그 인을 다운로드할 때 제공되었던 매뉴얼, 웹 사이트의 설명, 플러그 인 안의 자체 도움말을 참고하여야 합니다.

사용자 삽입 이미지
그리고 몇 가지 주목할만한 플러그인들이 있습니다. 꼭 설치하여 활용해 보시기를 권합니다.

사용자 삽입 이미지Code Model Viewer: MSIL 어셈블리 수준의 코드 모델에 따라 내용을 보여주는 확장 플러그 인으로 MSIL의 내용을 도식화하기에 매우 유리합니다.

사용자 삽입 이미지COM Loader: 시스템에 등록된 모든 COM 컴포넌트들을 대상으로하는 유틸리티이며 이 유틸리티로 특정 COM 컴포넌트를 .NET Framework 어셈블리로 변환하여 해당 어셈블리를 Reflector로 가져옵니다. 이 플러그인은 플랫폼 호출 기능을 사용하여 프로그램을 개발할 때 유용하게 사용 할 수 있습니다.사용자 삽입 이미지

C++ CIL Language: Reflector가 현재 제공하는 MC++은 .NET Framework 버전 1.0 및 1.1을 대상으로 한 것입니다. 최근에 발표된 Visual C++ 8.0의 MC++ 확장 문법으로 디스어셈블한 결과를 보기 원한다면 이 플러그인을 활용하면 됩니다.사용자 삽입 이미지

Deblector: Reflector를 Debugger 처럼 사용할 수 있게 해주며 동시에 프로세스 연결 기능 등을 구현해 주어 디버깅 작업을 간편하게 만들어주는 유틸리티입니다.

사용자 삽입 이미지
Diff: 서로 다른 버전의 어셈블리를 MSIL 수준에서 비교하는 유틸리티입니다. 이 유틸리티를 이용하면 이미 컴파일된 어셈블리들 사이의 차이점을 조사하거나 문제를 분석하는 데에 도움이 될 수 있습니다.

사용자 삽입 이미지Graph: 어셈블리 내의 클래스들 사이의 관계를 그래프로 도식화하여 출력하는 플러그인으로 현재는 UML과 관련이 없습니다만 향후 이 플러그인을 업그레이드하는 방향 – 또는 – 새로운 UML 플러그인이 등장할 것으로 기대됩니다.

사용자 삽입 이미지SQL 2005 Browser: Microsoft SQL Server 2005부터 새로 지원되는 기능인 .NET Framework를 이용한 SQL 서버 확장 프로시저 및 플러그인 개발에 맞춘 기능이며 이 플러그인을 사용하면 특정 SQL Server 2005 서버에 접속하여 저장된 .NET 어셈블리를 가져올 수 있습니다.

Reflector 강좌는 여기까지로 합니다. Reflector 플러그 인을 직접 개발하거나 활용하길 원하면 오픈 소스로 공개된 다른 플러그 인의 웹 사이트나 소스 코드를 참고하시면 되겠습니다.

댓글 남기기