2016-09-29 2 views
-1

.net 어셈블리 (exe, dll)를 암호화하거나 안티 디버그 기술을 적용 할 방법을 찾고 있습니다. 어셈블리에 네이티브 바이트 코드가 아니라 CIL 코드가없고 쉽게 디 컴파일 될 수 있다는 것을 알고 있습니다.
솔직히 말해서 나는 .NET에 아주 익숙하다고 말하고있다. 저는 웹 개발자의 배경에서 왔고 C#은 취미 일 뿐이므로 실행 파일을 암호화 할 필요가 없지만 dotfuscator와 같은 솔루션이 어떻게 작동하는지 궁금해했습니다.
또한 파일을 메모리에서 해독해야만 파일을 실행할 수 있지만 네이티브 코드가 포함 된 어셈블리와 동일합니다.
.NET 실행 파일을 암호화하는 것이 유용할지 여부에 대한 토론이 필요하지 않습니다. 나는 암호화 또는 안티 디버그 기술 (예 : 제어 흐름 난독 화)을 적용하기 위해 취할 수있는 이론적 접근에만 관심이있다. 아래 예제와 관련 질문에서 알 수 있듯이 제 지식은 0보다 훨씬 적습니다. 코드가 컴파일되고 실행되면 나는 기쁜 애플리케이션 개발자이지만 코드를 더 깊이 파고 싶습니다.암호화 .net 어셈블리/안티 디버그 기술

using System; 
namespace HelloWorld 
{ 
    class Hello 
    { 
     static void Main() 
     { 
      if(1 < 2) 
      { 
       if(3 == 3) 
       { 
        if ("a" != "b") 
        { 
         if(0 != 1) 
         { 
          Console.WriteLine("Hello World!"); 
         } 
        } 
       } 
      } 
      Console.ReadLine(); 
     } 
    } 
} 

쓸모없는 조건을 제어 흐름 난독 처리로 분류 할 수 있습니까?
제안 사항이나 흥미로운 링크 또는 권장 사항을 알려주십시오.

+0

난독 화 코드는 개발자가 코드를 더 복잡하게 만들어 대개 더 모호한 버그로 변환하기 때문에 역효과를 낳습니다. 개발자가 노력해야하는 핵심 사항은 코드를 이해하기 쉽고 일반적으로 버그가 적고 유지 관리가 용이하다는 점입니다. – zaph

+0

중요한 점은, 이것이 '암호화'가 아니라는 것입니다. 여러분이 묻는 것은 난독 화입니다. dll로 코드를 '암호화'한 다음 해독 된 데이터를 assembly.load하여 효과적으로 앱에서 암호화 된 쓰레기를 배포 할 수 있습니다. 그러나 이것이 성공하려면 적어도 엔트로피가 높은 비 관리 래퍼 (C++ 앱)를 작성해야 관리 코드를 해독하고 실행해야합니다. 전반적으로 지연은 의심스러운 이익을 위해 중요 할 수 있습니다. – zaitsman

답변

1

Dotfuscator과 같은 코드를 난독 화하는 데 도움이되는 상용 도구가 있습니다. 또 다른 옵션은 ngen을 사용하여 MSIL을 원시 코드로 컴파일하는 것입니다.

사용자 정의 '제어 흐름 난독 화'가 출시 될 때 최적화 될 것으로 생각합니다.

+0

나는 ngen을 살펴볼 것입니다. 또한 빌드 precess 동안 최적화에 대해 알지 못했습니다. 오늘 밤 이것을 시험해보고 디 컴파일 된 코드를 살펴 보겠습니다. – Seppel

+0

Visual Studio에서 프로젝트 설정에서 코드 최적화 옵션을 찾을 수 있습니다. 이것은 JIT 컴파일 동안만큼 MSIL 최적화가 아닙니다. 그러나 당신이 사용한 조건은 상수를 기반으로하기 때문에 언제나 사실 일 것이라고 쉽게 판단 할 수 있습니다. 따라서 내 생각 엔 그들은 최적화 될 것이라고 생각하지만 항상 확인하는 것이 좋습니다. –

+0

당신이 옳았습니다. 조건이 최적화되었습니다. – Seppel