Die Dotfuscator-Lösung

Heutzutage wenden die meisten kommerziellen Obfuscators eine Umbenennungstechnik für einfache Bezeichner an. Diese können aus nur einem Zeichen bestehen, was häufig der Fall ist. Bei der Verarbeitung des Codes wählt der Obfuscator den nächsten verfügbaren einfachen Bezeichner als Ersatz aus. Dieses scheinbar einfache Umbenennungsschema besitzt einen Vorteil gegenüber dem Hashing oder dem Zeichensatzoffset: Es ist nicht umkehrbar. Während die Programmierlogik gleich bleibt, werden die Namen unverständlich. Das Verständnis wird an diesem Punkt stark erschwert. Bei Bezeichnern wie a, t.bb(), ct, und **2s(e4)**bedarf es einiger Anstrengung, um darin den semantischen Zweck von Konzepten wie invoiceID, address.print(), userName, und **deposit(amount)**zu erkennen. Dennoch kann die Programmlogik zurückentwickelt werden.

Eine weiter reichende Form des Verbergens verwendet die Überladungsinduktion, einen von PreEmptive Solutions entwickelten, patentierten Algorithmus. Die einfache Umbenennung wird in einer ausgeklügelten Variante verwendet. Methodenbezeichner werden nach einer umfassenden Analyse der Geltungsbereiche im größtmöglichen Umfang überladen. Statt einen alten Namen durch einen neuen Namen zu ersetzen, werden durch Überladungsinduktion so viele Methoden wie möglich mit dem gleichen Namen umbenannt. Nach solch weit reichender Verbergung ist die Logik noch intakt, aber völlig unverständlich. Im folgenden einfachen Beispiel wird die Wirksamkeit des Überladungsinduktionsverfahrens veranschaulicht:

Ursprünglicher Quellcode vor dem Verbergen
private void CalcPayroll(SpecialList employeeGroup) {
   while (employeeGroup.HasMore()) {
        employee = employeeGroup.GetNext(true);
        employee.UpdateSalary();
        DistributeCheck(employee);
    }
}
Zurückentwickelter Quellcode
nach Dotfuscator-Überladungsinduktion
private void a(a b) {
    while (b.a()) {
        a = b.a(true);
        a.a();
        a(a);
    }
}

Das Beispiel zeigt, dass der verborgene Code kompakter ist. Die Reduktion des Umfangs ist ein positiver Nebeneffekt des Umbenennens. Wenn ein Name beispielsweise 20 Zeichen lang ist, wird durch Umbenennen in a() viel Platz gespart – 19 Zeichen, um genau zu sein. Die Umbenennung verringert außerdem den für die Einträge auf dem Zeichenfolgenheap benötigten Speicherplatz. Durch Umbenennen aller Bezeichner in "a" muss "a" nur einmal gespeichert werden, und jede Methode und jedes Feld, das in "a" umbenannt wurde, kann darauf verweisen. Überladungsinduktion verstärkt diesen Effekt, da die kürzesten Bezeichner fortlaufend wiederverwendet werden. Bei einem durchschnittlichen Projekt werden nach der Überladungsinduktion bis zu 70 % der Methoden in a() umbenannt.

Dotfuscator entfernt bei der Verarbeitung außerdem Debuginformationen und unwesentliche Metadaten aus der MSIL-Datei. Neben der Verbesserung des Schutzes und der Sicherheit führt dies auch zu einer Reduktion der Größe der MSIL-Dateien.

Beachten Sie dabei, dass die Verbergung als Prozess auf bereits kompilierten MSIL-Code und nicht auf Quellcode angewendet wird. Die Entwicklungsumgebung und -tools werden nicht verändert, um die Umbenennung zu ermöglichen. Der Quellcode wird zu keinem Zeitpunkt gelesen, geschweige denn geändert. MSIL-Code funktioniert nach Verbergung wie herkömmlicher MSIL-Code und wird in der CLR (Common Language Runtime) mit gleich bleibenden Ergebnissen ausgeführt. (Der Umkehrschluss trifft allerdings nicht zu. Selbst wenn es möglich wäre, MSIL-Code nach starker Verbergung zu dekompilieren, wäre der semantische Unterschied im Vergleich zum ursprünglichen Quellcode signifikant.) In der folgenden Abbildung wird der Ablauf der Dotfuscation dargestellt.

PreEmptive Solutions befasst sich seit 1996 mit dem Schutz und der Optimierung von in Zwischencode kompilierter Software, zunächst mit der Entwicklung der DashO-Tools für Java. Ihre Produkte wurden aufgrund ihrer Leistungsfähigkeit, der Vielseitigkeit und der einzigartigen patentierten Features zu Marktführern.

Dotfuscator wird als Gruppe von Tools angeboten, mit der Sie die Vorteile der leistungsfähigen .NET-Plattform nutzen können, ohne sich Sorgen um den Schutz Ihres geistigen Eigentums machen zu müssen. Dotfuscator ist in drei Editionen verfügbar:

