GRATUIT

Vos offres d'emploi informatique

Développeurs, chefs de projets, ingénieurs, informaticiens
Postez gratuitement vos offres d'emploi ici visibles par 4 000 000 de visiteurs uniques par mois

emploi.developpez.com

ConfuserEx : Obfuscateur, Packer, Assembly merger

Présentation
ConfuserEx est un projet open source codé en C#, il permet de protéger vos applications codé en DotNet.

Fonctionnalités :

- Supports .NET Framework 2.0/3.0/3.5/4.0/4.5
- Symbol renaming (Support WPF/BAML)
- Protection against debuggers/profilers
- Protection against memory dumping
- Protection against tampering (method encryption)
- Control flow obfuscation
- Constant/resources encryption
- Reference hiding proxies
- Disable decompilers
- Embedding dependency
- Compressing output
- Extensible plugin API
Téléchargement
Compatibilité
Windows
0  0 
Téléchargé 17 fois Voir les 3 commentaires
Détails
Éditeur : yck1509   +
Licence : MIT
Date de mise en ligne : 21 novembre 2016




Avatar de François DORIN François DORIN - Rédacteur/Modérateur https://www.developpez.com
le 20/11/2016 à 17:50
Bonjour,

Il aurait été bien de préciser contre quoi cela protège

A priori, il s'agit d'obfusquer le code. Quel(s) atout(s) par rapport à des solutions déjà existantes ?
Avatar de wallace1 wallace1 - Membre expert https://www.developpez.com
le 20/11/2016 à 21:27
Bonsoir Dorinf,

Avant toute chose ConfuserEx est le successeur du très renommé Confuser, et il est Open source donc modifiable à souhait pour peu que l'on respecte sa licence (MIT). Donc ça c'est un principal atout.

Ensuite, je vois déjà venir les remarques du genre il ne protège rien du tout car de4dot et d'autres outils home made permettent de rendre visible certaines portions de codes ....... Un obfuscateur dotnet n'a jamais eu la vocation de protéger un code source mais de le rendre un poil moins compréhensible aux yeux de ceux qui souhaiteraient s'approprier la logique du projet ! Ceux qui stockent des informations sensibles dans leur projet et utilisent un obfuscateur pour éviter qu'on ne les voit n'ont absolument rien compris....... il existe des techniques plus évoluées pour se prémunir de cela en hébergeant une portion du code sensible sur un serveur et en procédant à des requêtes sécurisées.....

Brefff..... je ne suis pas là pour vendre un produit mais pour partager un projet opens source qui fait ses preuves comparé à d'autres éditeurs.

Voilà en quelques mots les fonctionnalités de ConfuserEx :

- Anti Debug, Anti ILDASM
Cela permet d'éviter tout profilage, débogage ou analyse statique de l'assembly (grâce aux APIs managés et non managés et antinet de 0xd4d)

- Anti Dump
Cela empêche de récupéré l'assembly chargée en mémoire.
Cette protection produit des modules non vérifiables.

- Anti IlDasm
Cette protection marque le module avec un attribut (SuppressIldasmAttribute) afin que ILDasm ne monte pas l'assembly.

- Anti Tamper (Encryption de Méthodes)
Cette protection assure l'intégrité de l'application.
Elle crypte les méthodes avec la somme de contrôle de l'ensemble du module pour s'assurer que le module ne sera chargé que si aucune modification n'a été apportée à celui-ci.

--> Mode : Ce paramètre définit la manière dont ConfuserEx décrypte les méthodes. Les valeurs prises en charge sont:

*Normal : ConfuserEx valide la somme de contrôle et déchiffre les méthodes au lancement de l'application.
*Jit: ConfuserEx valide la somme de contrôle au début de l'application et décrypte les méthodes juste avant que chaque méthode soit compilée à l'aide de hooks JIT. (Probablement Incompatibile avec les futures version de .NET Framework. A Utiliser avec précautions)

--> Key : Ce paramètre définit la manière dont ConfuserEx dérive la clé de décryptage. Les valeurs prises en charge sont:

