guizmows
Messages postés8Date d'inscriptionjeudi 31 juillet 2003StatutMembreDernière intervention27 juillet 2009
-
27 juil. 2009 à 19:10
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 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.
Minotthor
Messages postés72Date d'inscriptionvendredi 16 mai 2003StatutMembreDernière intervention12 août 20092 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.
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 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.
Minotthor
Messages postés72Date d'inscriptionvendredi 16 mai 2003StatutMembreDernière intervention12 août 20092 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 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...