Discussion: ConfuserEx

  1. #1
    Robot Forum
    Avatar de forum
    Inscrit en
    novembre 1999
    Messages
    1 845
    Détails du profil
    Informations forums :
    Inscription : novembre 1999
    Messages : 1 845
    Points : 1 575
    Points
    1 575

    Par défaut ConfuserEx

    Bonjour,

    Je vous propose un nouvel élément à utiliser : ConfuserEx

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

    Qu'en pensez-vous ?

  2. #2
    Rédacteur/Modérateur
    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    juillet 2016
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2016
    Messages : 1 011
    Points : 3 376
    Points
    3 376
    Billets dans le blog
    5

    Par défaut

    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 ?
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  3. #3
    Membre expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2008
    Messages
    1 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 461
    Points : 3 003
    Points
    3 003
    Billets dans le blog
    5

    Par défaut

    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.

  4. #4
    Rédacteur/Modérateur
    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    juillet 2016
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2016
    Messages : 1 011
    Points : 3 376
    Points
    3 376
    Billets dans le blog
    5

    Par défaut

    Merci pour cette description plus que détaillée
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo