Share via


Dotfuscator 솔루션

오늘날 대부분의 상업용 난독 처리기에서는 의미 없는 식별자를 적용하는 이름 바꾸기 기법을 사용합니다. 보통 이러한 식별자는 한 문자 정도로 길이가 짧습니다. 난독 처리기는 코드를 처리할 때 다음 번에 대체할 의미 없는 식별자를 선택합니다. 이름 바꾸기 방법은 겉으로는 간단해 보이지만 되돌릴 수 없다는 점에서 해싱이나 문자 집합 오프셋보다 유용합니다. 프로그램 논리는 유지되지만 이름은 무의미해집니다. 따라서 프로그램 구조를 이해하기가 아주 어려워집니다. **a, t.bb(), ct, 2s(e4)**와 같은 식별자의 의미를 **invoiceID, address.print(), userName, deposit(amount)**과 같은 개념으로 유추해 내기는 아주 어렵습니다. 그래도 프로그램 논리는 리버스 엔지니어링할 수 있습니다.

보다 정교한 형태의 난독 처리에는 PreEmptive Solutions에서 고안하여 특허를 받은 알고리즘인 Overload Induction이 사용됩니다. 보통 이름 바꾸기도 여전히 사용되지만 교묘하게 왜곡되기도 합니다. 메서드 식별자는 철저히 범위를 분석한 후에 최대한 오버로드됩니다. Overload Induction은 이전 이름을 각각 하나의 새 이름으로 바꾸는 대신 최대한 많은 메서드의 이름을 동일한 이름으로 바꿉니다. 놀랍게도 이와 같은 복잡한 상황에서도 논리는 손상되지 않습니다. 다음은 Overload Induction 기법의 강력한 기능을 보여 주는 간단한 예입니다.

난독 처리 전의 원본 소스 코드
private void CalcPayroll(SpecialList employeeGroup) {
   while (employeeGroup.HasMore()) {
        employee = employeeGroup.GetNext(true);
        employee.UpdateSalary();
        DistributeCheck(employee);
    }
}
Dotfuscator의 Overload Induction 기능으로 난독 처리한 후 리버스 엔지니어링된 소스 코드
private void a(a b) {
    while (b.a()) {
        a = b.a(true);
        a.a();
        a(a);
    }
}

이 예에서 난독 처리된 코드가 더 간단하다는 것을 알 수 있습니다. 이름 바꾸기를 수행하면 부수적으로 크기 축소 효과를 얻을 수 있습니다. 예를 들어, 길이가 20자인 이름을 **a()**로 바꾸면 많은 공간(19자)이 절약됩니다. 문자열 힙 항목을 보존하는 방식으로도 공간이 절약됩니다. 모든 이름을 ?Ba뵹?바꾼다는 것은 ?Ba뵲?한 번만 저장되므로 ?Ba뵹?이름을 바꾼 메서드나 필드가 모두 ?Ba뵺?가리킬 수 있음을 의미합니다. Overload Induction을 사용하면 가장 짧은 식별자가 계속해서 다시 사용되므로 이 효과는 더욱 커집니다. 일반적으로 Overload Induction이 사용된 프로젝트는 메서드 중 최대 70%의 이름을 **a()**로 바꿉니다.

Dotfuscator는 MSIL 파일을 처리할 때 파일에서 디버그 정보와 중요하지 않은 메타데이터를 제거합니다. 이렇게 하면 보호 및 보안 성능이 향상될 뿐 아니라 MSIL 파일의 크기가 축소됩니다.

난독 처리는 소스 코드가 아닌 컴파일된 MSIL 코드에 적용되는 프로세스입니다. 이름을 바꾸어도 개발 환경과 도구는 변경되지 않으며 소스 코드는 어떠한 방법으로도 변경되거나 읽히지 않습니다. 난독 처리된 MSIL 코드는 기능적으로 기존 MSIL 코드와 동일하며 CLR(공용 언어 런타임)에서 실행할 때 동일한 결과를 나타냅니다. 그러나 반대의 경우는 가능하지 않습니다. 강력하게 난독 처리된 MSIL을 디컴파일할 수 있다고 해도 원본 소스 코드와 비교하면 의미에 상당한 차이가 있습니다. 다음 그림은 Dotfuscator의 난독 처리 과정을 보여 줍니다.

PreEmptive Solutions에서는 Java용 DashO 도구를 필두로 하여 1996년부터 중간 컴파일된 소프트웨어를 보호하고 향상시켜 왔습니다. PreEmptive Solutions의 제품은 강력한 성능과 다양한 기능 및 특허 받은 고유 기능으로 시장을 주도해 왔습니다.

Dotfuscator는 지적 재산의 보호 문제를 염려할 필요 없이 강력한 .NET 플랫폼을 활용할 수 있도록 해주는 일련의 도구로 제공됩니다. Dotfuscator에는 세 가지 버전이 있습니다.

