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.