Reflektion und dynamisches Laden von Klassen

Reflektion und dynamisches Laden von Klassen sind äußerst leistungsstarke Tools der .NET-Architektur. Durch diesen Grad an Programmanpassung zur Laufzeit wird Dotfuscator daran gehindert, zuverlässig zu bestimmen, ob alle der in einem bestimmten Programm geladenen Typen problemlos umbenannt werden können.

Betrachten Sie folgendes Codefragment (C#):

public object GetNewType() { 
   Type type = Type.GetType( GetUserInputString(), true ); 
   object newInstance = Activator.CreateInstance( type ); 
   return newInstance; 
} 

Durch diesen Code wird ein Typ nach dem Namen geladen und dynamisch instanziiert. Der Name stammt zudem aus einer Zeichenfolgeneingabe des Benutzers. (Er könnte auch aus einer Laufzeitdatenbank, einem anderen Programm usw. stammen.)

Dotfuscator kann natürlich nicht vorhersehen, welcher Name vom Benutzer eingegeben wird. Die Lösung besteht darin, alle Namen von potenziell zu ladenden Typen auszuschließen. (Beachten Sie, dass die Umbenennung von Methoden und Feldern weiterhin durchgeführt werden kann.) Hierbei spielt die manuelle Konfiguration durch den Benutzer eine wichtige Rolle, wie auch eine gewisse Kenntnis der mit Dotfuscator zu behandelnden Anwendung.

In vielen Fällen ist die Situation nicht so problematisch. Betrachten Sie diese Variante:

public MyInterface GetNewType() { 
   Type type = Type.GetType( GetUserInputString(), true ); 
   object newInstance = Activator.CreateInstance( type ); 
   return newInstance as MyInterface; 
} 

Hier ist sofort zu erkennen, dass nur eine Teilmenge der Typen ausgeschlossen werden müssen, nämlich solche, die MyInterface implementieren.

© 2002-2007 PreEmptive Solutions. Alle Rechte vorbehalten.