.NET Code schützen Projekt.NET Informationsmaterial zum Schützen des.net Codes Version 1.0 Autor: Status: Ablage: Empfänger: Seiten: D. Hoyer 1 / 6 Verteiler : Dokument1 Seite 1 von 1
Änderungsprotokoll Version Datum Name / Kürzel Bemerkung 1.0 21.2.2007 Dennis Hoyer Erstellung Prüfung / Freigabe Version Datum Rolle Name / Kürzel Bemerkung Referenzierte Dokumente Referenz Dokument Version / Ausgabe Seite 2 von 2
Inhaltsverzeichnis 1. Schützen Sie Ihren.NET Quellcode 4 1.1. Obfuscating 4 1.1.1. Original 4 1.1.2. Obfuscated Quellcode 4 1.1.3. Dynamischer Aufruf 5 1.1.4. Obfuscated Quellcode 5 1.2. Quellcode Verschlüsselung 5 1.3. Native Code Kompilierung 6 Seite 3 von 3
1. Schützen Sie Ihren.NET Quellcode Aufgrund unseres Projektumfelds ist es nötig gewesen eine Möglichkeit zu finden das darin enthaltene Know-How entsprechend zu schützen. Es gibt mehrere Methoden, diese werden hier einzeln aufgeführt. 1.1. Obfuscating Es gibt eine Methode das sogenannte Obfuscating. Bei dieser Methode wird der Quellcode durchlaufen und es findet eine Umbenennung der Variable Methode und Klassen statt. Doch bedenken Sie, dass diese Methode nicht Ihren Quellcode schützt, sondern verkompliziert für andere Entwickler. Bsp. 1.1.1. Original Private const Prozent as double = 2.00 Public Function Berechne (Einlage as double) as double Dim Summe as double Summe = Einlage * Prozent Return Summe End Function 1.1.2. Obfuscated Quellcode Private const ab as double = 2.00 Public Function d(a as double) as double Dim b as double b = a * ab Return ab End Function Sie sehen das Ergebnis oben ist einfach nur eine allgemeine Umbenennung der Inhalte, Algorithmen sind klar zu erkennen. Bei dieser Methode gab es jedoch noch ein weiteres Kriterium welches gegen diese Methode spricht. Sobald Sie dynamisch auf Klassen, Funktionen, Methoden oder Eigenschaften zugreifen funktioniert diese Methode nicht. Einige Obfuscator bieten die Möglichkeit Öffentliche(Public) Methode, Eigenschaften, Klassen nicht umzubenennen, sondern lediglich nicht öffentliche. Jedoch wird dadurch das Einsehen in den Quellcode wieder erleichtert. Seite 4 von 4
Bsp. 1.1.3. Dynamischer Aufruf Public Class Auto Public sub Bremsen() End Class Public Module main Public sub main() Dim Fahrzeug as new Auto Fahrzeug.invoke( Bremsen ) End Module 1.1.4. Obfuscated Quellcode Public Class a Public sub b() End Class Public Module a Public sub main() Dim d as new a d.invoke( Bremsen ) End Module Wie erkennbar ist, kann die Methode Bremsen nicht gefunden werden, es wird eine Exception ausgelöst werden. Wenn sie diese Methode benutzen wollen, sollten Sie die Funktionen des Programms in einer Testversion testen, ggf. sollten Sie Ihren Quellcode bei der Entwicklung ein diese Methodik anpassen, und dynamische Aufrufe meiden. 1.2. Quellcode Verschlüsselung Eine ähnliche Methodik ist das Verschlüsseln des Quellcodes. Dabei werden auch die Variablen, Methoden, Funktionen, Eigenschaften, Klassen umbenannt. Jedoch ist diese Methode aus meiner sicht noch einfacher herauszubekommen. Denn wenn man einmal den Schlüssel hat, auf welchen Umwegen auch immer, dann kann ich Ihn komplett zurückwandeln. Dies ist mit einem Obfuscator nicht möglich, den dieser benutzt kein Verschlüsselungsschlüssel sondern benutzt immer wieder gleiche Namen für die Funktionen, etc. um dies zu verkomplizieren. Seite 5 von 5
1.3. Native Code Kompilierung Bei weiteren Recherchen ist eine neue Softwarelösung aufgetaucht, der.net Reactor. Es ist die aktuell favorisierte Lösung zum Schützen des Quellcodes ( Stand 23.01.2007 ).Die Software kompiliert nach einigen Einstellungen den Quellcode zieht die kompletten Algorithmen aus den.net Assemblies heraus und kompiliert native DLLs mit diesen Algorithmen. In den.net Assemblies bleiben die Rümpfe der Funktionen, Klassen, etc. vorhanden, jedoch werden Externe DLL Aufrufe ausgeführt. Dabei ist zu beachten, das die Zahl der Dateien sich verdoppelt, für jede Datei wird eine zusätzliche Datei erzeugt, in Native Code. Dadurch dass dieser Code nicht einsehbar ist, besteht eine hochgradige Möglichkeit sein Wissen zu schützen, selbstverständlich ist aber jeder Maschinencode nach Assembler zurück zu übersetzen. Wenn wirklich jemand den Quellcode, das Wissen haben will, kann er dies auch bekommen, die Chance besteht nur darin, es so zu verkomplizieren, das der Hacker aufgibt. Seite 6 von 6