.NET Framework/BUNDLE2010. 12. 15. 03:39
 회차
[.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
04| 코드 보안(창과 방패) - Dotfuscator 프로그램 비교 #2
구독자 여러분 안녕하세요
이번 회차에서는 지난 포스팅에 이어 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);
        }
    }
}

2.Control Flow
Control Flow는 프로그램의 조건, 분기, 반복문과 같은 논리적 구조를 스파케티 코드화하여 구조를 어렵게 변경을 하게 됩니다. 이과정에서는 성능 저하가 발생 할수 있지만 코드의 가독성을 떨어트리면서 분석이 어려울 수 있습니다.

보통 실무 프로젝트를 가지고 Control Flow를 적용을 했었는데요. 구독자 여러분들께 소개해드리고자 간단한 코드를 가지고 테스트 중에 흥미로운 사실을 알게 되었습니다. Control Flow 기능이 생각보다 강력 했던 이유인지 역에섬블러 프로그램 마저 해독하지 못하는 상황이 나타났습니다. 의도 했던 코드는 Main 메소드 인데요.

간단한 코드임에 불구하고 Control Flow의 영향으로 인해 최고?! 라고 불리는 Red Gate's .Net Reflector에서도 확인 해 볼 수 없었습니다.  훗..코드가 복잡했나?

[그림 1] Control Flow 적용


그래도 여러분들께 소개를 해드려야할것 같아 더 간단한 코드를 가지고 비교를 해보도록 하겠습니다.
비교하기 위해 의미 없는 임시코드를 다음과 같이 작성 하였습니다.

[코드 1] Control Flow 비교용 샘플 코드
private static int testMethod()
{
      int n = 0;
      if (n == 0)
      {
           n = string.Compare("정은성", "Jeong");
      }
      return n;          
}

아주 심플한 코드입니다. 위 논리적 구조가 어떤 형태로 변경이 되는지 살펴보도록 하죠.

[그림 2] Control Flow 적용 비교

Clontrol Flow를 적용을 해보았는데요.
적용 전후를 보시고  " 에이~ 코드 제어 흐름만 변경 됬자나? ",  " 별거 없네요. "  이런 생각이 드실것 같아요.

이해를 돕고자 단순화 한 코드이며 큰 의미는 없습니다. 그래도 정말 어떻게 변경이 되는지 보여드려야 할것 같아요.
그래서 dotfuscator 유저가이드 내용을 발취하였습니다. 

[사례 1-1] Control Flow 적용 전 [ 출처 : dotfuscator's user guide ]
public int CompareTo(Object o) {
    int n = occurrences – ((WordOccurrence)o).occurrences;
    if (n == 0) {
        n = String.Compare(word, ((WordOccurrence)o).word);
    }
    return(n);
}

[사례 1-1] Control Flow 적용 후 [ 출처 : dotfuscator's user guide ]
public virtual int _a(Object A_0) {
    int local0;
    int local1;
    local0 = this.a – (c) A_0.a;
    if (local0 != 0) goto i0;
    goto i1;
    while (true) {
        return local1;
        i0: local1 = local0;
    }
    i1: local0 = System.String.Compare(this.b, (c) A_0.b);
    goto i0;
}

내용을 보시면 " 아~ 이렇게 읽기 어려운 구조로 변경이 되는구나!! " 라고 느낌을 받으실것 같아요?
저만 그런가요? 

이렇게 변경이 되었지만 주의 해야할 부분이 존재를 합니다. 앞서 말씀 드린적이 있는데요.
이기능을 사용하게 되면 가독성을 떨어지지만 속도 측면에서 성능이 저하가 될 우려가 있습니다.
따라서 필요에 따라 부분적으로 Control Flow 기능을 적용하실 필요가 있음을 알려드립니다. : )

이어서 기능에 대해서 알아보도록 하겠습니다.
이 기능 또한 Rename 기능과 같은 패턴의 오퍼레이션을 가지고 있고 다음과 같습니다.

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


① 텝 메뉴 : Control Flow기능은 2가지 기능으로 구성 되어 있습니다.
     - Exclude : Control Flow 적용시 배제 될  적용 대상 설정
     - Options : Control Flow 적용시 옵션으로 가독성 강도에 대해 High, Medium, Low로 구성

② 트리영역 : 해당 어셈블러의 구조를 제공하며 Control Flow 적용 대상을 제외하여 빌드가 가능합니다.
③ 적용 규칙 영역 : 해당 영역은 배제 가능한 규칙을 정규식을 정의 하여 적용 대상을 제외 하여 빌드 가능합니다.
                                적용 규칙에 대해서 궁금하시면 별도로 문의 바랍니다 : )


