.NET Framework/BUNDLE2010. 11. 30. 03:33
 회차
[.NET] Code Securit(Spear and Shield) : 01. DisAssembler
[.NET] Code Securit(Spear and Shield) : 02. Obfuscation

[.NET] Code Securit(Spear and Shield) : 03. Dotfuscator Program Comparison #1
[.NET] Code Securit(Spear and Shield) : 04. Dotfuscator Program Comparison #2
[.NET] Code Securit(Spear and Shield) : 05. Obfuscation Design Tip And Notabilia
[.NET] Code Securit(Spear and Shield) : 06. Security Tools : Strong Name Tool
03| 코드 보안(창과 방패) - Dotfuscator 프로그램 비교 #1
구독자 여러분 안녕하세요
오늘 포스팅은 Visual Studio와 동고동락한 10년지기 친구?!를 소개(프로그램)을 소개 할까 합니다.
바로 Dotfuscator 프로그램 인데요. Dotfuscator 프로그램은 Visual Studio 2003 버전 부터 일부 기능에 한해 Add-in 버전으로 번들이 제공 되었습니다. 이 프로그램은 Developer Licenses User당  250만원 상당의 상용 프로그램 인데요. 난독화 프로그램에 대해서 잘 모르시는 분들이 계신것 같아 준비 해봤습니다.

자! 이제 Dotfuscator에 대해서 프로그램을 비교 할때가 왔습니다. 앞서  축소된 기능이 제공 되고 있다고 말씀 드렸는데요. 실제로  어떤 버전이 존재를 하는지 살펴보도록 하겠습니다.

Dotfuscator은 3가지 버전으로 나눠지고 있는데요.

* Dotfuscator 프로그램 종류
- Dotfuscator Professional Edition
- Dotfuscator Enhanced Community Edition
- Dotfuscator Community Edition


자세한 정보를 확인해보시려면 아래를 참고 해주십시오.

MSDN에서 명시된 내용의 기준으로 본다면 기능들이 버전별로 지원 여부가 다른것을 확인 할 수 있습니다.
그럼 어떤 기능들이 있는지 살펴볼까요?

* Dotfuscator 난독화 프로그램은 어떤 기능(옵션)을 가지고 있나요?
Dotfuscator 프로그램은 크게 9가지 기능을 가지고 여러 옵션을 지원(Professional Edition 기준)을 하고 있습니다.

1. Renaming
난독화 프로그램에서는 멤버 변수, 함수이름, 클래스등의 시스템 고유 문자형(a,b,c,1,2,3,.....등)로 이름 바꾸기기능이 제공합니다. 이는 혼란하기 쉬운 시퀸스 이름으로 바꾸기 때문에 역어셈블러 해독에 어려움을 줄수 있습니다

2. Control Flow obfuscation
개발 프로그램의 조건, 분기, 반복과 같은 논리적 구조를 스파게티 코드화(어려운 구조로 변경)를 제공합니다. 이 과정에서 성능 저하가 발생 할 수 있지만 코드의 분석은 매우 어려울수 있습니다.
이 기능은 Professional Edition 버전에서만 지원합니다.


3. String Encryption
크래커는 프로그램을 변조하기 위해서 주요 문자열을 검색하여 변조를 하게 됩니다. 역어셈블러를 방지하고자 문자열 또한 암호화여 디컴파일 시도시 해당 문자열을 찾을수 없도록 기능을 제공합니다

4. Enhanced Overload Induction
Professional Edition 버전의 확장 기능으로써 코드 내의 필드와 메소드 반환 유형을 변경함으로 코드를 이해 못하도록 기능이 제공됩니다.

5. Pruning(Removal)

작은 응용프로그램 더욱 빨리 실행하도록 돕는 기능입니다. 작성된 코드중 사용하지 않는 코드를 제거 하므로써 속도를 향상 시킵니다.

6. Assembly Linking
여러 어셈블러 파일을 하나의 파일로 병합하여 작고 간단한 배포 시나리오를 제공합니다.

7. Watermarking
워터마크는 무단 사본을 추적하는데 사용할수 있는 방법으로 저작권 정보 또는 고유 식별과 같은 정보를 런타임 동작에 여향을 주지 않고 삽입할수 있는 기능을 제공 합니다.

8. Incremental Obfuscation
난독 프로그램을 실행하는 동안 이름 매핑 레코드 생성, 분산된 난독 프로그램 통합 기능 제공합니다.

9. Debugging Obfuscated Code
난독화된 프로그램 배포 이후 문제 발생시 해당 스택을 원래 이름으로 대체 하여 제공(Professional Edition)