*Normal: ConfuserEx utilise des algorithmes statiques avec des paramètres aléatoires pour dériver la clé de déchiffrement.
*Dynamic: ConfuserEx utilise des algorithmes générés dynamiquement pour dériver la clé de décryptage.

- Constantes :
Cette protection code et compresse des constantes (nombres, chaînes et initialiseurs) dans le code.

--> Mode : Ce paramètre définit la manière dont ConfuserEx encode les constantes. Les valeurs prises en charge sont:

*Normal : ConfuserEx utilise des algorithmes statiques avec des paramètres aléatoires pour encoder les constantes.
*Dynamique : ConfuserEx utilise des algorithmes générés dynamiquement pour encoder les constantes.
*X86 : ConfuserEx utilise dynamiquement des expressions générées en native x86 pour encoder les constantes. (Produit des modules non vérifiables)

--> DecoderCount : Ce paramètre est une valeur entière définissant combien de décodeur constant ConfuserEx génère. La valeur par défaut est 5.

Comme chaque décodeur a de légères différences, plus de décodeurs rendraient le décodage manuel des constantes par les attaquants plus ennuyeux, mais la taille du fichier de sortie augmenterait.

--> Éléments : Ce paramètre définit quel type de constantes doivent être encodées. Les valeurs possibles sont une combinaison de:

