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# 용 포함)을 구현합니다.
Mono.Cecil 사용을 고려하십시오. – SLaks