상세 컨텐츠

본문 제목

Dotfuscator Community Edition (닷넷 어셈블리 난독화)

.Net General

by 탑~! 2010. 1. 20. 16:24

본문


C# 등의 닷넷계열의 언어를 이용해서 프로그래밍을 하면 어셈블리를 이용해 리버스 엔지니어링이 매우 쉽게 됩니다.

실제로 .NET Reflector 등을 사용해보면 어셈블리에서 원본코드와 거의 동일한 소스코드도 뽑아낼 수 있습니다.

이런 것을 방지하기 위한 것이 난독화인데 여러가지 방법 중에 간단한 것은 메소드명, 변수명 등을 a, b, c 등 의미없는 단어로 변경하는 방법입니다.

이런 난독화를 하는 프로그램이 몇개 있지만 Visual Studio를 설치하면 "Dotfuscator Community Edition"이 같이 설치되서 사용할 수 있습니다.(Community Edition으로 기능상에 제약이 있습니다.)


아래 예제에서는 별다른 옵션을 주지 않고 기본설정만을 이용한 간단한 사용법을 알아보겠습니다.

실행 방법은 Visual Studio의 도구메뉴에서 "Dotfuscator Community Edition"를 클릭하시면 됩니다.(시작메뉴에서도 실행은 가능하지만 Visual Studio가 실행이 되있어야 실행이 됩니다.)

프로그램을 실행하면 등록과 관련된 창이 뜨는데 일단 무시하시고, 실행이 완료되면 'Input' 탭에서 열기 아이콘을 이용해서 난독화를 수행할 파일을 선택해 줍니다.

파일 추가 후에 File메뉴나 툴바의 저장버튼을 이용해서 적당한 폴더에 프로젝트를 저장합니다.
(이때 설정한 폴더경로는 결과물이 저장될 경로이기도 합니다.)


그 다음에는 'Build' 탭으로 이동해서 'Build' 버튼을 클릭함으로써 난독화를 시작합니다.
(Directory 그룹박스 설정을 통해 결과물이 저장될 경로 변경가능합니다.)


Build가 완료되면 결과가 나옵니다. 뭐 대충 메소드명이나 필드명 등을 전체 몇개 중 몇개를 바꿨다는 내용으로 나오네요...


결과 확인을 위해 'Output' 탭으로 이동하면 아래 화면처럼 Program클래스, Main메소드, Sum메소드의 이름이 각각 'a'로 변경된 것을 알수 있습니다.
(실제 결과물은 위에서 프로젝트 저장 폴더로 지정한 경로에 가면 있습니다.)


다음은 위에서 작업한 파일의 원본 소스의 일부와 난독화한 파일을 .NET Reflector로 봤을 때 어떻게 변경됐는지를 보여줍니다.

Sum메소드명이 a로 변경되었고, Sum메소드의 매개변수인 var1, var2 각각이 A_0, A_1로 변경되었습니다.

예제에서는 소스코드가 단순해서 난독화 결과를 보고도 분석이 가능하지만 소스코드가 복잡했다면 의미없는 메소드명과 변수명등으로 도배가 된 코드를 분석하기는 어려울 것입니다.

▣ 소스코드
01 class Program
02 {
03     static void Main(string[] args)
04     {
05         string str = "Test Message";
06         Console.WriteLine(str);
07   
08         Console.WriteLine(Sum(10, 20));
09     }
10   
11     static int Sum(int var1, int var2)
12     {
13         return var1 + var2;
14     }
15 }

▣ .NET Reflector 결과화면


더 많은 기능이나 자세한 옵션 등은 아래 MSDN 페이지를 참조바랍니다.

'.Net General' 카테고리의 다른 글

예제로 보는 .Net 명명 규칙  (0) 2011.02.22
Visual Studio 2010 and .NET Framework 4 Beta 2  (0) 2010.02.22
프로젝트 템플릿 만들기  (0) 2009.07.16
GAC Assembly 파일 탐색  (0) 2009.04.30
CopySourceHtml v3.0  (0) 2009.04.30

관련글 더보기