Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/08/2011, 11h33   #1
 
Homme Jean-Eustache de la Rochebrochart
Consultant E-Business
Inscription : mai 2011
Messages : 17
Détails du profil
Informations personnelles :
Nom : Homme Jean-Eustache de la Rochebrochart
Localisation : France, Paris (Île de France)

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

Informations forums :
Inscription : mai 2011
Messages : 17
Points : -1
Points : -1
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.
je.rochebrochart est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 18h41   #2
Membre chevronné
 
Inscription : juillet 2006
Messages : 1 194
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 1 194
Points : 746
Points : 746
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).
Sergejack est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/08/2011, 10h18   #3
Membre Expert
 
Avatar de Watilin
 
Homme Matilin Torre
Étudiant
Inscription : juin 2010
Messages : 679
Détails du profil
Informations personnelles :
Nom : Homme Matilin Torre
Âge : 23
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2010
Messages : 679
Points : 1 202
Points : 1 202
+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
__________________
Disposition de clavier ergonomique française : Bépo
Watilin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 10h27   #4
Expert Confirmé Sénior
 
Inscription : septembre 2004
Messages : 5 067
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 067
Points : 6 991
Points : 6 991
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...
thelvin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 10h30   #5
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 021
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

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

Informations forums :
Inscription : mars 2002
Messages : 30 021
Points : 45 117
Points : 45 117
Chiffrer du javascript ?
Pourquoi ?
__________________
Ma page 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


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 08h07   #6
 
Homme Jean-Eustache de la Rochebrochart
Consultant E-Business
Inscription : mai 2011
Messages : 17
Détails du profil
Informations personnelles :
Nom : Homme Jean-Eustache de la Rochebrochart
Localisation : France, Paris (Île de France)

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

Informations forums :
Inscription : mai 2011
Messages : 17
Points : -1
Points : -1
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.
je.rochebrochart est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 09h56   #7
Membre chevronné
 
Inscription : juillet 2006
Messages : 1 194
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 1 194
Points : 746
Points : 746
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.
Sergejack est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/09/2011, 19h41   #8
 
Homme Jean-Eustache de la Rochebrochart
Consultant E-Business
Inscription : mai 2011
Messages : 17
Détails du profil
Informations personnelles :
Nom : Homme Jean-Eustache de la Rochebrochart
Localisation : France, Paris (Île de France)

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

Informations forums :
Inscription : mai 2011
Messages : 17
Points : -1
Points : -1
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.
je.rochebrochart est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 02/09/2011, 22h10   #9
Membre éclairé
 
Homme
F5(){F5}
Inscription : avril 2008
Messages : 256
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : F5(){F5}
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2008
Messages : 256
Points : 320
Points : 320
salut,

Citation:
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é.
galerien69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2011, 11h18   #10
Expert Confirmé Sénior
 
Avatar de Auteur
 
Inscription : avril 2004
Messages : 4 794
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 4 794
Points : 5 118
Points : 5 118
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
Auteur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2011, 16h29   #11
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 867
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 867
Points : 1 374
Points : 1 374
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.
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2011, 13h32   #12
 
Homme Jean-Eustache de la Rochebrochart
Consultant E-Business
Inscription : mai 2011
Messages : 17
Détails du profil
Informations personnelles :
Nom : Homme Jean-Eustache de la Rochebrochart
Localisation : France, Paris (Île de France)

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

Informations forums :
Inscription : mai 2011
Messages : 17
Points : -1
Points : -1
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.
je.rochebrochart est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 04/09/2011, 14h16   #13
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
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.
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h38.


 
 
 
 
Partenaires

Hébergement Web