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
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
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.
Merci !
c est a dire le renomage des symboles ? cela se fait dans Visual Studio ? ou avec un autre outils ...
C'est le travail d'un obfuscateur. Cela permet de changer le nom des méthodes, propriétés, classes...
C est bien ce qu il me semblait !
Merci
Protéger son code, c'est comme se battre contre la marée. Ca peut retarder, mais ça ne protège jamais vraiment.
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...
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.
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...
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...)
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)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.
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...- 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.
Merci de ta réponse meziantou.
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!...
Oui en effet, c'est ce qu'Eazfuscator disait sur leur site Web.
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...
ça c'est sûr!![]()
Dernière modification par Invité ; 06/12/2013 à 17h19.
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 ?
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.
Un obfuscateur qui ne fait que renommer les symbôles se code en une après midi en utilisant Mono.Cecil.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...
Je ne demande qu'a voir
Par exemple avec ce type d'outil, c'est No Limits : radare, the reverse engineering framework
Partager