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