[그림 3-2] Dotfuscator 프로그램 Control Flow 기능 화면 - Options 영역


Control Flow 기능은 해당 코드를 스파게티화 하면서 가독성 측면과 성능 측면에서 반비례 성향을 알수 있었는데요.
많은 스레드를 요구를 한다거나 엑세스 타임이 짧은 프로세스를 처리해야 한다면 필요에 따라서 배제 대상을 지정하여 빌드를 하셔야 합니다.

이렇게 가볍게 리뷰를 해보았는데요 이기능을 적용해야 한다면 개발 중신 프로그램의 특정부분을 어떻게 배제 해야할지 조금이라도 도움이 되셨기를 바랍니다.

이어서 String Encryption 기능에 대해서 살펴보도록 하겠습니다.

3. String Encryption
흔히 크래커는 리버싱 하려고 할때 가장 쉽게 접근이 가능한 메세지 부분을 검색을 하는 편인데요. 이기능은 이러한 케이스를 조금이라도 접근을 하지 못하도록 해당 문자열을 암호화하여 문자열을 찾을수 없도록 하는 기능입니다.

간단한 예제를 통해 변경 전후를 살펴보도록 하며 이어서 사용방법에 대해서 알아보도록 하겠습니다.

[코드2-1] String Encryption 적용 전 
Console.WriteLine("안녕하세요 방갑습니다."); 

[코드2-2] String Encryption 적용 후 
Console.WriteLine(a("쪼좾뛀ꇄꋆ뿈믊꓌껎￐냒뫔뫖飚軜럞胠釢闤짦ꓨꫪ꣬뫮뷰", num2));

적용 후의 형태를 보시면 깨진 문자열을 보이는데.
" 파일 포맷이 인코딩이 잘못됬나?" , " 저렇게 깨진 문자를 심어두면 프로그램이 돌아갈까? " 라고 
의심 스러울것 같은데. 걱정 안하셔도 됩니다.

아무쪼록 알수 없는 문자열 형태로 변경되어 있는데요. 내부적 로직은 리버싱을 통해 분석을 해봐야 알수 있겠지만
a라는 메소드와 인수에 의해 복원이 되는것으로 추측 됩니다.

이기능 또한 어떻게 사용하는지 알아봐야할것 같은데요. 해당 기능 또한 Control Flow기능과 유사한 인터페이스지만 다른 오퍼레션을 가지고 있습니다.

[그림 4] Dotfuscator 프로그램 String Encryption 기능 화면



보시는 화면과 같이 구성은 Rename, Control Flow과 달리 Include 텝만 구성이 되어있고 또한 배제해야할 대상이 아니라 적용 해야할 대상을 지정을 해줘야만 난독화가 가능합니다.

① 트리 영역 : 해당 어셈블러의 구조를 제공하며 String Encryption 적용 대상을 지정해야만 빌드가 가능합니다.
적용 규칙 영역 : 해당 영역은 적용해야할 규칙을 정규식을 통해 정의 하여 적용하면 빌드 가능합니다.
                               이 기능에 대해서 궁금하신점 있으시면 문의 바랍니다 : )

String Encryption 기능은 해당 문자열을 알수 없는 형태로 변경함으로써 크래커에게 리버싱을 하기 어렵도록 제공을 하고 있는데요. 막강한 기능에도 불구하고 타입체킹, 리플렉션, 통신 등 케이스의 경우 프로그램이 정상적으로 작동하지 않으므로 가능한 유저가이드를 숙지하시고 적용하시길 바랍니다. 만약 번그럽거나 내용이 어려우시다면 다음 회차에서 소개 되는 "난독화 디자인 팁 & 주의사항해야 할 사항" 포스팅을 보시면 조금이라도 도움이 되실것 같습니다.

드디어 소개해드릴 마지막 기능에 도달했습니다. 그럼 Pruning(Removal) 기능에 대해 살펴보도록 할까요?

4. Pruning(Removal)
지난 회차에서 소개를 해드린 내용을 인용한다면 " 프로그램을 좀더 빠르게 실행하도록 돕는 기능! " 라고 말씀 드릴 수 있습니다. 그렇다면 " 도대체 어떤 기능이길래? 속도가 향상이 된다는것인지 "  궁금증을 가지시는분이 계실것 같은데요. 이 기능을 적용하게 된다면 실제 작성된 코드 중 사용하지 않는 코드를 제거하게 됩니다. 

즉, 필드, caller에 의해 반환 받는 시그니처, 생성자(.ctor) 등을 스택에서 제거하므로 속도를 향상이 시킬 수 있습니다.

그럼 간단한 예제를 통해 어떻게 달라지는지 살펴보고 사용 방법에 대해서 알아보도록 하겠습니다.