기능에 대한 자세한 설명은 유저 가이드를 참고 하시길 바라며 포스팅을 통해 전반적인 내용을 다뤄 볼수 없기 때문기에  일부 기능에 한해(Renaming, Control Flow, String Encryption, Pruning) 알아보도록 하겠습니다.

* 그럼 빨리 난독화 도구 사용하는 방법좀 알려주세요!
난독화에 앞서 비교 분석을 하려면 난독화 하고하는 대상 코드가 필요하겠죠?

[코드 1] 변환 대상 예제 코드
namespace ObfuscationEx
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("안녕하세요 방갑습니다.");
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(string.Format("100 + {0}의 합은? {1}", i, 100 + i));
            }
            Console.WriteLine();
            Console.WriteLine(new People().ToString());
        }
    }
    class People
    {
        private string NameKor = "정은성";
        private string NameEng = "Jeong Eun Seong";

        public override string ToString()
        {
            return string.Format("한글 이름은? {0} 영문 이름은? {1}", NameKor, NameEng);
        }
    }
}

적절한 코드가 완성이 되었습니다. 그럼 이제 변환을 해볼까요? 두근두근♥

1. Renaming
기능 명에서도 알수 있듯이 무언가를 바꾸려는 시도를 하고 있는데요. 실제로 이 기능은 멤버 변수, 메소드, 클래스 등의 식별자 이름을 바꾸는 기능을 제공을 하고 있는데요. 변경 만으로도 역으로 해석을 할 때 리딩이 어려워 집니다.

간단한 예제를 통해 변경 전후를 살펴보도록 하며 이어서 사용법에 대해 알아보도록 하겠습니다.
- 메소드 경우 : void HelloWorld() -> void a();
- 필드 경우 : bool blWindowsHidden; -> bool a;

[그림 1-1] Dotfuscator 프로그램 Renaming 기능 화면 - Exclude 영역

① 텝 메뉴 : Rename 기능의 텝메뉴는 크게 2가지로 구분이 되어집니다.
      - Exclude : Rename시 배제될 적용 대상 설정
      - Options : Rename 적용시 옵션으로써 오버헤드, NameSpace 변경 방지, Rename 스키마설정,  Map설정

② 트리 영역 :
트리영역은 해당 어셈블러의 구조를 제공하며 난독화 Rename 제외 대상을 지정시 선택 영역은
                        변환이 되지 않습니다.

③ 적용 규칙 영역
 : 해당 영역은 배제 가능한 규칙을 정의을 하게 되면 정규식에 의해 해당 영역이 변환이 되지 않습니다.
정규표현 배제 범위
.* 전체 매칭
MyLibrar. MyLibrary, MyLibrari, 그외 매칭
My[\.]Test[\.]I.* My.Test.Int1,My.Test.Internal, 그외 매칭
Get.* GetInt, GetValue, 그외 매칭
Get* Ge,Get,Gett,Gettt, 그외 매칭

[그림 1-2] Dotfuscator 프로그램 Renaming 기능 화면 - Options 영역

- Keep Namespace Renaming Option
 : 난독화시 네임스페이스 이름을 보존 할 수 있으며 유지하지 않을경우 다음과 같습니다.
기존 이름 난독화 된 이름
Net.Tobegin.Util.DateUtil Net.Tobegin.Util.a
Net.Tobegin.Provider.XmlProvider Net.Tobegin.Provider.b
Net.Tobegin.Enum.XMLProviderEnum Net.Tobegin.Enum.c
Net.Tobegin.Util.VectorList Net.Tobegin.Util.d

- Keephierarchy Renaming Option
 : 네임스페이스와 클래스 네임  또한 Rename이 가능합니다.
기존 이름 난독화 된 이름
Net.Tobegin.Application.Main a.a.a.a
Net.Tobegin.Application.Program a.a.a.b
Net.Tobegin.Enum.XMLProviderEnum a.a.a.c
Net.Tobegin.Util.VectorList a.a.a.d

- Full Class Renaming Option(Default)
 : 기본적으로 적용되는 Rename 방법으로써 매우 간단한 이름으로 변경이 가능합니다. 
기존 이름 난독화 된 이름
Net.Tobegin.Application.Main a
Net.Tobegin.Application.Program b
Net.Tobegin.Enum.XMLProviderEnum c
Net.Tobegin.Util.VectorList d

- Renaming Prefixes
 : 옵션은 Rename시 수식을 지정하여 변환이 가능합니다.
기존 이름 수식어 Rename 옵션 난독화 된 이름
Net.Tobegin.Main helloWorld Keep Namespace Net.Tobegin.helloWorlda

- Overload-Induction Method Renaming
 : 기존 구조를 더 난해한 구조로 변경하여 옵션을 제공합니다.