Dotfuscator Community Edition은 무료로 기본적인 난독 처리 기능을 제공하는 버전입니다. 식별자의 이름을 바꿔 리버스 엔지니어링에 대한 차단 수준을 올리는 것이 주 목적입니다. Dotfuscator Community Edition에는 보다 쉽게 보호하는 고급 기술이 사용되었습니다. 또한 의미 없는 임시 식별자로 이름을 바꾸기 때문에 크기가 약간 줄어듭니다.

Dotfuscator Community Edition의 제한 사항은 다음과 같습니다.

  • Visual Studio와 별개로 작동하지 않습니다. 즉, 상업용 빌드 환경에서는 사용할 수 없습니다.
  • .NET 2.0 제네릭 형식 및 메서드의 이름은 바꾸지 않습니다.
  • Microsoft Office 통합용으로 작성된 관리 코드는 Dotfuscator로 난독 처리하지 않습니다.
  • Microsoft SQL Server 2005에서 실행되는 관리 코드는 Dotfuscator로 난독 처리하지 않습니다.
  • 전역 옵션 이외의 라이브러리 모드를 지원하지 않습니다. 라이브러리 모드는 모든 입력 어셈블리에 대해 설정되거나 해제됩니다.
  • 전역 옵션 이외의 선언적 난독 처리 설정을 지원하지 않습니다. 선언적 난독 처리 설정은 모든 입력 어셈블리에 대해 설정되거나 해제됩니다.
  • CLR을 대상으로 하는 C++ 응용 프로그램을 지원하지 않습니다.

이러한 제한 사항 외에 Dotfuscator Professional Edition에 대한 자세한 내용을 보려면 PreEmptive Solutions를 참조하십시오.

Dotfuscator Community Edition 정식 사용자가 사용할 수 있는 기능은 아이콘으로 표시됩니다.

Dotfuscator Community Edition의 등록된 사용자는 Dotfuscator Enhanced Community Edition을 무료로 다운로드할 수 있습니다. 이 버전에는 Dotfuscator Community Edition의 기능과 다음 사항이 포함됩니다.

  • 심도 있는 Visual Studio 통합
  • SO-signal을 사용한 런타임 인텔리전스로 향상된 응용 프로그램 지원
  • SO-signal을 사용한 응용 프로그램 무단 변경 감지 및 알림 지원

Community Edition에는 포함되지 않았지만 Dotfuscator Enhanced Community Edition에서 사용할 수 있는 기능은 아이콘으로 표시됩니다.

Dotfuscator Professional Edition에는 Dotfuscator Community Edition의 기능과 함께 여러 기능이 포함되어 있습니다. 이 버전은 상업용 및 기업용 응용 프로그램을 만드는 조직을 위해 디자인된 업계 선두의 난독 처리기입니다. Dotfuscator Professional Edition은 디컴파일을 방해하는 우수한 보호 기능, 메모리를 절약하고 로드 시간을 향상시키는 고급 크기 축소 기능, 효율적 구성을 위한 심도 있는 Visual Studio 통합 기능, 패치를 릴리스하는 증분 난독 처리 기능, 어셈블리에 고유하게 태그를 지정하는 워터마크 삽입 기능, 전화 및 전자 메일 기술 지원 등을 제공합니다. Dotfuscator Professional Edition 정식 사용자가 사용할 수 있는 기능은 아이콘으로 표시됩니다.

Dotfuscator 제품 기능을 버전별로 비교해 보면 다음과 같습니다.

기능 Professional Edition Dotfuscator Enhanced Community Edition Community Edition
압축/잘라내기    
.NET Compact Framework에 대한 광범위한 지원    
제어 흐름 난독 처리    
향상된 Overload Induction    
증분 난독 처리    
위성 DLL의 매끄러운 난독 처리    
문자열 암호화    
어셈블리 링크    
빌드 전/후 이벤트 지원    
강력한 이름의 어셈블리를 자동으로 다시 서명    
MSBuild와 통합    
소프트웨어 워터마크 삽입    
Visual Studio와 독립적으로 실행 가능    
다양한 이름 바꾸기 체계    
PDB 디버깅 지원    
이름 바꾸기 접두사    
C++ .NET 어셈블리 지원    
자동화된 스택 추적 변환    
XML/HTML 보고서 파일    
제네릭 형식 및 메서드 지원    
빌드 스크립트와 통합    
심도 있는 Visual Studio 통합  
SO-signal을 통한 런타임 인텔리전스 사용  
SO-signal을 통한 응용 프로그램 무단 변경 감지 및 알림 사용  
교차 어셈블리 난독 처리
사용하지 않는 메타데이터 제거
이름 바꾸기
선언적 난독 처리 지원

© 2002-2007 PreEmptive Solutions. All rights reserved.