Partager via


La solution Dotfuscator

De nos jours, la plupart des obfuscateurs commerciaux utilisent une technique d'attribution d'un nouveau nom qui applique des identificateurs triviaux. Ceux-ci peuvent être constitués d'un seul caractère. Lorsque l'obfuscateur traite le code, il sélectionne l'identificateur trivial disponible suivant pour la substitution. Ce schéma d'attribution d'un nouveau nom apparemment simple présente un avantage sur le hachage ou le décalage de jeu de caractères : il ne peut pas être inversé. Si la logique du programme est conservée, les noms n'ont en revanche plus aucun sens. À ce stade, la compréhension humaine est fortement compromise. Avec des identificateurs tels que a, t.bb(), ct et 2s(e4), il est difficile de dénicher des concepts tels que invoiceID, address.print(), userName et deposit(amount). Néanmoins, la logique du programme peut faire l'objet d'une ingénierie à rebours.

Une forme plus profonde d'obfuscation fait appel à la méthode Overload Induction, un algorithme breveté imaginé par PreEmptive Solutions. L'attribution d'un nouveau nom trivial est toujours utilisée, mais astucieusement revisitée. Les identificateurs de méthode sont surchargés au maximum après analyse exhaustive de la portée. Plutôt que de substituer chaque ancien nom par un nouveau nom, la méthode Overload Induction renomme autant de méthodes que possible avec le même nom. À l'issue de cette obfuscation profonde, la logique, bien qu'elle ne soit pas détruite, n'est plus compréhensible. L'exemple simple qui suit illustre la puissance de la méthode Overload Induction :

Code source d'origine avant l'obfuscation
private void CalcPayroll(SpecialList employeeGroup) {
   while (employeeGroup.HasMore()) {
        employee = employeeGroup.GetNext(true);
        employee.UpdateSalary();
        DistributeCheck(employee);
    }
}
Code source régénéré suite à l'obfuscation avec la méthode Overload Induction
private void a(a b) {
    while (b.a()) {
        a = b.a(true);
        a.a();
        a(a);
    }
}

L'exemple montre que le code obfusqué est plus compact. L'attribution d'un nouveau nom présente un effet secondaire positif, à savoir la réduction de la taille du code. Par exemple, si vous remplacez un nom de 20 caractères par a(), vous gagnez un espace important (19 caractères dans ce cas). L'attribution d'un nouveau nom permet également de gagner de l'espace en conservant des entrées de tas de chaînes. Le fait de tout remplacer par « a » signifie que « a » est stocké une seule fois et que chaque méthode ou champ renommé en « a » peut pointer sur cette entrée. La méthode Overload Induction renforce cet effet, car les identificateurs les plus courts sont réutilisés en permanence. En général, dans un projet basé sur la méthode Overload Induction, jusqu'à 70 % des méthodes peuvent être renommées en a().

Lors du traitement, Dotfuscator supprime du fichier MSIL les informations de débogage et toute métadonnée non essentielle. Outre l'amélioration de la protection et de la sécurité, cela contribue également à la réduction de la taille des fichiers MSIL.

Il est important de comprendre que l'obfuscation est un processus appliqué au code MSIL compilé, et non au code source. L'environnement et les outils de développement ne changent donc pas pour la prise en charge de l'attribution d'un nouveau nom. Le code source n'est jamais modifié, ni même lu, d'aucune façon. D'un point de vue fonctionnel, le code MSIL ayant fait l'objet d'une obfuscation équivaut au code MSIL classique et s'exécute sur le Common Language Runtime (CLR) avec des résultats identiques. L'inverse n'est cependant pas vrai. Même s'il était possible de décompiler du code MSIL ayant fait l'objet d'une obfuscation profonde, les différences sémantiques par rapport au code source d'origine seraient importantes. L'illustration suivante représente le flux du processus d'obfuscation.

PreEmptive Solutions protège et améliore les logiciels compilés en langage intermédiaire depuis 1996, avec à l'origine ses outils DashO pour Java. Ses produits occupent une place de choix sur le marché en raison de leur puissance, de leur versatilité et de leurs fonctionnalités uniques brevetées.

Dotfuscator est proposé sous la forme d'une gamme d'outils vous permettant de tirer parti de la puissante plateforme .NET sans vous soucier de la protection de votre propriété intellectuelle. Dotfuscator existe en trois versions :

