Dll/EXE partagé et protection de code

guizmows Messages postés 8 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 27 juillet 2009 - 27 juil. 2009 à 19:10
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 2 août 2009 à 21:34
Bonjour,

J'ai dévellopé un petit programme et je souhaite donner au utilisateur d'étendre les fonctionnalités de celui-ci en écrivant eux même des puggins.
Pour celà j'utilise CS-SCRIPT qui permet d'interpréter et de compiler du code C# à la volée.
Mon but est compiler le code de l'utilisateur en lui permettant d'accéder aux différents objets instanciés dans mon programme et/ou aux classes publiques. Ceci marche très bien avec un code non obsfucaté.

Mon problème est que je veux distribuer mon programme, mais pas son code, je l'ai donc obfuscater ( Eazfuscator.NET ). Mais à ce moment je ne peux plus compiler le code de l'utilisateur car le compilateur n'arrive plus à résoudre les noms.

En gros, ce que j'aimerai, c'est trouver un système me permettant de protéger mon code tout en laissant accès aux différentes classes du programme.

Je n'arrive pas à trouver la solution, est ce que quelqu'un peut m'aider, ou me mettre sur la voix.



GUIZMOWS

6 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
27 juil. 2009 à 21:02
Bonjour,
As-tu déjà regardé du côté de System.Addin ?
Peut-être que ça pourrait résoudre ton problème...


[hr]
-Blog-
-Site Perso-
0
Minotthor Messages postés 72 Date d'inscription vendredi 16 mai 2003 Statut Membre Dernière intervention 12 août 2009 2
27 juil. 2009 à 22:50
Si CS-SCRIPT se sert d'un mécanisme de réflexion, alors il est incompatible avec l'obfuscation. L'obfuscation modifie la signature des types de façon aléatoire et rend ainsi leurs membres pratiquement inaccessibles par réflexion.

Je te conseille de renoncer à l'obfuscation. La protection qu'elle offre est très relative pour les lourds inconvénient qu'elle entraîne : ralentissements, diagnostic difficile des erreurs chez les clients, incompatibilité avec la réflexion, ...

Une connaissance élémentaire du CIL (MSIL) permet toujours de restituer le code initial. Si tu ne veux pas que ton application soit aisément désassemblable, programme en C++. Tout assembly produit en C# contient du CIL (MSIL) qui reste un langage d'assez haut niveau.

Sinon tu peux peut-être paramétrer ton obfuscateur pour qu'il ne modifie pas la signature des types, mais comme c'est à peu près tout ce que fait un obfuscateur .NET il ne va pas en rester grand chose.

Mathieu.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
31 juil. 2009 à 18:22
Il est évident que tout type exposé à l'extérieur ne doit pas être obfusqué (il me semble que ça va sans dire).
Concernant les obfuscators .NET, je n'en suis pas fan non plus. De là à dire qu'ils ne font qu'un renommage de type, y'a une sacrée marge il me semble...

A ma connaissance, ils peuvent crypter les strings, injecter du code dans les assemblies (pas utiliser par le programme, mais qui le rend plus complexe à comprendre), renommer les variables (au moins celles pas exposées à l'extérieur) et sûrement encore pleins d'autres trucs (jamais regardé en détails, ça me passionne pas vraiment...)

Probablement que des connaissances élémentaires du MSIL ne sont pas suffisantes, comme tu le prétends, pour restituer le code initial.


[hr]
-Blog-
-Site Perso-
0
Minotthor Messages postés 72 Date d'inscription vendredi 16 mai 2003 Statut Membre Dernière intervention 12 août 2009 2
1 août 2009 à 11:23
Je n'ai pas encore essayé de restituer un code obfusqué à l'aide d'une des dernières solutions disponibles dans le commerce. Les premiers Dotfuscator CE ne m'avaient pas paru très inquiétants, peut être à tort.

Néamoins,
- Plus le langage cible est de haut niveau;
- Plus les fonctionnalités du langage font appel à des librairies extérieures documentées;
- Plus le code fait appel à des librairies extérieures documentées;
Et moins le code sera facile à obfusquer. Il n'existe aucun moyen de revenir de façon déterminante là-dessus.

Or, C# et .NET combinent ces trois aspects. Si de surcroît le programme lui-même est structuré en briques logicielles indépendantes ... Tu peux définitivement renoncer à un niveau de protection du code ne serait-ce que vaguement comparable à ce que donnait une compilation en code machine, même sans mesure particulière. Par contre, le moindre compilateur C++ en mode optimisé peut générer du code tellement crade que tu ne reconnaîtrais même plus un de tes propres programmes.

Le cryptage des strings et l'injection de code mort, je n'y crois pas trop. Mais je vais prendre la peine d'obfusquer quelques projets maison avec la version 2008 pour voir ce que cela donne.

De toute façon, je ne peux que décourager guizmows d'engager la dépense si c'est juste "un petit programme". Sinon j'ai trouvé des explications ici sur la procédure à appliquer pour exclure des types supplémentaires du renommage :
http://msdn.microsoft.com/en-us/library/ms227260(VS.80).aspx
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Minotthor Messages postés 72 Date d'inscription vendredi 16 mai 2003 Statut Membre Dernière intervention 12 août 2009 2
1 août 2009 à 11:28
Oups. Ce que j'ai envoyé concerne Dotfuscator. Je ne sais pas si la fonction équivalente existe dans Eazfuscator. Leur site laisse supposer que non :

Why does Eazfuscator.NET look so simplistic?
[...]
It doesn't ask those annoying questions from the endless "To rename or not to rename?" novel.

Mathieu
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
2 août 2009 à 21:34
Mon message ne visait aucunement à prétendre qu'on pouvait rivaliser avec d'autres langages non-managés en terme d'obfuscation...
J'ai réagis, car, en effet, certains aspects que tu as mentionnés ne sont pas corrects: le code ne vient probablement pas plus lent (tout au plus, l'exécutable prendra +/- de place) tout comme une connaissance élémentaire du MSIL ne permets absolument pas de retrouver le code initial. A aucun moment je prétends que ce n'est pas faisable, mais il est nécessaire d'avoir un niveau un peu plus élevé que débutant

En voici un pris au bol (le premier arrivé sur google en fait) qui donne quelques fonctionnalités disponibles:
http://www.rustemsoft.com/Skater.asp

Comme déjà dit dans mon précédant, je n'encourage non plus pas spécialement l'utilisation de ce genre d'outils...


[hr]
-Blog-
-Site Perso-
0
Rejoignez-nous