IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Protection du code [Débutant]


Sujet :

C#

  1. #1
    Membre éprouvé Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Par défaut Protection du code
    Salut

    Juste pour avoir une confirmation : Si l on n obfusque pas le code il peut etre "vu" malgre "certaines" les options de compilation ?

    Merci d avance

  2. #2
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    C'est ça. Tu peux utiliser un décompiler comme JustDecompile, Reflector ou DotPeek.
    Pour info, la seule protection réellement utile est le renommage des symboles.

  3. #3
    Membre éprouvé Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Par défaut
    Merci !

    c est a dire le renomage des symboles ? cela se fait dans Visual Studio ? ou avec un autre outils ...

  4. #4
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    C'est le travail d'un obfuscateur. Cela permet de changer le nom des méthodes, propriétés, classes...

  5. #5
    Membre éprouvé Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Par défaut


    C est bien ce qu il me semblait !

    Merci

  6. #6
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Protéger son code, c'est comme se battre contre la marée. Ca peut retarder, mais ça ne protège jamais vraiment.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Ah tiens voilà un sujet intéressant : l'obscurcissement de code.

    C'est un sujet qui m'a beaucoup intéressé car c'est vrai que lorsqu'on fait un appli, on n'aimerait pas que quelqu'un recopie notre code et se l'approprie en plus. Ou alors un algorithme sur lequel on a passé beaucoup de temps et quelqu'un le pique sans notre consentement...

    Citation Envoyé par meziantou Voir le message
    ...Pour info, la seule protection réellement utile est le renommage des symboles.
    En fait, il n'y a pas que le renommage, d'ailleurs s'il n'y avait que le renommage comme technique d'obscurcissement, ça ne serait pas une très forte protection non plus.

    Quleques exemples d'autres techniques d'obscurcissement :
    - Le chiffrement des chaines de caractères, indispensable notamment si on veut stocker un mot de passe en dur dans le code
    - Le "Control flow obfuscation": c'est une technique qui vise à "compliquer" le code pour qu'un décompilateur soit perturbé, voire plante lorsqu'il tentera de décompiler les fonctions. Au mieux, si le décompilateur réussi sans planter, le code deviendra très difficile à comprendre.

    Déjà, rien qu'avec ces 2 nouvelles techniques, ça protège plutôt bien. Alors certes on peut encore retrouver ce qu'il faut pour décompiler mais après beaucoup de temps et une consommation assez conséquente d'aspros!

    Il y a encore d'autres techniques d'obfuscations. Par exemple Eazfuscator a rajouté dans sa version payante la virtualisation de code.
    Voir ici pour plus de détails à ce sujet.

    Je viens de trouver aussi un autre article qui parle de l'obfuscation d'une manière plus générale ici qui me parait bien intéressante.

    En ce qui concerne le renommage, j'ai toujours eu des doutes à ce sujet car avec les programmes .NET on utilise de plus en plus le "Databinding" où il est absolument capital que le nom d'une propriété corresponde à une chaîne de caractères avec ce même nom. Sur les programmes d'obfuscation gratuits que j'ai pu trouver, il y en a peu qu'il se préoccupent vraiment de ne pas renommer les propriétés publiques potentiellement "Databindables". Par exemple, avec Eazfuscator, on avait au moins la possibilité d'appliquer des politiques d'obfuscation grâce à l'attribut "Obfuscation", mais il faut quand même lui dire, car par défaut il ne le fait pas.

    L'obscurcissement par renommage pose aussi des problèmes dans le cadre de la sérialisation. ça c'est un point que Eazfuscator règle en n'obscurcissant rien du tout pour les classes sérialisables, mais ce n'est pas la bonne solution non plus car si on implémente l'interface "ISerializable" sur notre classe, c'est nous qui gérons la manière de sérialiser donc dans ce scénario c'est inutile de ne pas renommer les symboles. En plus dans le cas d'une sérialisation automatique, la seule chose nécessaire est de ne pas renommer les variables, car ce sont les seuls symboles concernés par la sérialisation.

    Il y a un obfuscateur gratuit qui me paraissait plutôt bien avancé qui s'appelle "Confuser". Cependant il y a 3 problèmes avec et c'est bien dommage:
    - Il n'est plus maintenu depuis le 28 janvier 2013
    - Son utilisation n'est pas très bien documentée, j'ai dû carrément décompiler le code pour trouver l'utilisation de certaines fonctions comme par exemple la réapplication d'une signature par pfx.
    - L'assemblage obscurcie par "Confuser" est considérée comme un virus par beaucoup de programmes antivirus, notamment Windows Defender de Windows 8 ce qui est plutôt gênant.

    Voilà ce que je pouvais en dire, s'il y a d'autres personnes qui sont éclairées sur ce sujet, cela m'intéresserait bien.

  8. #8
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    Citation Envoyé par Ph_Gr Voir le message
    En fait, il n'y a pas que le renommage, d'ailleurs s'il n'y avait que le renommage comme technique d'obscurcissement, ça ne serait pas une très forte protection non plus.

    Quleques exemples d'autres techniques d'obscurcissement :
    - Le chiffrement des chaines de caractères, indispensable notamment si on veut stocker un mot de passe en dur dans le code
    - Le "Control flow obfuscation": c'est une technique qui vise à "compliquer" le code pour qu'un décompilateur soit perturbé, voire plante lorsqu'il tentera de décompiler les fonctions. Au mieux, si le décompilateur réussi sans planter, le code deviendra très difficile à comprendre.
    Je suis d'accord avec ce que tu écris. Cependant lorsque tu désassembles du code .NET obfusqué, la première étape est d'utiliser de4dot qui dégage beaucoup de protection mise en place. La seule qui est réellement irréversible est le renommage des symbôle.
    Utilises un obfuscateur du marché (voire même un obfuscateur maison) et regarde le résultat...

    Citation Envoyé par Ph_Gr Voir le message
    Il y a encore d'autres techniques d'obfuscations. Par exemple Eazfuscator a rajouté dans sa version payante la virtualisation de code.
    La virtualisation est plutôt intéressante mais en générale cela plombe les performances. Il faut donc l'utiliser avec parcimonie. (De4Dot peut dévirtualiser le code...)

    En ce qui concerne le renommage, j'ai toujours eu des doutes à ce sujet car avec les programmes .NET on utilise de plus en plus le "Databinding" où il est absolument capital que le nom d'une propriété corresponde à une chaîne de caractères avec ce même nom.
    Il n'est juste pas possible de traiter de manière sûr l'obfuscation des propriétés si elles sont utilisées pour du DataBinding. Il est donc normal que ce point ne soit pas traité automatiquement par les obfuscateurs (ou alors de manière foireuse)

    - L'assemblage obscurcie par "Confuser" est considérée comme un virus par beaucoup de programmes antivirus, notamment Windows Defender de Windows 8 ce qui est plutôt gênant.
    A vouloir utiliser les mêmes méthodes que les virus pour protéger son code, on finit par se faire détecter comme un virus...

  9. #9
    Invité
    Invité(e)
    Par défaut
    Merci de ta réponse meziantou.

    Citation Envoyé par meziantou Voir le message
    Je suis d'accord avec ce que tu écris. Cependant lorsque tu désassembles du code .NET obfusqué, la première étape est d'utiliser de4dot qui dégage beaucoup de protection mise en place. La seule qui est réellement irréversible est le renommage des symbôle.
    Utilises un obfuscateur du marché (voire même un obfuscateur maison) et regarde le résultat...
    Ah, c'est intéressant, je ne pensais pas que des outils en étaient capables. Il faut dire que ça fait un petit moment que je n'avais pas continuer à creuser le sujet. Je vais l'essayer cet outil. Merci pour cette info.
    EDIT : je viens de regarder le lien, eh bien c'est impressionnant le nombre de trucs qu'il peut remettre en place! ça a du demander beaucoup de jours de travail ça! D'après les dates de release, c'est tout récent... En tous cas, j'ai déjà un super cobaye sur lequel je vais tester!...

    Citation Envoyé par meziantou Voir le message
    La virtualisation est plutôt intéressante mais en générale cela plombe les performances. Il faut donc l'utiliser avec parcimonie. (De4Dot peut dévirtualiser le code...)
    Oui en effet, c'est ce qu'Eazfuscator disait sur leur site Web.

    Citation Envoyé par meziantou Voir le message
    Il n'est juste pas possible de traiter de manière sûr l'obfuscation des propriétés si elles sont utilisées pour du DataBinding. Il est donc normal que ce point ne soit pas traité automatiquement par les obfuscateurs (ou alors de manière foireuse)
    J'imagine que ça ne doit pas être un problème évident à traiter. En tous cas, c'est bien à cause de ça qu'un processus d'obfuscation n'est pas simple à mettre en place rapidement...

    Citation Envoyé par meziantou Voir le message
    A vouloir utiliser les mêmes méthodes que les virus pour protéger son code, on finit par se faire détecter comme un virus...
    ça c'est sûr!
    Dernière modification par Invité ; 06/12/2013 à 17h19.

  10. #10
    Membre confirmé

    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juillet 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Juillet 2009
    Messages : 62
    Par défaut
    J'utilisais aussi Confuser.
    A l'époque c'était un des seuls outils "free" offrant le plus de fonctionnalités.

    Vu qu'il n'est plus maintenu, vous recommanderiez quel outil "free" d’offuscation de code ?

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par lemoussel Voir le message
    ...Vu qu'il n'est plus maintenu, vous recommanderiez quel outil "free" d’offuscation de code ?
    J'ai exactement la même question car au niveau obfuscateur gratuit, je n'ai pas encore trouvé. J'ai même abandonné les recherches à l'heure actuelle...

    En plus je viens de tester de4net sur un assemblage... Redoutable! Toutes les chaînes ont été décryptées, et le "control flow obfuscation" enlevé. L'assemblage avait été obscurcie par "Eazfuscator" avec notamment l'encryptage des chaînes de caractères...

    Je comprend mieux maintenant pourquoi meziantou disait que la seule façon efficace est le renommage des symboles. D'ailleurs j'ajouterai aussi l'enlèvement de l'espace de nom de la classe.

    Il n'empêche que ce petit outil de4net quand je le cherche avec Google, impossible de tomber sur le site de bitbucket... Il fallait le trouver!...
    [EDIT] Je ne devais pas avoir les yeux en face des trous... C'est "de4dot" et non pas de4net. Je trouve tout de suite mieux alors
    Dernière modification par Invité ; 09/12/2013 à 13h39.

  12. #12
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    J'ai exactement la même question car au niveau obfuscateur gratuit, je n'ai pas encore trouvé. J'ai même abandonné les recherches à l'heure actuelle...
    Un obfuscateur qui ne fait que renommer les symbôles se code en une après midi en utilisant Mono.Cecil.

  13. #13
    Membre confirmé

    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juillet 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Juillet 2009
    Messages : 62
    Par défaut
    Je ne demande qu'a voir

    Par exemple avec ce type d'outil, c'est No Limits : radare, the reverse engineering framework

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. protection du code
    Par clarisse dans le forum Général VBA
    Réponses: 3
    Dernier message: 06/03/2007, 08h14
  2. protection du code source
    Par sam01 dans le forum Droit
    Réponses: 3
    Dernier message: 28/06/2006, 11h43
  3. Protection du code VB
    Par anikeh dans le forum Access
    Réponses: 2
    Dernier message: 30/05/2006, 18h54
  4. protection du code : tableaux dynamiques
    Par Tchaill39 dans le forum Langage
    Réponses: 6
    Dernier message: 12/01/2006, 21h42

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