Partager via


Réflexion et chargement dynamique de classes

La réflexion et le chargement dynamique de classes sont des outils extrêmement puissants de l'architecture .NET. Ce niveau de personnalisation du programme runtime empêche Dotfuscator de déterminer de façon infaillible s'il peut renommer en toute sécurité l'ensemble des types chargés dans un programme donné.

Examinez le fragment de code (C#) suivant :

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

Ce code charge un type par nom et l'instancie de façon dynamique. En outre, le nom provient d'une chaîne entrée par l'utilisateur (ou d'une base de données runtime, ou d'un autre programme, etc.).

Dotfuscator ne dispose à l'évidence d'aucun moyen de prévoir les noms de types qui seront entrés par l'utilisateur. La solution consiste à exclure les noms de tous les types pouvant être chargés (notez que l'attribution d'un nouveau nom aux méthodes et aux champs peut toujours être effectuée). C'est ici que la configuration manuelle par l'utilisateur (et une certaine connaissance de l'application obfusquée à l'aide de Dotfuscator) joue un rôle important.

La situation est souvent moins critique. Examinez cette variante :

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

Il est immédiatement évident que seul un sous-ensemble de types doit être exclu : ceux qui implémentent MyInterface.

© 2002-2007 PreEmptive Solutions. Tous droits réservés.