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

JavaScript Discussion :

Crypter son code source et l'exécuter


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Mai 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Crypter son code source et l'exécuter
    Bonjour,

    Je cherche à crypter mes codes sources afin de ne pas me les faire voler. Je partage la plupart de mes scripts, cependant, il y en a certains que je souhaite garder pour moi : propriété intellectuelle !

    Alors, j'ai fouillé un peu partout, et ai trouvé 2 solutions :

    - crypter le code : mais il n'est pas exécutable puisque crypté donc non reconnu par le processeur une fois compilé (?).
    - obfusquer le code : mais là, c'est plus pour éviter le reverse engineering, donc après compilation, et désassemblage. Donc cela vient en complément.

    En fait, je souhaite que mes sources soient "lisibles" sur un éditeur de texte, mais qu'ils soient cryptés. Et de plus obfusquer le code au maximum avant compilation.

    Je développe en beaucoup de langages, très très différents. Et je souhaiterai une méthode qui puisse être applicable à tous. Je scripte aussi bien en C qu'en PHP ou qu'en Bash ou autre. Ils n'ont pas les mêmes comportements, certains nécessitent une compilation, d'autres non, comme le Javascript, par exemple.

    Alors, cela peut paraître quelque peu boiteux comme question, mais cependant je sais que c'est possible car je suis déjà tombé sur du code "crypté" (ou tout du moins très très amoché, parfaitement illisible, méconnaissable) qui pouvait être "joué" (interprété). J'avais d'ailleurs tenter de reconnaitre ce que ça pouvait être, vraiment impossible. C'était un code qui "watermarkait" le script entier afin de contraindre la personne voulant l'utiliser de laisser impérativement le nom des développeurs (qui étaient du MIT). Dès que j'enlevais ne serai-ce qu'une lettre d'un nom, hop, plus rien ne fonctionnait. J'ai évidemment vite compris que c'était lié à ce code "crypté" ou tout du moins illisible, sous forme de bloc brut (non indenté) qui devait n'être ni plus ni moins qu'une fonction primaire spécifiant que si l'on touchait au nom des développeurs, on ne pouvait pas se servir du script, donc > contraint de garder le nom des développeurs et impossible de se l'accaparer : c'est mon but.

    Voilà ce que je recherche !

    Alors, me direz vous, pourquoi poster cela dans Javascript, eh bien... tout simplement parce-que j'ai remarqué que c'étais un des forums les plus fréquentés sur DVZ, donc j'ai posté ici

    En effet ma demande concerne l'ensemble des langages situés en haut (enfin pas tous, je vous rassure !).

    Je scripte actuellement beaucoup en bash, qui n'est pas à proprement dit un langage mais bon, je souhaite protéger certains bash scripts quand même.

    Je désire donc :

    - obfusquer le code au maximum ;
    - crypter, "brouiller" le code au maximum afin de le rendre totalement illisible.

    Mais, que celui-ci demeure :

    - Lisible (en version illisible ; ça peu paraître paradoxal je le conçois mais c'est bel et bien mon souhait) ;
    - Exécutable.

    Je vous remercie de votre attention et espère que vous me fournirez un maximum d'informations sur le sujet.

    Si toutefois l'un d'entre-vous connaît une technique commune pour tous les langages : je prends ! Cependant j'en doute. Ainsi, si vous avez au moins une parade pour un langage que vous maîtrisez, merci de la notifier, ce sera toujours ça

    Bonne journée à vous.

    Cordialement.


    Jean Eustache de la Rochebrochart


    Note : Voici un exemple :


    Je m'y connais un petit peu en crypto, ça ressemble fort à cela. Notez que parfois je suis tombé sur des codes encore bien pire... avec des caractères non ASCII Constatez par vous même



    Et ce code est totalement opérationnel tel quel...

    J'espère que quelqu'un saura m'apporter une quelconque piste...


    Note : si un modérateur juge que ma question n'est pas à l'endroit approprier, prière de bien vouloir la déplacer et non la supprimer, je ne vois tout simplement pas où poster puisque cela concerne les langages informatiques dans leur ensemble. Merci de votre compréhension.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Ta démarche est plus que discutable.

    Un code peut toujours être reverse-engineered à partir du moment où tous les éléments sont sur une même machine.
    Tu vas juste ajouter de la lourdeur sans empêcher les compétents d'accéder à l'équivalent de tes sources.
    Obfusquer et minifier en conservant ou améliorer les performances devraient être ton seul objectif, ici.

    Et puiqu'on est sur le forum javascript, pour cet objectif et selon mes lectures : le meilleur outil pour se faire serait Uglify (bien que je me serve personnellement du compresseur de Yahoo).
    Most Valued Pas mvp

  3. #3
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    +1 pour Sergejack, avec quelques nuances :

    – Tu ne peux pas crypter JavaScript, car la plateforme de JS c'est le navigateur, et il y a tellement de navigateurs dans l'écosystème que tu ne peux pas supposer qu'ils ont tous la technologie de cryptage/décryptage que tu veux utiliser. Et actuellement, je suis à peu près sûr qu'aucun n'en a.
    – Tu peux obfusquer ton code JS, mais la seule raison légitime à l'obfuscation, c'est pour gagner en bande passante (et encore, c'est discutable). Si tu veux faire du close-source, fais tourner ton programme côté serveur. Une appli JS, c'est forcément ouvert !
    – Ta première image ressemble à du code base64. Ce n'est pas un cryptage, c'est un encodage.

    J'espère que j'ai apporté des éléments constructifs
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Citation Envoyé par Watilin Voir le message
    – Ta première image ressemble à du code base64. Ce n'est pas un cryptage, c'est un encodage.
    Techniquement, le cryptage, ça se fait en binaire, et le binaire, ça résiste mal aux transmissions texte. D'où l'intérêt de le coder en base64. Mais bon...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Chiffrer du javascript ?
    Pourquoi ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Membre à l'essai
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Mai 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Merci pour vos réponses.

    J'ai particulièrement été intéressé par celle de SergeJack.

    Cependant, comme je le précisait dans mon post initial, le souci est que je recherche une technique "pour tous langages"...

    J'ignore si cela est possible, voilà pourquoi je pose la question !

    J'ai constaté que, vu que nous étions sur un forum JS... vous vous "focusiez" sur le chiffrement du JS ! Cependant, je le répète, je ne souhaite pas seulement chiffrer du JS ! Comme ma demande est valable pour tous les langages (enfin, je ne les connais pas tous) je ne savais guère où poster, voilà pourquoi j'ai posté ici (car c'est un forum fréquenté sur DVZ ).

    Je sens que thelvin en a sous l'pied... Une idée ?

    Je pense (à 90% sûr, hélas) qu'il n'existe pas de "solution" pour l'ensemble des langages. Cependant je pense qu'il y a une possibilité pour chaque "catégorie" de langage, si je puis les dénommer ainsi.

    Merci de continuer à fleurir ce topic !

    Note : pour ce que tu dis SergeJack "tu ne pourras dans tous les cas pas éviter de te faire reverse engineered tes sources". Je ne peux que l'admettre. Cependant, je cherche à réduire un maximum la visibilité des scripts sans pour autant altérer leur fonctionnement (hormis un léger ralentissement bien entendu pour un CS joufflu, cela va de soi).

    Je vous remercies tous.

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Chaque langage à sa syntaxe, il n'y a donc pas d'obscurcissement (obfuscation) universelle.
    Si ce doit être universelle on parle alors bien de cryptologie.

    Pour ton objectif, il n'y a pas de bonne méthode compatible avec tous les langages.
    Car chaque langage aura ses propres forces desquelles il faudrait tirer parti pour implémenter un tel cryptage.

    Mais si tu veux vraiment une méthode universelle, la voici :

    Préambule: Il te faudra un bonne équipe de développeurs pour les 10 années à venir.

    Tout langage n'a pas forcément d'interpréteur pouvant être employé dynamiquement (eval, ...).
    1) Crée un nouveau langage.
    2) Créer pour chaque langage un interpréteur de ton langage.

    Crypte le code rédigé dans ton langage (encryptage bijectif puisqu'il doit être déchiffré).
    Ton programme devra décrypter le code et l'interpréter.





    Il suffit qu'une personne trouve (et divulgue) la partie du code qui opère le décryptage pour que tous tes efforts tombent à l'eau.



    Note bien que je ne suis pas en train de me foutre de toi. Je ne décris que ce que je pense être la réalité face à un objectif qui m'apparait chimérique.
    Most Valued Pas mvp

  8. #8
    Membre à l'essai
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Mai 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Bon ça par contre c'était une réponse purement inutile. Mieux vaut préserver le silence lorsqu'on a rien d'intéressant à apporter.

    Passons.

    Je n'ai pas dit "cela existe universellement", mais le contraire (à 90% sûr car je suis un peu rêveur à mes heures perdues ).

    Après, oui, il faudrait tirer profit de chaque langage. C'est certain.

    Je vais donc poser mes questions sur des forums à langages compilables puisqu'ici ce n'est pas votre domaine.

    Cordialement,

    Jean.

  9. #9
    Invité
    Invité(e)
    Par défaut
    salut,

    Bon ça par contre c'était une réponse purement inutile. Mieux vaut préserver le silence lorsqu'on a rien d'intéressant à apporter.
    Peux-tu étayer?
    Je ne vois pas du tout en quoi la réponse est à côté.

  10. #10
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Citation Envoyé par je.rochebrochart Voir le message
    Bonjour,

    Je cherche à crypter mes codes sources afin de ne pas me les faire voler. Je partage la plupart de mes scripts, cependant, il y en a certains que je souhaite garder pour moi : propriété intellectuelle !

    bonjour,

    dans ce cas pourquoi ne pas faire au plus simple à savoir mettre ton code JS sous Licence ?

    voilà un début :
    http://www.gnu.org/licenses/gpl-faq.fr.html
    http://www.gnu.org/philosophy/javascript-trap.fr.html

  11. #11
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    première question : quel type d'application comptes-tu exécuter en js ?

    car selon le cas, je te dirai soit que le code est trop basique et que peu importe si certains s'en inspirent. soit une vraie application avec des appels ajax, je te conseillerai de faire la majeure partie des calculs coté serveur ça te permettra de garder une partie "secrète".


    enfin, je pense que c'est vraiment au cas par cas des applications mais effectivement ne rêve pas trop, il n'y a aucun vrai moyen de crypter en javascript. (enfin sauf une solution comme la proposé Sergejack).


    pour ce qu'il en est des autres langages, de nouveau ce sera du cas par cas, il n'existe pas de méthode universelle, mais c'est certain que les langages "compilables" seront bien plus dur à "reverse-engineerer". (le gars risque de se retrouver avec du code proche de l'assembleur, pas facilement compréhensible par mr tout le monde^^)


    mais bon, restons logique, dans tous les cas, si la machine peut interpréter ton code, un être humain en agissant comme sa machine le pourra TOUJOURS aussi.
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(a='eval(a)')
    recursive make it evil
    eval make it eval

  12. #12
    Membre à l'essai
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Mai 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Je tâte un peu l'ASM, je connais des désassembleurs (des personnes, car les logiciels qu'ils utilisent se nomment pareillement^^), c'est assez flippant mais foutrement intéressant !

    Imaginons que je souhaite crypter du bash (ex: script.sh) mais qu'il reste exécutable via

    ./script.sh

    ???

    Et là... patatra... vous allez me dire : c'est pas le bon forum Ici on fait du JS !

    J'me lance, sait-on jamais

    Si vous avez une piste pour le bash, le perl, ou encore le python, ça serait un grand plaisir.

    Après, je conçois que cela peut ne pas être votre domaine, j'irais donc demander sur un forum plus approprié.

    Merci à vous.

  13. #13
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Si on créé une application .exe dont le fichier de configuration .dat doit être crypté, le code de (dé)cryptage associé sera lié à l'éxecutable et uniquement avec lui.

    Àprès installation de l'application, nous obtenons...
    application.exe incluant le code (dé)cryptage
    application.dat ; données cryptées
    ou bien...
    application.exe
    cryptage.dll ; code de (dé)cryptage
    application.dat ; données cryptées
    Bref peu importe, dans tous les cas nous voyons bien que le cryptage est traité nativement par l'application.


    En développement Web, l'application se présente (pour simplifier au maximum) comme ceci :

    browser.exe
    parserJS.dll
    etc...
    Le module parserJS.dll est conçu pour interpreter des fichiers textes conformes ECMAScript dont le type MIME est text/javascript.


    Dans ton cas, il faudrait créer une couche logicielle sous forme d'extension ou contrôle ActiveX pour pouvoir traiter tes pseudo-fichiers JS non conformes.


    Puisque que personne n'installerait ces modules supplémentaires, tu sera assuré que personne ne verra ton code.

Discussions similaires

  1. Crypter / Protéger son code source
    Par matthieu637 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 16/07/2008, 13h07
  2. Protéger son code source ?
    Par supergrey dans le forum C++
    Réponses: 32
    Dernier message: 05/12/2006, 09h05
  3. afficher son code source
    Par blackbird1 dans le forum Delphi
    Réponses: 3
    Dernier message: 21/08/2006, 10h57
  4. Comment commenter son code source proprement ...
    Par basnifo dans le forum MFC
    Réponses: 3
    Dernier message: 31/03/2006, 16h22
  5. Propriété de son code source.
    Par chocobn49 dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 06/07/2004, 14h40

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