[코드 3] Pruning(Removal) 예제 코드 
namespace ObfuscationEx
{
    class Program2
    {
        Program2()
        {
            string test = "";
        }
        static void Main(string[] args)
        {
            string test = "";
            Console.Write("안녕하세요 구독자 여러분 : )");
            string test2 = MyTestMethod();
        }
        public static string MyTestMethod()
        {
            return "test";
        }
    }


간단한 예제를 통해 변경 전후를 살펴보도록 하며 이어서 사용방법에 대해서 알아보도록 하겠습니다.

[그림 5-1] Pruning(Removal) 적용 전 


여기서 유심히 살펴보실 내용은 빨간색 테투리 영역 입니다.  다음 적용 후와 비교를 해보시길 바랍니다.

[그림 5-2] Pruning(Removal) 적용 후 


[코드 4] Pruning(Removal) 적용 전(Main 메소드 일부)
string test = "";
Console.Write("안녕하세요 : )");
string test2 = MyTestMethod();


[그림 5-3] Pruning(Removal) 적용 후  


적용 전후를 정리해보면...
1. 실제 사용하는 클래스와 사용하지 않는 클래스 영역 정리
2. 메소드와 필드, 생성자(.ctor()) 영역 정리
3. 반환 메소드의 타입이 사용이 되지 않는 영역 정리

이기능 또한 어떻게 사용하는지 알아봐야할것 같습니다.

[그림 6-1] Dotfuscator 프로그램 Pruning(Removal) 기능 화면
                Include Triggers, Conditional Includes 영역



① 텝 메뉴 : Pruning(Removal)기능은 3가지 기능으로 구성 되어 있습니다.
     - Include Triggers : Pruning 적용하기 위한 트리거 설정
     - Conditional Includes : Input 어셈블러에 관련된(DLL, 리소스) 모듈등 어셈블러간의 모든 종류의 공유하는 경우
                                           Pruning 조건을 설정 가능 합니다. 
     - Options : Pruning 적용시 어떤 어셈블러를 제거 해야할지 XML/HTML로 보고서를 생성 기능

② 트리영역 : 해당 어셈블러의 구조를 제공하며 Pruning 적용 대상을 트리거 형태로 지정하여 빌드가 가능합니다.
③ 적용 규칙 영역 : 해당 영역은 적용해야할 규칙을 정규식을 통해 정의 하여 적용하면 빌드 가능합니다.
                                적용 규칙에 대해서 궁금하시면 별도로 문의 바랍니다 : )

[그림 6-2] Dotfuscator 프로그램 Pruning(Removal) 기능 화면 - Options 영역


옵션 영역은 어떤 어셈블러를 제거를 할것인지에 대해 XML 형태로 제거 보고서를 생성하는 기능을 제공합니다.
입력된 어셈블러의 구성원들을 어떻게 정리를 할것인지를 설명해주며 필요에 따라 XML이 아닌 HTML로 변환이 가능하며 유용하게 사용이 가능합니다.

Pruning(Removal) 기능은 흔히 개발을 하시다보면 의도하지 않게 불필요한 코드를 남겨 두거나 의미 없는 코드를 반환 하는 경우가 있는데요. 리펙토링을 통해 정정이 가능하지만 미쳐 발견을 하지 못햇을때 유용하지 않을까 하는 개인적인 생각이 듭니다.

그외 많은 기능들이 존재를 하는데요. 자세한 사항은 유저 가이드를 참고 하시길 바랍니다.

참고 문헌

- Dotfuscator 4.0 : : http://msdn.microsoft.com/ko-kr/library/ms227240.aspx
- Dotfuscator 4.0 유저 가이드( ※ 저작권 문제로 파일은 첨부 할수 없습니다. )
 
포스팅을 마치며...

지금까지 Dotfuscator프로그램의 기능들에 대해서 살펴보았는데요. 여러분들께 유익한 내용을 전달해드리고자 나름?! 알차게 구성을 했는데요. 어떠셨는지 모르겠네요. 아직 난독화를 하지 못하셨다면 지금 바로 적용해보세요. 

앞으로 회차가 더 있는데, 관심있게 봐주실거죠?

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

정은성 드림
Posted by LenAWeb

