C# Apps C# Obfuscation 난독화하기

2015.05.31 19:32

졸리운_곰 조회 수:686

 

 

C# Obfuscation 난독화하기

 

최근 회사 프로젝트에서 C# 어플리케이션을 obfuscate 하면서 알게 된 부분들을 정리한 포스트.

내 (얕은) 지식으로는 컴파일 언어는 “컴파일러를 통해 바이너리로 치환되서 컴파일된 결과물만 가지고 소스를 복구할 수 없다”고 알고 있었는데 현대 언어에서는 그게 그렇게 단순한 부분이 아닌 것 같다. C# 프로그램은 dll이든 exe든 디컴파일러를 통해 내부 구조를 볼 수 있다. 심지어 그런 디컴파일러가 불법적으로 암암리에 유포된다거나 하는 것이 아니라 무료로 공개되어 있기도 하고 다들 많이 사용하는 모양이다. (예를 들면, Jetbrain의 dotpeek.)

컴파일 언어인데 어떻게 가능하지

C# 왕초보라 정확한 설명인지는 잘 모르겠지만 이것저것 찾아서 읽어본 글에 따르면,

  • C#은 Common Language Runtime(CLR) 위에서 돌아가는 언어
  • CLR은 MS에서 Common Language Infrastructure(CLI)를 구현한 구현체
  • CLI 규격에 의해 C#도 메타데이터를 포함

C#의 경우 이 메타데이터가 가지는 장점으로 쉽게 reflection 가능한 구조로 되어 있고 이를 통해 어셈블리의 타입이나 멤버, 메소드, 심지어는 내부 로직까지도 들여다볼 수 있다고 한다.

좋은 일에 쓴다면 엄청난 효율을 만드는 장점이지만 내부 로직이 공개될 위험이 있다. 그래서 디컴파일을 방지할 수 있는가에 대한 답변을 SO에서 찾아봤는데 대부분 답변이 둘로 수렴했다. 하나는 obfuscate 난독화를 하는 것이고, 다른 하나는 PaaS로 서비스하라는 얘기였다. 현재 프로젝트는 장기적으로 PaaS로 가겠지만 일단은 전자의 방식을 사용하기로 결정했다.

C# 난독화

Obfuscation은 코드를 읽기 어렵게 만들어서 내부 로직을 쉽게 들여다볼 수 없게 만드는 과정이다. 메소드, 변수 등을 a, b, c 등으로 수정해서 무슨 로직으로 동작하는지 알아보기 어렵게 만드는 것이다. 목적은 다르지만 결과물로 보면 JavaScript에서 js minify 한 것과 비슷하다.

Obfuscate하는 도구는 시중에 엄청 많이 나와 있는데 Visual Studio 2012를 설치하면 포함되어 있는 Dotfuscator를 사용했다. Dotfuscator의 사용 방법은 파일 추가 > 결과물 위치 지정 > 실행, 3단계로 아주 단순하다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

01.15446515934_7a88773077_o.png

 

다만 Dotfuscator를 하게 되면 모든 클래스, 메소드 등 대부분의 명칭이 a, b, c 와 같이 변하기 때문에 문제가 되는 부분이 있을 수 있다. 가령 JSON을 사용하는 경우라면 Serialize 될 때 해당 멤버변수명을 그대로 사용해야 한다. 그런 경우 다음과 같이 attribute로 예외를 지정해주면 된다.

class PolicyContainer
{
    [Obfuscation(Feature = "renaming", Exclude = true)]
    public IList<POLICY> Policys;
...

위 attribute와 같이 작성하면 해당 변수는 obfuscate되지 않는다. ObfuscationAttribute Class에서 더 자세한 내용을 확인할 수 있다.

 

[출처] http://haruair.com/blog/2572

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
22 SQLite on Visual Studio with NuGet and Easy Instructions file 졸리운_곰 2016.08.11 329
21 Using SQLite in a Native Visual C++ Application 졸리운_곰 2016.08.11 276
20 How to: Ionic in Visual Studio 졸리운_곰 2016.05.09 594
19 Get started with Ionic apps in Visual Studio : 비주얼 스투이오로 모바일 앱 생성 ionic 프레임워크 졸리운_곰 2016.05.09 329
18 Build cross-platform apps with Xamarin in Visual Studio 졸리운_곰 2015.08.16 319
17 Visual C++를 사용하여 플랫폼 간 앱 제작 file 졸리운_곰 2015.08.16 645
16 Hooking 이란? file 졸리운_곰 2015.06.16 525
15 윈도우즈 후킹 기초 file 졸리운_곰 2015.06.16 318
14 윈도우 메시지 후킹 file 졸리운_곰 2015.06.16 2284
» C# Obfuscation 난독화하기 file 졸리운_곰 2015.05.31 686
12 [학습정리] 민대규님의 학습정리 프로그램 "대굴이의 학습정리" file 졸리운_곰 2015.05.11 445
11 [일정관리] 민대규님 제작 "대굴이의 일정관리" file 졸리운_곰 2015.05.11 1841
10 webdav c++ lib 라이브러러 file 졸리운_곰 2015.05.11 395
9 Use Visual Studio C++ 6.0 on Windows 8.1 64bit : 윈도우 8.1에서 비주얼 스투디오 6.0 사용하기 졸리운_곰 2015.05.09 632
8 Visual Studio 2013을 사용하여 앱 개발 file 졸리운_곰 2014.05.30 842
7 C++로 작성한 Windows 스토어 앱용 로드맵 file 졸리운_곰 2014.05.30 570
6 블로그 뷰어 앱 만들기(C++) file 졸리운_곰 2014.05.30 3956
5 C++ Windows 스토어 앱에서 파일 선택기 사용(자습서 4/4) file 졸리운_곰 2014.05.30 762
4 C++ Windows 스토어 앱에서 탐색 및 보기 추가(자습서 3/4) file 졸리운_곰 2014.05.30 594
3 C++ Windows 스토어 앱의 수명 주기 및 상태 관리(자습서 2/4) file 졸리운_곰 2014.05.30 496
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED