2016-07-11 14 views
1

최근에는 런타임에 이름 바꾸기 기능뿐만 아니라 다양한 다른 난독 화 사전 컴파일을 제공하는 솔루션을 제안했습니다. Roslyn을 사용하는 것이 최선의 방법이라고 생각하지만, 귀하가 가질 수있는 통찰력을 제공해주십시오.Pre-Compile - Roslyn 생성 코드 난독 화

궁극적 인 목표는 다음과 같습니다. 최종 사용자가 런타임시 어셈블리의 텍스트 버전으로 생성되는 다양한 옵션을 선택할 수 있습니다. 그런 다음 Roslyn을 사용하여 .exe 파일을 생성합니다. EXE가 생성되기 전에 런타임에서 난독 화가 가능한지 궁금했습니다. 이 방법으로 vars 등의 이름을 바꿀 수 있습니다.

+0

Mono.Cecil 사용을 고려하십시오. – SLaks

답변

5

C# 소스 코드를 안정적으로 변형 할 수있는 도구를 사용할 수 있습니다.

Roslyn은 하나지만 재미있는 방식입니다. 당신은 프로그램을 수정하고 객체 코드를 생성 할 수 있습니다. 그게 효과가있다.

기타 Program Transformation Systems (PTS)소스 코드를 수정하여이 작업을 수행 할 수 있습니다. PTS는 소스 코드를 읽고 컴파일러 데이터 구조 (예 : AST)를 작성하며 AST를 수정 한 다음 수정 된 AST에서 소스 코드를 다시 생성 할 수 있습니다. 그렇게하면 당신은 난독 화 된 코드를 볼 수 있습니다. 나중에 C# 컴파일러로 컴파일 할 수 있습니다. 좋은 PTS는이 같은 형태로 대상 언어의 구문의 관점에서 코드 변환을 작성하게됩니다 :

if you see *this pattern*, replace it by *that pattern* 

rule <name> <patternvariables> "thispattern" -> "thatpattern"; 

는 PTS 사용으로 아래에 표현, 당신은 틀림없이 임의의 수 기능 및 변수 이름 변경, 코드 플로우 스크램블링 및 데이터 플로우 스크램블링을 포함한 소스 코드의 변경. 예를 들어, 당신은 혼란을 추가하려면이 규칙을 사용할 수 있습니다

rule scramble_if_then(c: condition, b: block): statement -> statement 
     " if (\c) \b " -> "int temp = \c?4:3; 
          while (temp>3) {\b; temp--; }"; 

이 규칙은 바보/조금 간단하지만 난 당신이 읽을 수있는 소스 코드 변환을 쓸 수있는 지점하게 생각합니다. 이러한 규칙이 많은 경우 특히 규칙이 정교한 변환을 수행하는 경우 코드를 많이 뒤죽박죽 처리합니다.

우리는 DMS Software Reengineering Toolkit을 사용하여 name-scrambling obfuscators (C# 용 포함)을 구현합니다.