Condividi tramite


Reflection e caricamento dinamico di classi

Le funzionalità di reflection e caricamento dinamico delle classi costituiscono strumenti estremamente potenti dell'architettura .NET. Questo livello di personalizzazione dei programmi di runtime impedisce a Dotfuscator di determinare esattamente se è possibile rinominare in modo sicuro tutti i tipi caricati in un determinato programma.

Si consideri il frammento di codice C# riportato di seguito.

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

L'uso di questo codice consente di caricare un tipo in base al nome e di crearne un'istanza in modo dinamico. Il nome proviene inoltre da una stringa immessa dall'utente oppure da un database di runtime, da un altro programma e così via.

Dotfuscator non è in alcun modo in grado di prevedere i nomi di tipo che verranno immessi dall'utente. La soluzione consiste nell'escludere i nomi di tutti i tipi potenzialmente caricabili. È comunque possibile eseguire la ridenominazione di metodi e campi. In questo caso, un ruolo importante è svolto dall'impostazione manuale della configurazione utente e dalla conoscenza dell'applicazione sottoposta a offuscamento con Dotfuscator.

Nella maggior parte dei casi, la situazione è meno complessa. Si consideri ad esempio una lieve variazione.

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

In questo caso, è evidente che è necessario escludere solo un subset di tipi, ovvero i tipi che implementano MyInterface.

© 2002-2007 PreEmptive Solutions. Tutti i diritti riservati.