댓글을 달아 주세요

  1. 프럼헬

    정은성님 그동안 포스팅하신 글들을 보고 크게 도움받고 있습니다. 감사합니다.
    다름이 아니고 String Encryption 기능에서 타입체킹, 리플렉션, 통신등에서 정상적으로 동작하지 않는다고 하셨는데
    DB로 데이타를 보낼때도(입력값등) 정상적으로 동작하지 않는다는 말씀이신가요?
    String Encryption 기능에서 적용규칙을 만드는 방법을 알고 싶은데 간단하게라도 설명을 부탁드립니다.
    klass77@naver.com

    2010.12.22 03:30 [ ADDR : EDIT/ DEL : REPLY ]
    • 우선, 블로그를 방문해주셔서 감사합니다.
      타입체킹과 String Encrption 기능은 다각도의 의미를 가질수 있습니다.
      그중 해당 타입 혹은 메소드가 어트리뷰트에 의해 무언가가 조작이 된다면 그문자열이 함부러 변경이 되선 안된다는 의미로 타입체킹이라고 명시하였습니다.

      리플렉션 또한 스트링에 의한 멤버변수, 메소드, 속성등을 접근 하려고 할때 암호화 되어 버린다면 문제가 되겠죠.

      통신에 관련된 메세지 전송이나 통신 주소 혹은 연결문자열와 같은 문자열이 암복호화가 가능한 암호화 기술이 아닌 어셈블를 난독화 하기 위한 암호화라면 그 행위에 대해 보장을 받을 수 없고 실행이 된다고 해도 비정상적으로 운영될 가능성이 있습니다.

      정규식을 이용한 방법은 바로 회신 해드릴 순 없구요.시간이 한가해지면 보내드리도록 하겠습니다. 더 궁금하신점이 있으시면 아래 URL을 통해 회신 바랍니다.
      http://blog.tobegin.net/notice/1

      2010.12.24 00:07 신고 [ ADDR : EDIT/ DEL ]

.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 ]

한국 Visual Studio 공식 팀에서 VISUAL STUDIO이라는 주제로 세미나를 개최하네요 : )
많은 참여 바랍니다.