Dotfuscator Community Edition est une version gratuite qui offre une obfuscation de base. Son principal objectif est de renommer les identificateurs pour faire barrage à l'ingénierie à rebours. Dotfuscator Community Edition intègre des technologies avancées afin de faciliter cette protection. En outre, la taille est réduite, suite au remplacement des noms par des identificateurs triviaux.

Dotfuscator Community Edition n'effectue pas les tâches suivantes :

  • fonctionner séparément de Visual Studio, ce qui signifie qu'il ne peut pas être utilisé dans un environnement de génération commercial ;
  • renommer les types et méthodes génériques .NET 2.0 ;
  • obfusquer le code managé écrit pour l'intégration de Microsoft Office ;
  • obfusquer le code managé destiné à s'exécuter dans Microsoft SQL Server 2005 ;
  • prendre en charge le mode bibliothèque autrement qu'en tant qu'option globale (le mode bibliothèque est activé ou désactivé pour tous les assemblys d'entrée) ;
  • prendre en charge les paramètres d'obfuscation déclarative autrement qu'en tant qu'options globales (les paramètres d'obfuscation déclarative sont activés ou désactivés pour tous les assemblys d'entrée) ;
  • prendre en charge les applications C++ qui ciblent le CLR.

Si ces limitations vous posent un problème, contactez PreEmptive Solutions pour plus d'informations sur Dotfuscator Professional Edition.

Les fonctionnalités disponibles pour les titulaires d'une licence Dotfuscator Community Edition sont signalées par une icône.

Dotfuscator Enhanced Community Edition est proposé en téléchargement gratuit aux utilisateurs de Dotfuscator Community Edition. Cette édition inclut les fonctionnalités de Dotfuscator Community Edition, auxquelles viennent s'ajouter :

  • l'intégration totale avec Visual Studio ;
  • l'amélioration des applications grâce à Runtime Intelligence (intelligence d'exécution) au moyen de SO-signal ;
  • la prise en charge de la détection et de la notification en cas de falsification d'applications au moyen de SO-signal.

Les fonctionnalités non incluses dans Community Edition, mais proposées dans Dotfuscator Enhanced Community Edition sont signalées par une icône .

Dotfuscator Professional Edition inclut les fonctionnalités de Dotfuscator Community Edition et bien d'autres encore. Il s'agit de l'un des meilleurs obfuscateurs du marché pour les organisations qui produisent des applications commerciales et d'entreprise. Dotfuscator Professional Edition fournit une protection renforcée pour faire échouer la décompilation, permet une réduction importante de la taille des exécutables afin d'économiser de la mémoire et d'améliorer les temps de chargement, une intégration totale avec Visual Studio pour une configuration transparente, une obfuscation incrémentielle pour la diffusion des correctifs logiciels, un filigranage permettant de baliser les assemblys de manière unique, ainsi qu'un support technique par téléphone et par courrier électronique. Les fonctionnalités disponibles pour les titulaires d'une licence Dotfuscator Professional Edition sont signalées par une icône.

Vous trouverez ci-dessous un comparatif point par point des fonctionnalités des différentes versions de Dotfuscator :

Fonctionnalité Professional Edition Dotfuscator Enhanced Community Edition Community Edition
Compactage/réduction    
Prise en charge complète du .NET Compact Framework    
Obfuscation du flux de contrôle    
Méthode Overload Induction améliorée    
Obfuscation incrémentielle    
Obfuscation transparente de DLL satellites    
Chiffrement de chaînes    
Liaison d'assemblys    
Prise en charge des événements antérieurs et postérieurs à la génération    
Nouvelle signature d'assemblys dotés de nom fort    
Intégration à MSBuild    
Filigranage des logiciels    
Exécution indépendante de Visual Studio selon les besoins    
Schémas divers d'attribution d'un nouveau nom    
Prise en charge du débogage PDB    
Préfixe d'attribution d'un nouveau nom    
Prise en charge des assemblys .NET C++    
Traduction automatisée de la trace de la pile    
Fichiers de rapports XML/HTML    
Prise en charge des types et méthodes génériques    
Intégration aux scripts de génération    
Intégration totale avec Visual Studio  
Runtime Intelligence avec SO-signal  
Détection et notification en cas de falsification d'applications avec SO-signal  
Obfuscation entre assemblys
Suppression des métadonnées inutilisées
Attribution d'un nouveau nom
Prise en charge de l'obfuscation déclarative

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