[코드 2] OverLoad-Induction 옵션 비교
// 기존 코드
private void CalcPayroll(SpecialList employeeGroup) {
      while (employeeGroup.HasMore()) {
            employee = employeeGroup.GetNext(true);
            employee.UpdateSalary();
            DistributeCheck(employee);
      }
}

// 변경 코드
private void a(a b) {
      while (b.a()) {
            a = b.a(true);
            a.a();
            a(a);
       }
}

- Map Output File
 : 난독화 빌드시 식별자 변경에 따른 변경된 식별자와 고유 식별자 정보를 MAP 형태로 XML로 제공이 됩니다.
   매핑된 MAP xml 파일이 필요성에 대해서는 Code Securit(Spear and Shield) : 04. Obfuscation
   Design Tip And Notabilia
회차에서 다뤄볼 예정이니 잠시만 기다려주세요 : ) 

아직 나열 하지 않은 옵션들이 제법 많은데요 나머지 사항들은 유저 가이드를 통해 숙지 하시길 바랍니다.
이렇게 옵션을 활성화여 난하게 코드를 제 빌드가 가능한데요 실제 빌드를 통해서 어떻게 변겨잉 되었는지 확인 해보도록 하겠습니다.

[그림 1-3] Rename 적용된 어셈블러


위 그림을 보시면 네임스페이스와 일부 멤버변수(NameEng, NameKor)는 보존하였고 그외 Rename 한 흔적을 볼수 있습니다. [코드1]과 같이 간단한 코드이지만 만약 복잡한 코드라면 모든 부분이 a,b,c,d,e,f,g.....z 형태로 변경이 될수가 있는데요. 생각만해도 당혹스러울것 같습니다. 어떻게 본다면 네이밍 룰을 지키지 않고 코딩한것과 비슷한데요. a,b,c,d,e,f,g.....z 로 식별자가 변환된 코드를 본 여러분 라면 어떤 기분이 들까요?

Renaming 기능은 단순히 필드명에 대한 가독성을 떨어트리는 기능 뿐만아니라 심플한 식별자로 대체하기 때문에 실행 시간 또한 좀더 최적화 하며 1석 2조의 효과를 얻을수 있습니다. 
 다시 말씀 드리자면 프로그램 크기가 축소되고 실행속도가 빨라질 수 있습니다.

지금까지 Renaming 기능에 대해서 살펴보았는데요. 내용이 많아 짐에 따라 포스팅을 분리하게 되었습니다.
양해 말씀 드리며 다음 회차를 통해 Control Flow, String Encryption, Pruning 에 대해서 좋은 내용 전달 해도록 노력 하겠습니다.

참고 문헌

- Dotfuscator 4.0 : : http://msdn.microsoft.com/ko-kr/library/ms227240.aspx
 
포스팅을 마치며...

자세한 내용을 전달 하려고하는 욕심으로 포스팅 내용이 제법 길어졌는데요. 회차를 나눠서 제공하려고 하오니 양해해 부탁 드리며 유익한 정보를 제공하고자 노력 하겠습니다. 

더 궁금하신점이 있으시면 댓글 혹은 http://blog.tobegin.net/notice/1 프로필정보를 통해 문의 바랍니다.
감사합니다.

정은성 드림



Posted by LenAWeb

댓글을 달아 주세요

  1. 늘 재산이 없는 이는 늘 마음이 없다.

    2013.03.24 13:28 [ ADDR : EDIT/ DEL : REPLY ]
  2. 인생의 목적은 끊임없는 전진에 있다.

    2013.03.24 13:29 [ ADDR : EDIT/ DEL : REPLY ]
  3. 넌 모를 거야 ,Topics related articles:


    http://www.orgdotshop.net/guestbook?page=2 复件 (14) 韩文

    , 널 얼마나 사랑하는지 ,Topics related articles:


    http://adnaru.com/category/RIA?page=3 复件 (7) 韩文

    , 또 얼마나 그리워 했는지 ,Topics related articles:


    http://adnaru.com/category/RIA/AIR?page=1 复件 (16) 韩文

    , 사랑한다…

    2013.03.28 07:01 [ ADDR : EDIT/ DEL : REPLY ]
  4. 건강은 제일의 재산이다.7

    2013.03.30 23:26 [ ADDR : EDIT/ DEL : REPLY ]
  5. 늘 재산이 없는 이는 늘 마음이 없다.

    2013.03.30 23:26 [ ADDR : EDIT/ DEL : REPLY ]
  6. 행복의 한쪽 문이 닫히면 다른쪽의 문이 열린다.

    2013.04.11 01:38 [ ADDR : EDIT/ DEL : REPLY ]
  7. http://www.cheaplongchamls,Topics related articles:


    http://www47.don5050.com/440 复件 (19) 韩

    .com/
    http://www,Topics related articles:


    http://gggl.tistory.com/?page=5 复件 (11) 韩

    .cheapshoesev,Topics related articles:


    http://beansichi.tistory.com/m/post/view/id/29 复件 (14) 韩

    .com/

    2013.04.21 04:45 [ ADDR : EDIT/ DEL : REPLY ]
  8. 눈을 감아봐 입가에 미소가 떠오르면 네가 사랑하는 그 사람이 널 사랑하고 있는거야.

    2013.04.29 03:10 [ ADDR : EDIT/ DEL : REPLY ]
  9. 슬퍼서 우는거 아니야..바람이 불어서 그래..눈이 셔서..

    2013.07.16 16:32 [ ADDR : EDIT/ DEL : REPLY ]
  10. eun.j

    대박. 완전 눈뜨고 코베어간 느낌이네요.
    좋은자료 감사합니다.

    2015.07.24 17:24 [ ADDR : EDIT/ DEL : REPLY ]