*S: Constantes de chaîne (à l'exclusion des constantes primitives)
*N: Constantes numériques (à l'exclusion des constantes primitives)
*P: Les constantes primitives (chaînes vides et numéros couramment utilisés, par exemple 0, -1, 1, 2, etc.)
*I: Array initialisation (ceux utilisant RuntimeHelpers.InitializeArray)

La valeur est insensible à la casse. Par exemple, une valeur de "SI" indique des chaînes non vides et les initialiseurs sont encodés. La valeur par défaut est "SI".

--> Cfg : Ce paramètre est une valeur booléenne si le décodage des constantes est basé sur une variable d'état dépendant du flux de contrôle. La valeur par défaut est False.

L'activation de cette fonctionnalité améliore considérablement la résistance de la protection, mais la performance d'exécution pourrait avoir un impact.

- Control Flow Protection :
Cette protection déforme le code dans le corps des méthodes afin que les décompileurs ne puissent pas décompiler les méthodes.

--> Type : Ce paramètre définit comment ConfuserEx manipule le code des méthodes. Les valeurs prises en charge sont:

*Switch: ConfuserEx insère une machine d'état de base de commutateur pour réorganiser le code.
*Jump : ConfuserEx insère des sauts dans les méthodes pour produire le code spaghetti traditionnel. (Produit des modules non vérifiables)

--> Prédicat : Ce paramètre définit comment ConfuserEx stocke la variable d'état. Les valeurs prises en charge sont:

*Normal : ConfuserEx utilise la variable d'état directement.
*Expression : ConfuserEx code la variable d'état à l'aide d'expressions générées dynamiquement.
*X86: ConfuserEx code la variable d'état à l'aide d'expressions x86 natives générées dynamiquement. (Produit des modules non vérifiables)

--> Intensité : Ce paramètre est une valeur entière de 0 à 100, indique la taille de chaque bloc de code fractionné. La valeur par défaut est 60.

--> Depth : Ce paramètre définit la profondeur de l'expression générée si predicate est défini sur expression ou x86. La valeur par défaut est 4.

--> Junk : Ce paramètre est une valeur booléenne qui indique si des codes indésirables sont insérés. La valeur par défaut est False. (Produit des modules non vérifiables)

- Invalid Metadatas :
Cette protection ajoute des métadonnées non valides aux modules pour empêcher le désassemblage ou le décompilateur de les ouvrir.

- Renommage :
Cette protection occultent le nom des symboles de sorte que le code source décompilé ne peut ni être compilé ni lu.

--> Mode : Ce paramètre définit la manière dont ConfuserEx renomme les symboles. Les valeurs prises en charge sont:

*Empty : ConfuserEx renomme tous les symboles en une chaîne vide.
Attendez-vous à de nombreux problèmes lors de l'utilisation de ce mode.
*Unicode: ConfuserEx renomme les symboles en caractères Unicode illisibles.
La réflexion peut ne pas fonctionner dans ce mode.
*Ascii: ConfuserEx renomme les symboles en caractères ASCII lisibles.
La réflexion peut ne pas fonctionner dans ce mode.
*Lettres: ConfuserEx renomme les symboles en lettres anglaises.
*Décodable: ConfuserEx renomme les symboles en chaîne décodable. Le mappage de nom brouillé est enregistré dans le dossier de sortie dans le fichier "symbols.map".
*Séquentiel: ConfuserEx renomme les symboles en chaîne séquentielle. Le mappage de nom brouillé est enregistré dans le dossier de sortie dans le fichier "symbols.map".
*Réversible: ConfuserEx crypte les symboles. Les noms brouillés peuvent être décodés en fournissant le mot de passe utilisé dans l'obfuscation.
*Debug: ConfuserEx ajoute un caractère "underscore" de soulignement avant les symboles. Non destiné à la production.

--> Password : valeur de chaîne, indique le mot de passe ConfuserEx doit utiliser pour chiffrer les noms de symboles lorsque le mode réversible est utilisé. Seulement efficace sur les modules.
--> RenameArgs : valeur booléenne, indique si ConfuserEx doit supprimer le nom des paramètres des méthodes.
--> Flatten : valeur booléenne, indique si ConfuserEx doit aplatir les types en supprimant les espaces de noms.
--> ForceRen : valeur booléenne, indique si ConfuserEx doit renommer les symboles même si l'analyseur indique qu'il ne doit pas être renommé.
--> RenPublic : valeur booléenne, indique si ConfuserEx doit renommer les symboles même si l'élément est visible en dehors de l'assembly.
--> RenPdb : valeur booléenne, qui indique si ConfuserEx doit renommer les noms de variables et les noms de fichiers dans PDB.

- References Proxy (types, méthodes et champs) :
Cette protection encode et cache les références des types, méthodes et champs.

--> Mode : définit la manière dont ConfuserEx cache les références. Les valeurs prises en charge sont:

*Léger : ConfuserEx ajoute une méthode d'indirection comme proxy.
*Strong: ConfuserEx ajoute un délégué de méthode dynamique comme proxy.
*Ftn: ConfuserEx utilise le pointeur de fonction comme proxy.

--> Encoding : définit la manière dont ConfuserEx code les références de méthode. Les valeurs prises en charge sont:

*Normal : ConfuserEx utilise des algorithmes statiques avec des paramètres aléatoires pour encoder les références.
*Expression : ConfuserEx utilise des expressions générées dynamiquement pour encoder les références.
*X86: ConfuserEx utilise des expressions natives x86 générés dynamiquement pour encoder les références. (Produit des modules non vérifiables)

--> Internal : valeur booléenne, indique si ConfuserEx doit également masquer les références internes.

--> TypeErasure : valeur booléenne, indique si ConfuserEx doit masquer les types de paramètres de méthode.

*Depth : définit la profondeur de l'expression générée si le codage est défini sur expression ou x86.
*InitCount : définit le nombre d'initiateurs délégués à ajouter si le mode est défini sur strong. La valeur par défaut est 16.

- Resources :
Cette protection encode et compresse les ressources intégrées.

- Packer :
Ce packer réduit la taille du fichier de sortie en utilisant l'algorithme de compression LZMA. Un seul module exécutable peut être dans le projet et il est utilisé comme module d'entrée principal.

--> Key : définit la manière dont ConfuserEx dérive la clé de décryptage. Les valeurs prises en charge sont:

*Normal: ConfuserEx utilise des algorithmes statiques avec des paramètres aléatoires pour dériver la clé de déchiffrement.
*Dynamic: ConfuserEx utilise des algorithmes générés dynamiquement pour dériver la clé de décryptage.

--> Compat : valeur booléenne, indique si ConfuserEx doit utiliser le mode de compatibilité qui fonctionne avec Mono.
Avatar de François DORIN François DORIN - Rédacteur/Modérateur https://www.developpez.com
le 21/11/2016 à 8:22
Merci pour cette description plus que détaillée
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.
Responsable bénévole de la rubrique Microsoft DotNET : Hinault Romaric -