Sie können jedes Werkzeug verwenden, das C# Quellcode zuverlässig transformiert.
Roslyn ist eine aber auf eine lustige Art; Sie können das Programm ändern und Objektcode erzeugen. Das sollte funktionieren.
Andere Program Transformation Systems (PTS) können dies tun, indem Sie die Quelle Code ändern. Ein PTS liest Quellcode, erstellt Compilerdatenstrukturen (z. B. ASTs), lässt Sie die ASTs ändern und kann dann den Quellcode aus dem modifizierten AST regenerieren. Auf diese Weise können Sie den verschleierten Code sehen; Sie können es später immer mit dem C# -Compiler kompilieren. Eine gute PTS wird Ihnen Code-Transformationen in Bezug auf die Syntax der Zielsprache in einer Form wie folgt schreiben:
if you see *this pattern*, replace it by *that pattern*
ausgedrückt unten als
rule <name> <patternvariables> "thispattern" -> "thatpattern";
Mit einem PTS können Sie wohl willkürlich machen Änderungen am Quellcode, einschließlich der Umbenennung von Funktionen und Variablen, Code-Flow-Scrambling und Datenfluss-Scrambling. Zum Beispiel könnten Sie diese Regel verwenden, um Verwirrung fügen:
rule scramble_if_then(c: condition, b: block): statement -> statement
" if (\c) \b " -> "int temp = \c?4:3;
while (temp>3) {\b; temp--; }";
Diese Regel ist ein bisschen einfach/albern, aber ich denke, dass es den Punkt macht, die Sie lesbare Quellcode-Transformationen schreiben können. Wenn Sie viele solcher Regeln haben, wird es den Code sehr verschlingen, besonders wenn Ihre Regeln komplizierte Transformationen durchführen.
Wir verwenden unsere DMS Software Reengineering Toolkit zur Implementierung name-scrambling obfuscators, einschließlich einer für C#.
Verwenden Sie Mono.Cecil. – SLaks