.NET Framework/BUNDLE2010. 11. 25. 03:27
 회차
[.NET] Code Securit(Spear and Shield) : 01. DisAssembler
[.NET] Code Securit(Spear and Shield) : 02. Obfuscation

[.NET] Code Securit(Spear and Shield) : 03. Dotfuscator Program Comparison #1
[.NET] Code Securit(Spear and Shield) : 04. Dotfuscator Program Comparison #2
[.NET] Code Securit(Spear and Shield) : 05. Obfuscation Design Tip And Notabilia
[.NET] Code Securit(Spear and Shield) : 06. Security Tools : Strong Name Tool

02| 코드 보안(창과 방패) - 난독화(Obfuscation)
구독자 여러분 안녕하세요

이번 포스팅에서 다뤄볼 내용은 난독화 입니다. 난독화가 무엇인지 모르시는분들을 위해 다시한번 소개와 난독화 도구가 무엇이 있는지 알아보도록 하겠습니다. 필요하지 않으시다면 넘어가셔도 좋습니다.


난독화?! 읽어도 멍때리는건가? 뭐지?
난독화 기술란 해커들은 보통 리버스 엔지니어링(소프트웨어 설계도를 역으로 추적) 기술을 사용해 정보를 훔칠수 있는데, 난독 기술은 파일에 보호막을 씌워 리버스 엔지니어링을 적용하지 못하게 만드는 기술을 뜻한다.

또한 난독화는 소스코드/바이너리 난독화로 나눕니다.
소스코드 난독화 : C++, 자바, C#등의 프로그램의 소스코드를 알아보기 힘든 형태로 바꾸는 기술
바이너리 난독화 : 컴파일 후에 생성된 바이너를 역공학을 통해 분석하기 힘들게 변조 기술

지난 포스팅을 통해 MSIL 역어셈블러이나 리플렉션을 통해 코드를 너무 쉽게 노출되는 것을 보게 되었습니다.
어떻게 하면 노출을 막을수 있나요? 난독화 라는 의미처럼 코드를 완벽하게 보안을 할수 있는것은 아닙니다.
즉, 코드를 암호화는 것은 아니며 코드를 읽기 어렵게 변조합니다.

리버스 엔지니어에게 코드를 어렵게 보여줌으로써 .NET으로 구현된 대부분의 상용 컴포넌트와 어플리케이션들의 정보를 노출에 최소화 할 수 있습니다.

그렇다면 난독화 도구는 뭐가 있을까요? 
가장 많이 사용되고 있는 난독화 도구로써는 다음과 같습니다.