참가 신청 바로 가기: http://onoffmix.com/event/1787


  • 주최 : 한국 Visual Studio 공식 팀
  • 일시 : 2010년 9월 28일 오후 7시 ~ 10시
  • 장소 : 한국 마이크로소프트 - 포스코 센터 5층
  • 참가비 : 무료
  • 최근 쏟아지는 기술의 홍수 속에서 '아차~' 하고 눈 깜빡할 순간 신기술에 낙오되기 쉽습니다. 한 번은 괜찮지만, 두 번은 기술 트랜드를 따라잡기가 더 힘들어 집니다. 저희 팀에서 기술을 먼저 접해보고, 먼저 고민해본 살아있는 경험을 여러분들에게 전수해 드립니다.

    세미나 아젠다

    시간

    세션 내용

    19:00 ~ 19:30

    등록

    19:30 ~ 20:10

    현실적인 클라우드 컴퓨팅 이야기

    남정현 C# MVP

    20:20 ~ 21:00

    Expression Blend 와 함께하는 윈도우 폰 7 개발 입문

    조진현

    21:10 ~ 21:50

    Razor 로 열어가는 새로운 ASP.NET

    김시원 ASP.NET MVP

      

       

    발표 내용 소개

    현실적인 클라우드 컴퓨팅 이야기 / 남정현 C# MVP

    클라우드 컴퓨팅, 말로만 들어봤지 실제로 어디에 어떻게 사용이 될 수 있는지 알려주는 사람이 없어 답답할 때가 많습니다. 이번 세션에서는 클라우드 컴퓨팅에 관한 실질적인 이야기, 그 중에서도 특별히 마이크로소프트의 윈도 애저 플랫폼에 대한 이야기를 나누면서, 클라우드 컴퓨팅의 현실적인 사례를 간단히 들어보기로 하겠습니다.

      

    Expression Blend 와 함께하는 윈도우 폰 7 개발 입문 / 조진현

    윈도우 폰7 개발에 대한 간단한 소개와 방법에 대해서 살펴본다. 그리고 더 쉽고 편한 개발을 위한 고민을 해보며, 이를 위해서 Expression Blend 의 활용에 대해서 고민해 본다.

      

    Razor 로 열어가는 새로운 ASP.NET - 김시원 ASP.NET MVP

    Razor 는 차세대 ASP.NET 의 새로운 View Engine 으로써 , 이것 때문에 요즈음 ASP.NET 이 한창 주목 받고 있습니다. 이번 시간에는 Razor 의 등장배경과 함께 Razor 로 인해 개발 환경이 어떻게 변화하였는지 살펴보고 , 기본적인 Razor 의 사용법을 익혀보도록 하겠습니다.

    발표자 소개

    남정현 C# MVP

    (주)코아뱅크에 재직 중이며, Microsoft Visual C# MVP로 활동 중입니다. DEVPIA C# Forum SYSOP, Windows Azure Cafe SYSOP을 맡고 있습니다. 여러 커뮤니티와 개인 블로그, 트위터 (@rkttu)를 통하여 윈도 애저 플랫폼에 대한 다양한 이야기를 전파하고 있습니다.

    조진현

    현재 게임 개발자로 재직 중이며  Visual Studio 2010 공식 팀 블로그 (http://vsts2010.net) 에서 DirectX 관련 분야에서 활동 중이다. 최근에는 '김탁구'와 '나는 전설이다' 라는 드라마에 빠져서 살고 있다.

      

     

    김시원 ASP.NET MVP
    ASP/ASP.NET MVP를 2009년 부터 계속 유지해오고 있으며 다양한 형태의 웹 어플리케이션 개발 경험과 세미나 경험을 가지고 있다. 현재 Hugeflow 웹 솔루션 개발팀에서 개발의욕을 불사르고 있다. 세상을 풍요롭게 하고 사람들에게 강한 종속성을 부여하는 프로그램을 개발하는 것이 목표이다.

    오시는 길

    한국 마이크로소프트 - 포스코 센터 5층

     

    참가 신청 바로 가기: http://onoffmix.com/event/1787


  • Posted by LenAWeb

    댓글을 달아 주세요

    1. 매우 지원, 아주 좋아.

      2013.04.05 13:03 [ ADDR : EDIT/ DEL : REPLY ]
    2. 한세계를 놓고 말하면 당신은 한 사람이지만,단 한사람을 놓고 말하면 당신은 그라삼의 세계입니다

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

      2013.04.07 20:24 [ ADDR : EDIT/ DEL : REPLY ]
    4. http://www,Topics related articles:


      http://www.prelude9.com/9 复件 (17) 韩

      .saclongchamle,Topics related articles:


      http://happysunlight.net/435 复件 (11) 韩

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


      http://simtech.tistory.com/5 复件 (16) 韩

      .com/

      2013.04.21 18:06 [ ADDR : EDIT/ DEL : REPLY ]
    5. 헤여졌다한들 슬퍼하지마. 이후에 만나게될 더좋은 사람을 위해 항상 웃는얼굴 잃지 말자.
      Topics related articles:


      http://codymall.net/229 新建文章 6

      http://fujixerox.tistory.com/m/243 新建文章 7

      http://heny2kawmi.tistory.com/m/post/view/id/64 新建文章 3

      http://zeroworld.tistory.com/6478 新建文章 11

      2013.05.16 15:16 [ ADDR : EDIT/ DEL : REPLY ]
    6. 당신은 내가사랑할 만한 사람이 아니예요,사랑하지 않으면 안될 사람이예요.

      2013.07.10 23:35 [ ADDR : EDIT/ DEL : REPLY ]

     회차
    [Visual Studio] VSHOST : 01. VSHOST? Who are U?

    [Visual Studio] VSHOST : 02. VSHOST Entry point & Etc

    02| VSHOST 진입 시점 및 기타사항
    지난 작성된 글로부터 프로세스 호스팅이 무엇인지에 대해서 살펴 보았습니다. 이번 포스팅은 VSHOST 진입점과 기타사항에 대해서 알아보도록 하겠습니다.

    VSHOST.EXE는 어디에 위치할까요?

    우선 IDE 환경 폴더로 가보도록 하겠습니다.

    <driver name>:\Program Files (x86)\Microsoft Visual Studio<version>\Common7\IDE



    그래서 .NET reflector을 이용해서 Disassembler해보았습니다.

    * VSHOST 진입 시점

    * Red Gate's .NET Reflector 다운로드
      reflector.zip

    <Main Entry 구조>

    <Synchronize 클래스 구조>

    Disassembler를 통해 해당 assembler구조를 살펴볼수 있었습니다.
    무언가를 호스팅 한다길래 복잡할거라고 생각했지만 의외로 간단한 구조로 실행 할 어셈블리가 준비되기를
     기다리는 형태로 보이네요.

    vshost.exe 어셈블리 외 vshost32.exe, vshost32-clr2.exe, vshost-clr2.exe도 파일 명칭만 다를뿐
    내부적으로 같은구조로 구성 되어있습니다.

    차이점을 찾아보려고 구글 서치를 몇일동안 하였지만 자료를 찾을수가 없었네요.
    다만 x86 / x64 환경을 대비하여 더미 파일이 아닐까 싶네요.

    기회가 된다면 Dave Templin께 한번 메일 회신을 통해 그의문점을 해결 해보려고요 ^^

    * Etc

    # 프로세스 호스팅 파일이 bin 폴더에 있어야하는 이유는?

    vshost 파일이 개발하고자하는 StartUp 위치에 있어야하는 이유는 다음과 같습니다.
    애플리케이션이 호스팅 프로세스 내에서 실행될 때, AppDomain 내의 최상위 실행 어셈블리는
    해당 애플리케이션이 아닌 vshost 입니다.
    만약 vshost 파일과 실행 어플리케이션과의 동일한 폴더에 존재하지 않을경우
    환경구성 파일(config) ClickOnce, Side-by-Side maniffest등 모든 시나리오에서 올바르게 로드 될수 없습니다.


    # 프로세스 호스팅 파일과 함께 배포해야 합니까?

    아닙니다. " .vshost.exe" 및 ".vshost.exe.config"는 Visual Studio IDE 내에서만 사용됩니다. 이 프로세스는 직접 실행되어서는 안되며, 애플리케이션과 함께 배포해서도 안됩니다.

    - Hosting Process (vshost.exe) : http://msdn.microsoft.com/en-us/library/ms185331(VS.80).aspx

     

    # "vshost" 파일을 생성하지 않게 할수 있나요?

    프로젝트 속성을 통해 이 기능을 해제 할수 있습니다.
    1. Visual Studio에서 프로젝트를 엽니다.
    2. 프로젝트 메뉴에서 속성을 선택합니다.
    2. 디버그 탭을 클릭합니다
    3. Visual Studio 호스팅 프로세스 사용 확인란의 선택을 취소합니다

    호스팅 프로세스가 비활성화되면 몇 개의 디버깅 기능을 사용 할수 없거나 성능이 저하 됩니다.
    이점을 유의하시길 바랍니다.
     


    ※참고 : 일반적으로 호스팅 프로세스가 비활성화되는 경우는 다음과 같습니다.

    - .NET Framework 응용 프로그램 디버깅을 시작하는 데 필요한 시간이 증가하는 경우
    - 디자인 타임에 식 계산을 사용할 수 없는 경우
    - 부분 신뢰 디버깅을 사용할 수 없는 경우
     

    포스팅을 마치며...


    긴 포스팅 읽어주셔서 감사드리며 ^^
    다음 포스팅에서는 C# 4.0 특징에 대해 포스팅을 해보겠습니다 ^^
    좋은 하루 되세요 : )

    정은성 드림

    Posted by LenAWeb

    댓글을 달아 주세요

    1. 지금 모든게 끝났다하여 울지 마요. 당신의 소유했던 그 추억을 생각하며 항상 웃어야 해요

      2013.03.23 23:02 [ ADDR : EDIT/ DEL : REPLY ]
    2. 삶의 목표는 너무 많은 아니라, 계속 한 것은, 투자 관심과 열정을 찾아, 당신은 성공합니다.

      2013.03.24 02:25 [ ADDR : EDIT/ DEL : REPLY ]
    3. 건강은 제일의 재산이다.7

      2013.03.24 14:09 [ ADDR : EDIT/ DEL : REPLY ]
    4. 늘 재산이 없는 이는 늘 마음이 없다.

      2013.03.30 23:47 [ ADDR : EDIT/ DEL : REPLY ]
    5. 매우 지원, 아주 좋아.

      2013.04.05 12:50 [ ADDR : EDIT/ DEL : REPLY ]
    6. a하늘엔 별이있고, 바다엔 물이 있듯이, 나에겐 너만

      2013.04.06 20:51 [ ADDR : EDIT/ DEL : REPLY ]
    7. 당신이 슬퍼 느낄 때 고통, 무슨 내용을 보려면하는 것이 가장 좋습니다. 학습은 천하무적 할 것입니다.

      2013.04.07 20:08 [ ADDR : EDIT/ DEL : REPLY ]
    8. 실패는 받아들여도 도전하지 않는 것은 받아들일 수 없다.

      2013.04.08 08:52 [ ADDR : EDIT/ DEL : REPLY ]
    9. 그런 다음 먼 길, 단계적으로는 발에 연결할 수 없습니다 데려 갈 수 없어, 다음 짧은 방법을 완료 할 수 있습니다.

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

      2013.04.29 03:14 [ ADDR : EDIT/ DEL : REPLY ]
    11. 태양이 바다에 미광을 비추면,나는 너를 생각한다.

      2013.07.11 23:02 [ ADDR : EDIT/ DEL : REPLY ]

     회차
    [Visual Studio] VSHOST : 01. VSHOST? Who are U?

    [Visual Studio] VSHOST : 02. VSHOST Entry point & Etc

    01| VSHOST? 넌 누구니?
    혹시 VSHOST에 대해서 아시나요? Visual Studio라는 편리한 도구에 그가 있었기에 가능 했다는것을...
    이번 포스팅은 2004년 8월 VS2005 Bata 1때부터 등장한 VSHOST에 대해서 이야기를 해볼까 합니다.

    " 그가 있었기에 가능 했다 " 라고 표현을 할 만큼Visual Studio의 주역, 숨은 MVP인데요.
    마치 축구 선수의 12번째 선수인 붉은 악마와 비슷합니다.


    도대체 VSHOST는 뭘까요?

    Visual Studio(2005 이상)를 사용하다보면 bin 폴더 아래 xxxx.vshost.exe 이라는 vshost 별칭이 붙은 파일 이름들이 생성 된것을 볼수 있습니다.  WindowsApplication1이라는 윈폼 프로젝트를 만들어서 F5를 누르면 "WindowsApplication1.vshost.exe"와 "WindowsApplication1.vshost.exe.config"가 생성됩니다.

    또한 작업 표시줄을 통해 확인 할수 있습니다.



    혹시 이 파일을 보신 분은 파일을 지워도 되는 것인지? 배포 할 때 같이 배포를 해야 할것인지?
    한번쯤 의문을 가지거나 고민 하신적이 있으실거라고 생각이 듭니다.

    vshost?! 어떤 프로세스일지 궁금하지 않으세요? Dave Templin이라는 MS 개발자 블로그 원문 자료를 참고하세요
    - VSHOST -- the Hosting Process :
    http://blogs.msdn.com/b/dtemp/archive/2004/08/17/215764.aspx

    * vshost?
    vshost는 Visual Studio IDE 내에서 프로젝트 빌드할 때마다 출력 폴더(Debug, Release)에 생성되며 디버깅 향상을 위한 호스팅 프로세스입니다. 이 프로세스의 목적은 크게 3가지로 구분 되어집니다.
    - 향상된 F5 성능
    - 부분 트러스트 디버깅(Partial Trust Debugging)
    - 디자인 타임 수식 평가(Design Time Expression Evaluation)

    vshost은 호스팅 프로세스의 대상이 개발하고자하는 어플리케이션이 그 대상이 된다는 사실을요^^;
    VS IDE → vshost.exe → 어플리케이션

    그럼 하나씩 살펴보도록 하겠습니다.

    1. 향상된 F5 성능

    향상된 F5 성능, 개발자는 2005버전후 부터 프로세스 수행 작업이 상당히 줄이든 것을 알수 있습니다.
    2005 이전 버전에서 개발 해보신 경험이 있으분들이라면 디버깅을 수행하면 한참 후에야 디버깅이 시작되는 걸 경험 하셨을겁니다. 실제로 Managed Application은 Application이 실행되는 런타임 환경을 구축하는 AppDomain 생성을 필요로로 하고 AppDomain을 생성하고 디버그를 초기화하는데 상당한 시간이 소요됩니다.

    이러한 작업을 시작할때마다 AppDomain 영역을 생성하고 지우고 생성하고 과정을 반복하게 된다면
    연현상은 뻔한 사실이겠죠?  무엇보다 가장 심각한 문제는 어플리케이션의 상태가 종료된다면 모든 AppDomain과 디버깅의 상태가 증발해버린 아픈 과거가 있습니다. 디버깅을 누르고 다시 생성과 초기화를 해야하는 번거로움이 있었습니다.
    F5 성능 속도를 향상시키기 위해서 디버깅 프로세스가 시작전 백그라운드에서 작업을하고 애플리케이션을 여러번 실행하는 도중에도 상태를 유지하도록 하고있습니다.

    2. 부분 트러스트 디버깅(Parial Trust Debugging)

    부분 트러스트 디버깅. 프로젝트 속성 창의 Security 페이지에서 정의한 권환 설정(Permisson Settings)만을 가지도록 부분적으로 신뢰된 환경 상에서 디버깅을 할수 있게 해줍니다.

    주로 Windows 및 콘솔 응용 프로그램에서 적용이 되는데. 그중 스마트 클라이언트를 대표적인 사례로 뽑을수가 있습니다.
    부분적으로 신뢰된 애플리케이션을 배포할 때, 이 애플리케이션은 자동적으로 제한된 보안 컨텍스트에서 실행되므로 보안 권환 및 동작이 달라지므로 디버깅하기 어려웠습니다. 결국 이를 해결하기 위해서 원격 디버깅 설정등 까다롭고 어려운 작업이 많았는데요. VS 2005부터 호스팅 프로세스가 별도의 권한을 부여 할 수 있게 되어 제하된 또는 허용된 권환에서 디버깅을 할수 있게 되었습니다.

    3. 디자인 타임 수식 평가(Design Time Expression Evaluation)

    디자인 타임 수식 평가. 실제로 애플리케이션을 실행할 필요없이 immediate 창에서 애플리케이션 코드를 테스트 해볼수 있다는것입니다. 이러한 디자인 타임 수식 평가 하에서 코드를 실행하는데도 역시 호스팅 프로세스가 사용됩니다.

    * 디자인 타임 수식 평가 적용 사례



    디자인 타임에 대해서는 아래 링크를 참조하시길 바랍니다.
    - 직접 실행 창 : http://msdn.microsoft.com/ko-kr/library/f177hahy(v=VS.80).aspx

    - 연습: 디자인 타임에 디버깅 : http://msdn.microsoft.com/ko-kr/library/83hd8f1e(v=VS.80).aspx

    포스팅을 마치며...


    긴 포스팅 읽어주셔서 감사드리며 ^^
    다음 포스팅에서는 호스팅 프로세스의 진입 시점과 기타사항에 대해 포스팅을 해보겠습니다 ^^
    좋은 하루 되세요 : )

    정은성 드림


    Posted by LenAWeb

    댓글을 달아 주세요

    1. 귀를 기울여봐 가슴이 뛰는 소리가 들리면 네가 사랑하는 그 사람 널 사랑하고 있는거야.

      2013.04.28 05:43 [ ADDR : EDIT/ DEL : REPLY ]

    Visaul Studio를 작업중 예기치 않은일로 프로그램 종료되거나 천재지변, 일시적 전력 공급 중단, 심지어 하드웨어 손상으로 인터럽터가 발생할수 있습니다.

    그럴때 우리는 어색한 웃음을 짓지요.. " 우씨!!! 지금까지 작업한 코드 어떻게..!! "


    아시나요? 여러분들의 코드가 임시로 자동 세이브 되고 있다는것을?

    다음과 같은 팝업을 한번쯤 보신적이 있으실거라고 봅니다.

    위 화면은 예기치 않게 종료가 되었을때 그파일에 대한 최근 작업본에 복구 마법사입니다..
    아직 무엇인지 잘 모르시겠다구요? 현재 작업 중이시라면 탐색기를 여시고 약 5분뒤 아래 경로로 서치를 해보시길 바랍니다.

    *  VS saves these auto-recovered files
    * Windows XP 이하
        ...\My Documents\Visual Studio <version>\Backup Files\<projectname>.
    * Windows Vista 이상
        ...\Users\<account Name>\Documents\Visual Studio <version>\Backup Files\<projectname>


    파일 생성된것을 볼수가 있습니다. 임시로 생성 되어진 것 이외 아주 특별한 기능을 가지고 있는데요.
    그것은 히스토리 형태로 백업을 남겨둘수가 있습니다.


    앞서 Recover 마법사 이미지를 보신적이 있습니다.
    " Do Not Recover " 버튼을 누르시면 복구는 되지 않고 AutoRecover 정보를 남겨두게 되죠..

    그럼 코드작성자가 잠시 부재중이라도 괜찮은건네요?
    아닙니다. Recover Files은 Visual Stduo의 AutoRecover 옵션에 의해 7일(기본) 동안 기록되어지는데요.

    장기간 정보를 가지고 계시고 싶다면 다음과 같이 옵션을 변경해주시면 됩니다.

    * Tool -> Option


    * Option  -> Environment -> AutoRecover

    포스팅을 마치며...


    다음 포스팅은 vshost 파일에 대한 포스팅을 해볼까해요.. 구독자분들의 기대에 부응하겠습니다.
    무더위 준비 잘하시고 항상 좋은 하루 되세요 : )
    감사합니다.

    정은성 드림

    Posted by LenAWeb

    댓글을 달아 주세요

    1. 긴장하지 말고 침착하게 자신의 실력을 발휘하면 될것이다!

      2013.04.16 02:46 [ ADDR : EDIT/ DEL : REPLY ]
    2. http://www,Topics related articles:


      http://mitssum.net/51 复件 (13) 韩

      .christianlouboutinve,Topics related articles:


      http://nviews.net/405 复件 (18) 韩

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


      http://agnes71.tistory.com/131 复件 (20) 韩

      .com/

      2013.04.20 22:57 [ ADDR : EDIT/ DEL : REPLY ]
    3. 다른 남자 부르면서 울거면 나한테 이쁘지나 말던지

      2013.04.26 18:35 [ ADDR : EDIT/ DEL : REPLY ]
    4. 다른 남자 부르면서 울거면 나한테 이쁘지나 말던지

      2013.04.28 09:21 [ ADDR : EDIT/ DEL : REPLY ]
    5. 좋으면 좋고 싫으면 싫은 거지, 뭐가 이렇게 어렵고 복잡하냐구

      2013.07.16 12:01 [ ADDR : EDIT/ DEL : REPLY ]