Dotfuscator Community Edition ist eine kostenlose Version, die grundlegende Funktionen zum Verbergen bietet. Ihr Hauptzweck besteht darin, Bezeichner umzubenennen, um ein Reverse Engineering zu erschweren. Dotfuscator Community Edition umfasst fortschrittliche Technologien, um diesen Schutz zu erleichtern. Zusätzlich wird eine Größenreduktion erzielt (als Folge des Umbenennens in einfache Bezeichner).

Dotfuscator Community Edition bietet keine der folgenden Funktionen:

  • Von Visual Studio unabhängige Ausführung, sodass die Verwendung in einer kommerziellen Buildumgebung ausgeschlossen ist
  • Umbenennen von generischen .NET 2.0-Typen und -Methoden
  • Anwenden von Dotfuscator auf verwalteten Code für die Integration von Microsoft Office
  • Anwenden von Dotfuscator auf verwalteten Code für die Ausführung in Microsoft SQL Server 2005
  • Unterstützung des Bibliothekenmodus als nicht globale Option (der Bibliothekenmodus ist entweder für alle Eingabeassemblys aktiviert oder deaktiviert)
  • Unterstützung von Einstellungen für das deklarative Verbergen als nicht globale Optionen (Einstellungen für das deklarative Verbergen sind entweder für alle Eingabeassemblys aktiviert oder deaktiviert)
  • Unterstützung von C++-Anwendungen, die auf die CLR abzielen

Wenn Sie diese Einschränkungen überwinden möchten, wenden Sie sich an PreEmptive Solutions, um weitere Informationen über Dotfuscator Professional Edition zu erhalten.

Unter der Lizenz von Dotfuscator Community Edition verfügbare Features sind mit dem Symbol gekennzeichnet.

Dotfuscator Enhanced Community Edition steht registrierten Benutzern von Dotfuscator Community Edition kostenlos als Download zur Verfügung. Diese Edition umfasst neben den in Dotfuscator Community Edition enthaltenen folgende weitere Features:

  • Enge Integration in Visual Studio
  • Unterstützung für das Hinzufügen von Laufzeitintelligenz zu Anwendungen mit SO-Signal
  • Unterstützung für Manipulationserkennung und -benachrichtigung mit SO-Signal

In Dotfuscator Enhanced Community Edition verfügbare Features, die in Dotfuscator Community Edition nicht enthalten sind, sind mit dem Symbol gekennzeichnet.

Dotfuscator Professional Edition enthält die Features von Dotfuscator Community Edition und vieles mehr. Dies ist der Branchenführer unter den Obfuscators und für Organisationen gedacht, die kommerzielle Software und Unternehmensanwendungen herstellen. Dotfuscator Professional Edition bietet einen überlegenen Schutz vor Dekompilierung, eine erweiterte Größenreduzierung, um den Speicherbedarf zu verringern und Ladezeiten zu verbessern, eine nahtlose Konfiguration durch enge Integration in Visual Studio, inkrementelles Verbergen für die Veröffentlichung von Patches, Wasserzeichen für die eindeutige Markierung von Assemblys sowie technischen Support über Telefon und E-Mail. Unter der Lizenz von Dotfuscator Professional Edition verfügbare Features sind mit dem Symbol gekennzeichnet.

Die folgende Tabelle zeigt einen Vergleich der jeweiligen Dotfuscator-Produktfeatures:

Feature Professional Edition Dotfuscator Enhanced Community Edition Community Edition
Komprimieren/Pruning    
Umfassende Unterstützung für .NET Compact Framework    
Verbergen der Ablaufsteuerung    
Erweiterte Überladungsinduktion    
Inkrementelles Verbergen    
Nahtloses Verbergen von Satelliten-DLLs    
Zeichenfolgenverschlüsselung    
Assemblylinking    
Unterstützung für Prä- und Postbuildereignisse    
Automatisches Neusignieren von Assemblys mit starkem Namen    
Integration in MSBuild    
Softwarewasserzeichen    
Von Visual Studio unabhängige Ausführung    
Verschiedene Umbenennungsschemas    
PDB-Debugunterstützung    
Umbenennungspräfix    
Unterstützung von C++ .NET-Assemblys    
Automatisierte Stapelüberwachungsübersetzung    
XML-/HTML-Berichtdateien    
Unterstützung für generische Typen und Methoden    
Integration durch Buildskripts    
Enge Integration in Visual Studio  
Laufzeitintelligenz mit SO-Signal  
Manipulationserkennung und -benachrichtigung mit SO-Signal  
Assemblyübergreifendes Verbergen
Entfernen nicht verwendeter Metadaten
Umbenennung
Unterstützung für deklaratives Verbergen

© 2002-2007 PreEmptive Solutions. Alle Rechte vorbehalten.