* 난독화 도구(가장 많이 사용되는 난독화 도구)
- Dotfuscator( http://www.preemptive.com/products/dotfuscator/ )
  Visual Studio에 Add-in 가능 / Visual Studio 번들 제공(ver Community Edition)
- Spices.Net Decompiler(
http://www.9rays.net/Category/54-spicesnet-decompiler.aspx ) / 9rays.net사 / $399+
- Spices.Net Obfuscator(
http://www.9rays.net/Category/55-spicesnet-obfuscator.aspx ) / 9rays.net사

* 그외 난독화 도구
- Aspose.Obfuscator ( http://www.aspose.com/corporate/purchase/policies/discontinued-products.aspx )
  Aspose사 / 무료 / 지원 없음
- Assemblur (
http://www.metapropeller.com/ ) / Metapropeller사 / 무료
- AssemblyLockbox ( 
http://alb.gibwo.com/dnn/ )  / Gibwo사 / 매달 49.95$
- Babel ( 
http://code.google.com/p/babelobfuscator/ ) / Alberto Ferrazzoli사 / 무료
- BitHelmet Obfuscator (
http://www.bithelmet.com/ ) / BitHelmet사 / $245
- C# Source Code Obfuscator (
http://www.semdesigns.com/Products/Obfuscators/CSharpObfuscator.html )
   Semantic Designs사 / $200
- CliSecure (
http://www.secureteam.net/ ) / SecureTeam / 업무 제휴 필요
- CodeArmor .NET ( 
http://www.vilabs.com/products/codearmor-protection/ ) / v.i. labs사 / 업무 제휴 필요
- CodeVeil ( 
http://xheo.com/products/code-protection ) / Xheo사 / $899
- CodeWall (
http://www.codewall.com/ ) / CodeWall Technologies사 / $390
- Decompiler.NET / Jungle Creatures사 / $550
- Deploy.NET  / Jungle Creatures사 / $750
- DeepSea Obfuscator ( 
http://www.deepseaobfuscator.com/ ) / TallApplications BV사 / $299
- Demeanor for .NET ( 
http://howtoselectguides.com/dotnet/obfuscators/ ) / Wise Owl사 / $799
- DNGuard HVM (
http://www.dnguard.net/ )  / ZiYuXuan Studio사 / $899
- dotNet Protector ( 
http://dotnetprotector.pvlog.com/Home.aspx ) / pvlog사 / €300 이상
- Eazfuscator.NET (
http://www.foss.kharkov.ua/g1/projects/eazfuscator/dotnet/Default.aspx
  Oleksiy Gapotchenko사 / 무료
- Goliath .NET Obfuscator ( 
http://www.cantelmosoftware.com/eng/obfuscator.html )
   Cantelmo Software사 / 무료
- Google Obfuscar (
http://code.google.com/p/obfuscar/ ) / Google사 / 무료
- LSW IL-Obfuscator ( 
http://www.lesser-software.com/en/content/products/LSW%20DotNet-Tools/LSW_DotNet_IL-Obfuscator.htm ) / Lesser-Software사 / $29
- NetOrbiter (
http://www.zolohouse.com/wow/NetOrbiter/index.html  ) / WowPanda사 / 무료
- .NET Reactor (
http://www.eziriz.com/products.htm ) / Eziriz사 /  $179
- Obfuscator.NET ( 
http://www.macrobject.com/en/obfuscator/ ) / Macrobject사 / $199
- PC Guard for .NET ( 
http://www.sofpro.com/pcgw32.htm ) /  SofPro사 / €399
- Phoenix Protector ( 
http://ntcore.com/phoenix.php ) / NTCore사 / 무료
- Postbuild .NET Obfuscator ( 
http://www.xenocode.com/ ) / Xenocode사 / $1599
- QND-Obfuscator  (
http://www.desaware.com/products/books/net/obfuscating/index.aspx
   Desaware사 / $39.95
- Salamander .NET Obfuscator (
http://www.remotesoft.com/salamander/obfuscator.html ) / Remotesoft사 / $799
- Salamander .NET Protector (
http://www.remotesoft.com/salamander/protector.html ) / Remotesoft사 / $1,899
- SharpObfuscator (
http://sharpobfuscator.codeplex.com/ ) / CodePlex사 / 무료
- Skater .NET Obfuscator (
http://www.smrtx.com/RS/obfuscator_net.htm ) / Rustemsoft사 / $99이상
- {smartassembly} (
http://www.red-gate.com/products/smartassembly/index.htm ) / Cachupa사 / $399 이상
- Thinstall / vmware / $4,995이상

Tip > Java에도 JAD와 같은 대표적 역컴파일러가 있듯이 PreEmptive 사에서도 Dotfuscator의 자바버전인 DashO 제품이 있으니 참고 바랍니다.

Visaul Studio 설치 때 유심히 보신분이라면 아실것 같은데요. Dotfuscator 난독화 도구(Dotfuscator Community Edition)는 크리스탈 리포트(VS2008 이하) 처럼 번들로 제공됩니다.

비록, 완제품이 아니지만 Renaming 만으로도 난독화에 많은 영향을 미칠수 있기 때문에 무시 할수 없죠 : )
이번 포스팅은 난독화에 대한 간략 소개와 난독화 도구 리스트에 대해서 소개를 해보았습니다.

다음 포스팅에는  Dotfuscator Community Edition과  Dotfuscator Profession Edition이 어떤 기능의 차이가 있는지 비교를 해볼까 합니다. ^^  앞서 궁금하시다면 아래 참고 문헌을 참고 하시길 바랍니다. : )

참고 문헌
- Dotfuscator 4.0 : http://msdn.microsoft.com/ko-kr/library/ms227240.aspx

포스팅을 마치며...

더 궁금하신점이 있으시면 댓글 혹은 http://blog.tobegin.net/notice/1 프로필정보를 통해 문의 바랍니다.
감사합니다.

정은성 드림
Posted by LenAWeb

댓글을 달아 주세요

  1. 난독화의 범주에 포함된다고 보기는 어렵지만, ILMERGE 같은 도구를 이용하여 의도적으로 어셈블리에 대한 종속성을 합하여 배포를 단순하게 만들고, 분석해야 하는 내부 IL 코드 사이의 관계량을 증가시켜 볼륨을 크게 만드는 것도 디스어셈블 가능성을 떨어뜨리는 한 요인이 되는것 같습니다.

    또한 VMware의 ThinApp (이전 Thinstall) 같은 App-Virtualization Tool 역시 일반적인 닷넷 디스어셈블러로 리버스 엔지니어링할 수 없도록 보호하는 역할을 수행하곤 합니다. (다만 보통의 난독화 도구가 어쨌든 변형된 MSIL 코드를 내놓는 것과는 달리 App-Virtualization Tool은 MSIL 코드 대신 OS에 맞춘 바이너리 코드를 내놓는 점이 다릅니다.)

    2010.11.25 13:01 [ ADDR : EDIT/ DEL : REPLY ]
    • 정현군 =ㅁ= // 좋은 팁이야^^ 지금 인천이얌?
      참,Azure 카페에 포스팅 해야할텐데. 기타 강좌성 아티클은 어디다가 포스팅하지? 내 권한으로 게시판 생성이 안될텐데.. ㅎ

      2010.11.25 13:41 신고 [ ADDR : EDIT/ DEL ]
  2. 벗이 먼곳으로부터 찾아오니 이 얼마나즐거운가."

    2013.03.24 13:29 [ ADDR : EDIT/ DEL : REPLY ]
  3. 한 사람을 잃게 된다는 제일 큰 아쉬움은 내 앞에 있는 니 마음이 변해져 가고있는거야.

    2013.03.29 23:59 [ ADDR : EDIT/ DEL : REPLY ]
  4. 우정은 풀어야지 끊지 말라.

    2013.03.30 23:26 [ ADDR : EDIT/ DEL : REPLY ]
  5. 너만을 바라보고 또 너만을 지키고 내가 가진것 모두 너만을 위해 줄수있다면 내겐 기쁨인걸.

    2013.04.07 20:06 [ ADDR : EDIT/ DEL : REPLY ]
  6. 행복과 기회는 우리를 위해 항상 열려있습니다.

    2013.04.08 06:18 [ ADDR : EDIT/ DEL : REPLY ]
  7. 그들은 화려한되지 않기 때문에 어떤 사람들은 대단하지 않을 지출하지만, 자신의 마음이 멋진 아이디어를 스쳐하지 않았기 때문에, 또는 얼마나 영리 모르겠어요.

    2013.04.08 19:35 [ ADDR : EDIT/ DEL : REPLY ]
  8. 진정한 자신감, 사람들 처음부터 맹인 신뢰 대한 열등감 중간에서 자신감을 사실에 더 자신감이 없습니다.

    2013.04.09 19:18 [ ADDR : EDIT/ DEL : REPLY ]
  9. 미안,같에 있고 싶어요

    2013.04.23 02:08 [ ADDR : EDIT/ DEL : REPLY ]
  10. 다른 남자 부르면서 울거면 나한테 이쁘지나 말던지

    2013.04.23 13:17 [ ADDR : EDIT/ DEL : REPLY ]
  11. 지금은 반짝반짝 빛이 나겠지,, 하지만 시간이 흐르면 그빛은 사라저버릴거야,지금 우리처럼

    2013.07.18 00:46 [ ADDR : EDIT/ DEL : REPLY ]

.NET Framework/BUNDLE2010. 11. 24. 02:45
 회차
[.NET] Code Securit(Spear and Shield) : 01. DisAssembler
[.NET] Code Securit(Spear and Shield) : 02. Obfuscation
[.NET] Code Securit(Spear and Shield) : 03. Dotfuscator Program Comparison #1
[.NET] Code Securit(Spear and Shield) : 04. Dotfuscator Program Comparison #2
[.NET] Code Securit(Spear and Shield) : 05. Obfuscation Design Tip And Notabilia
[.NET] Code Securit(Spear and Shield) : 06. Security Tools : Strong Name Tool

01| 코드 보안(창과 방패) - 역어셈블러(DisAssembler)
오랜만에 만나뵙네요. 프로젝트 투입으로 인해 포스팅을 미뤄게 되었습니다. 
아시는 분들은 아시겠지만 오늘 여러분들께 소개해드릴 포스팅은 닷넷 코드 보안에 대해서 이야기를 나눠볼까 합니다.
포스팅에 앞서 이번 테마는 상세한 내용을 다루는것이 아니므로 부분적으로 이해하시길 바랍니다.

추가) 본 회차의 의도는 난독화를 언급하고자 역어셈블러를 소개 하게 되었고^^;; .NET Framework 보안도구 이용 시 프로그램 변조등을 방지 할 수 있으니 오해 없으시길 바랍니다. : )
 
역어셈블러(DisAssembler)란? 기계어 코드를 어셈블리 코드로 변환하는 번역 프로그램을 뜻합니다.

.NET으로 관리되는 코드들은 중간 언어인 MSIL코드로 관리되며 ILDU(Intermediate Language Disassembler Utility)라는 툴에 의해서 MSIL 코드를 확인하실 수 있습니다.

* ILDU 란?
ILDU(Intermediate Language Disassembler Utility)는 MSIL 역어셈블러라고 표현하며 .NET Framework에서만 실행될 수 있는 어셈블러를 역으로 해석해주는 역어셈블러 프로그램입니다.

MSIL 역어셈블러를 활용하려면 다음과 같이 ildasm 프로그램을 실행 해야합니다.

- 프로그램 위치
<driver name>:\Program Files (x86)\Microsoft Visual Studio<version>\SDK\<version>\Bin\ildasm.exe

프로그램을 실행하면 다음과 같습니다.


다음 코드[코드1]를 MSIL 역어셈블러로 통해 PE (portable executable) 파일을 확인 하실수 있습니다. 
class Program
{
    static void Main(string[] args)
    {
         for (int i = 0; i < 100; i++)
         {
                  Console.WriteLine(string.Format("{0}", 100+ i));
          }
    }
}


프로그램을 통해 메소드를 클릭하면 MSIL로 부터 IL 코드를 추출이 가능합니다.
하지만 어셈블러의 IL 코드를 그대로 출력 해서 보여주므로 아무리 간단하더라도 해당 정보가 익숙하지 않고 코드가 어렵다면 더더욱 읽을 수 없습니다. 무언가 새로운 대안이 필요한것 같은데요.

이러한 단점을 보완하여  C#, VB, Delphi등의 고급언어로 개발된 코드 상태로 쉽게 복원을 하는 유용한 툴이 있습니다.
예전에 제 포스팅을 보신분이라면 기억이 나실것 같은데요.

바로 Redgate's .NET Reflector 프로그램입니다.



* Redgate's .NET Reflector
 - 지원 프레임워크 : Fx1.x, 2.0, 3.0, 3.5, 4.0
 - 라이센스 : 무료 / 유료
 - 다운로드 : http://reflector.red-gate.com/download.aspx

소개는 이정도로 하고요 [코드1]를 리플렉션을 통해 한번 확인 해보도록 하겠습니다.



헉...내가 작성했던 프로그램이 다보인다.. [코드1]이 만약에 회사 핵심 코드였다면... 맙소사...

어떻게하지?! x 3...

보시는것처럼 쉽게 노출이 될수 있습니다. 
닷넷 뿐만아니라 JAVA등 중간 언어로 관리하는 언어와 바이너리 프로그래밍도 역어셈블러를 통해 코드를 해치거나 변조가 가능합니다.

추가) 하지만 .NET Framework 보안도구 중 서명 도구(SignTool.exe), 강력한 이름 도구(Sn.exe) 등을 활용시에 코드를 볼수 있다고 해도 변조는 불가능 합니다. 피드백 의견에 따라 보안에 대해 오해 소지가 있는것 같아 강력한 이름 도구(Sn.exe) 사용법에 대해 추가 소개 해드릴 계획 입니다. : )

엄준일 MVP님 피드백 주셔서 감사합니다.


그렇게 놀라지 마세요!! 역어셈블러를 읽기 어렵게 만드는 툴이 존재를 하니깐요.

.NET Reflector툴은 악의 목적으로 이용이 가능하지만 궁극적인 목적이 있다고 생각합니다.
1. LenA : 야근 끝에... 프로그래밍을 완성했어!! 이제 배포를 해야지.. 
   빌 게이츠 : LenA! 배포하기전에 보안상 위험하지 않을까요? 체크해보세요.
   그렇습니다. .NET Reflector를 통해서 코드가 얼마나 노출이 되고 있는지 확인이 가능합니다.

2. 신입1 : 룰루랄라.... 코딩중....... Orz 핵심 코드를 날렸네.. 어떻게 하지?
   해당 어셈블러 파일이 존재를 한다면 .NET Reflector을 통해 거의 복원이 가능합니다.

3. 신입2 : 저는 C# 3개월 배우고 갓 입사한 신삥입니다. 개발을 해보니 일부가 매우 느리네요. 어떻게 하죠?
   해당 그림에서는 볼수 없었지만 객체가 반환이 되거나 메모리가 누수되거나 낭비되는 이유를 파악을 할수 있습니다.

이렇게 MSIL 역어셈블러를 통해 코드가 쉽게 노출이 된걸 확인 하셨으니깐 이제 보안을 해야 되겠죠?
보안에 관련된 포스팅은 다음 포스팅으로 미뤄도록 하겠습니다.

포스팅을 마치며...

이미 많이 알려진 포스팅이다보니 재미가 없었던 분도 계실것 같아요.
그래도 닷넷에 입문하신분들께 유익한 포스팅이 될거라고 믿으며 다음 회차 열심히 작성하도록 하겠습니다.

더 궁금하신점이 있으시면 댓글 혹은
http://blog.tobegin.net/notice/1 프로필정보를 통해 문의 바랍니다.
감사합니다.

정은성 드림
Posted by LenAWeb

댓글을 달아 주세요

  1. 비밀댓글입니다

    2010.11.24 22:22 [ ADDR : EDIT/ DEL : REPLY ]
    • 땡초님 피드백 감사합니다. 회차 내용이 모순의 주제다보니 어디까지 회차를 마무리 지어야할지 작성하는 동안 많이 고민을 했었어요.
      그래도 난독화 정도로 마무리 지으면 괜찮을것 같아 그랬는데. 논란의 소지에 대해 공감을 해주셔서 서명부분도 추가 기획을 해봐야겠네요. ^^;;

      다시 한번 피드백 감사 드리구요. 안보시줄 알았는데ㅋ
      다 읽어봐주시네요.. ㄷㄷ;;


      PS. 뵌지 좀 된것 같은데. 요즘 어떻게 지내시는지 궁금하네요.^^

      2010.11.25 00:42 신고 [ ADDR : EDIT/ DEL ]
  2. Wow~ 아티클이 많이 알차게 바뀌었네요. ^^

    2010.11.25 12:57 [ ADDR : EDIT/ DEL : REPLY ]
    • 응 ^^;; 근데 이자료만으로 보안하기에는 많이 미흡하지.. 정현군이 많이 도와줘 ㅎ

      2010.11.25 13:39 신고 [ ADDR : EDIT/ DEL ]
  3. 가장 감사해야 할 것은 신이 주신 능력을 제대로 이용하는 것이다.

    2013.03.24 13:29 [ ADDR : EDIT/ DEL : REPLY ]
  4. 사람이란 자기가 생각하는 만큼 결코행복하지도 불행하지도 않다.

    2013.03.24 14:09 [ ADDR : EDIT/ DEL : REPLY ]
  5. 나는 세계의 시민이다.

    2013.03.28 00:09 [ ADDR : EDIT/ DEL : REPLY ]
  6. 부모를 공경하는 효행은 쉬우나,부모를 사랑하는 효행은 어렵다..

    2013.03.30 23:26 [ ADDR : EDIT/ DEL : REPLY ]
  7. 인생의 목적은 끊임없는 전진에 있다.

    2013.03.30 23:47 [ ADDR : EDIT/ DEL : REPLY ]
  8. 기쁨을 나눌 때 약속을 하지말고, 슬플때 대답을 하지 말고 분노에서 결정을 하지 말라.

    2013.04.08 19:20 [ ADDR : EDIT/ DEL : REPLY ]
  9. 만 사람들이 물건을 빠르게하는 방법을 알고 중지하는 방법을 알고.

    2013.04.09 23:00 [ ADDR : EDIT/ DEL : REPLY ]
  10. http://www,Topics related articles:


    http://archanfel.tistory.com/387 复件 (16) 韩

    .xn--6ck2bwcu74pofcq24aotk,Topics related articles:


    http://icekhaki.tistory.com/archive/201204?page=3 复件 (13) 韩

    .com/
    http://www.lisseurghdle,Topics related articles:


    http://www.lifentalk.com/m/12 复件 (14) 韩

    .com/

    2013.04.22 07:21 [ ADDR : EDIT/ DEL : REPLY ]
  11. 귀를 기울여봐 가슴이 뛰는 소리가 들리면 네가 사랑하는 그 사람 널 사랑하고 있는거야.

    2013.04.29 09:11 [ ADDR : EDIT/ DEL : REPLY ]
  12. 다른 남자 부르면서 울거면 나한테 이쁘지나 말던지

    2013.07.15 19:40 [ ADDR : EDIT/ DEL : REPLY ]