Question

Je veux créer une application JavaScript qui n’est pas une source ouverte, et donc je souhaite apprendre à masquer mon code JS? Est-ce possible?

Était-ce utile?

La solution

Obfuscation:

Essayez YUI Compressor . C’est un outil très populaire, conçu, amélioré et mis à jour par l’équipe de l’interface utilisateur de Yahoo.

Vous pouvez également utiliser:

Données de chaîne privée:

Garder les valeurs de chaîne privées est une préoccupation différente, et l’obscurcissement ne sera pas vraiment bénéfique. Bien entendu, en regroupant votre source dans un fouillis brouillé et minifié, vous disposez d'une version allégée de la sécurité par le biais de obscurity . La plupart du temps, c'est votre utilisateur qui consulte la source et les valeurs de chaîne sur le client lui sont destinées. Par conséquent, ce type de valeur de chaîne privée n'est pas souvent nécessaire.

Si vous aviez réellement une valeur que vous ne souhaitiez jamais voir affichée par un utilisateur, vous disposez de plusieurs options. Premièrement, vous pouvez utiliser un type de chiffrement, qui est déchiffré au chargement de la page. Ce serait probablement l'une des options les plus sûres, mais aussi beaucoup de travail qui peut être inutile. Vous pourriez probablement encoder certaines valeurs de chaîne en base64, ce serait plus facile .. mais quelqu'un qui voulait vraiment ces valeurs de chaîne pourrait les décoder facilement . Le cryptage est le seul moyen d’empêcher qui que ce soit d’accéder à vos données, et la plupart des utilisateurs trouvent que sa sécurité est supérieure à celle dont ils ont besoin.

Note:

L’obfuscation en Javascript est connue pour causer des bugs. Les obscurcissements s'améliorent un peu, mais de nombreuses entreprises décident qu'elles voient suffisamment d'avantages à minifier et à gzipping , et que les économies supplémentaires liées à l'obscurcissement ne sont pas vaut toujours la peine . Si vous essayez de protéger votre source, vous déciderez peut-être que cela en vaut la peine, juste pour rendre votre code plus difficile à lire. JSMin est une bonne alternative.

Autres conseils

Je suis surpris que personne n'ait mentionné le compilateur de fermeture de Google. Il ne se contente pas de minifier / compresser, il analyse pour rechercher et supprimer le code inutilisé, et réécrit pour une minification maximale. Il peut également effectuer une vérification de type et avertit des erreurs de syntaxe.

JQuery est récemment passé de YUI Compresser à Closure Compiler et a constaté une " amélioration solide "

L’obscurcissement ne peut jamais vraiment fonctionner. Pour ceux qui veulent vraiment obtenir votre code, c'est juste un ralentisseur. Pire encore, cela empêche vos utilisateurs de corriger les bogues (et de vous renvoyer les correctifs), et rend plus difficile le diagnostic des problèmes sur le terrain. C'est une perte de temps et d'argent.

Discutez avec un avocat du droit de la propriété intellectuelle et de vos options juridiques. & "Open Source &"; ne signifie pas & " ; les gens peuvent lire la source " ;. Open Source est plutôt un modèle de licence particulier accordant l’autorisation d’utiliser et de modifier librement votre code. Si vous n'accordez pas une telle licence, les personnes copiant votre code sont en infraction et (dans la plupart des pays du monde), vous disposez de possibilités légales pour les arrêter.

La seule façon de vraiment protéger votre code est de ne pas l'expédier. Déplacez le code important côté serveur et demandez à votre code Javascript public de l'appeler en Ajax.

Voir ma réponse complète à propos des obfuscateurs ici.

Vous pouvez masquer la source javascript à votre guise, mais il sera toujours possible de procéder à une ingénierie inverse du fait que tout le code source doit être exécuté sur la machine cliente ... la meilleure option à laquelle je pense est d'avoir votre traitement est fait avec un code côté serveur et tout le code client javascript fait en sorte qu’il envoie des demandes de traitement au serveur lui-même. Sinon, tout le monde pourra toujours suivre toutes les opérations effectuées par le code.

Quelqu'un a mentionné base64 pour protéger les chaînes. C'est une idée terrible. Base64 est immédiatement reconnaissable aux types de personnes qui souhaiteraient procéder à l'ingénierie inverse de votre code. La première chose qu'ils vont faire est de le décoder et de voir ce que c'est.

Il existe un certain nombre d’outils d’obscurcissement JavaScript librement disponibles; Cependant, je pense qu'il est important de noter qu'il est difficile d'obscurcir JavaScript, au point qu'il ne peut pas être inversé.

À cette fin, il existe plusieurs options que j'ai utilisées dans une certaine mesure, les heures supplémentaires:

  • YUI Compressor . Le compresseur JavaScript de Yahoo! résume bien le code qui améliorera son temps de chargement. Il existe un petit niveau d’obscurcissement qui fonctionne relativement bien. Essentiellement, Compressor modifiera les noms de fonction, supprimera les espaces et modifiera les variables locales. C'est ce que j'utilise le plus souvent. Il s'agit d'un outil Java à code source ouvert.

  • JSMin est un outil conçu par Douglas Crockford qui cherche à minimiser votre Source JavaScript. Selon les propres mots de Crockford, & "; JSMin n’obscurcit pas, mais il uglifie. &"; Son objectif principal est de réduire la taille de votre source pour accélérer le chargement dans les navigateurs.

  • Obfuscator JavaScript gratuit . Cet outil Web tente de brouiller votre code en l'encodant. Je pense que les inconvénients de sa forme d’encodage (ou d’obscurcissement) pourraient se faire au détriment de la taille du fichier; Cependant, c'est une question de préférence personnelle.

Ce que je ferais:

A. Troll le pirate informatique!

Ceci sera dans la deuxième partie mon code javascript secret fictif / obscurci LAUNCHER. Celui que vous voyez dans le code source.

Qu'est-ce que ce code?

  1. charge le vrai code
  2. définit un en-tête personnalisé
  3. publie une variable personnalisée
var ajax=function(a,b,d,c,e,f){
 e=new FormData();
 for(f in d){e.append(f,d[f]);};
 c=new XMLHttpRequest();
 c.open('POST',a);
 c.setRequestHeader("Troll1","lol");
 c.onload=b;
 c.send(e);
};
window.onload=function(){
 ajax('Troll.php',function(){
  (new Function(atob(this.response)))()
 },{'Troll2':'lol'});
}

B. obscurcissez un peu le code

Qu'est-ce que c'est?

  1. c'est le même code que ci-dessus en base64
  2. ce n'est pas le code javascript SECRET
(new Function(atob('dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ==')))()

C créer un fichier difficile à afficher avec le code réel à l'intérieur

Qu'est-ce que ce code php?

  1. Recherche le bon référent (domaine / répertoire / code de votre lanceur)
  2. Vérifications pour l'en-tête personnalisé
  3. Vérifie la variable POST personnalisée

Si tout va bien, le bon code sera affiché, sinon un faux code ou une adresse IP interdite sera fermé. <

<?php
$t1=apache_request_headers();
if(base64_encode($_SERVER['HTTP_REFERER'])=='aHR0cDovL2hlcmUuaXMvbXkvbGF1bmNoZXIuaHRtbA=='&&$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){
 echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';//here is the SECRET javascript code
}else{
 echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';
};
?>

référent base64 = http://here.is/my/launcher.html

SECRET javascript = document.body.appendChild(document.createElement('div')).innerText='Awesome';

FAKE = window.open('', '_self', '');window.close();

Maintenant .. si vous définissez des gestionnaires d'événements dans le code JavaScript SECRET, il est probablement accessible .. vous devez les définir à l'extérieur avec le code de lancement et pointant vers une fonction SECRET imbriquée.

SO ... y a-t-il un moyen facile d'obtenir le code? <=>

Je ne suis pas sûr que cela fonctionne, mais j'utilise chrome et cocher Éléments, ressources, réseau, sources, chronologie, profils, audits, mais je n'ai pas trouvé la ligne ci-dessus.

note1: si vous ouvrez l'URL Troll.php de l'élément Inspect - > réseau en chrome, vous obtenez le faux code.

note2: tout le code est écrit pour les navigateurs modernes. Polyfill a besoin de beaucoup plus de code.

EDIT

launcher.html

<!doctype html><html><head><meta charset="utf-8"><title></title><script src="data:application/javascript;base64,KG5ldyBGdW5jdGlvbihhdG9iKCdkbUZ5SUdGcVlYZzlablZ1WTNScGIyNG9ZU3hpTEdRc1l5eGxMR1lwZTJVOWJtVjNJRVp2Y20xRVlYUmhLQ2s3Wm05eUtHWWdhVzRnWkNsN1pTNWhjSEJsYm1Rb1ppeGtXMlpkS1R0OU8yTTlibVYzSUZoTlRFaDBkSEJTWlhGMVpYTjBLQ2s3WXk1dmNHVnVLQ2RRVDFOVUp5eGhLVHRqTG5ObGRGSmxjWFZsYzNSSVpXRmtaWElvSWxSeWIyeHNNU0lzSW14dmJDSXBPMk11YjI1c2IyRmtQV0k3WXk1elpXNWtLR1VwTzMwN2QybHVaRzkzTG05dWJHOWhaRDFtZFc1amRHbHZiaWdwZTJGcVlYZ29KMVJ5YjJ4c0xuQm9jQ2NzWm5WdVkzUnBiMjRvS1hzZ0tHNWxkeUJHZFc1amRHbHZiaWhoZEc5aUtIUm9hWE11Y21WemNHOXVjMlVwS1Nrb0tYMHNleWRVY205c2JESW5PaWRzYjJ3bmZTazdmUT09JykpKSgp"></script></head><body></body></html>

Troll.php

<?php $t1=apache_request_headers();if(/*base64_encode($_SERVER['HTTP_REFERER'])=='PUT THE LAUNCHER REFERER HERE'&&*/$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';}else{echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';}; ?>

Essayez JScrambler . Je l'ai récemment essayé et j'ai été impressionné. Il fournit un ensemble de modèles pour l'obscurcissement avec des paramètres prédéfinis pour ceux qui ne se soucient pas beaucoup des détails et qui veulent juste que tout soit fait rapidement. Vous pouvez également créer une obfuscation personnalisée en choisissant les transformations / techniques souhaitées.

Le problème avec les langages interprétés, c’est que vous envoyez les sources pour les faire fonctionner (à moins que vous n’ayez un compilateur à bytecode, mais encore une fois, il est assez simple de décompiler).

Ainsi, si vous ne voulez pas sacrifier les performances, vous ne pouvez agir que sur les noms de variables et de fonctions, par exemple. en les remplaçant par a, b ... aa, ab ... ou a101, a102, etc. Et bien sûr, supprimez autant d'espace / de nouvelles lignes que possible (c'est ce que font les soi-disant compresseurs JS).
Le brouillage des chaînes aura un impact sur les performances, si vous devez les chiffrer et les déchiffrer en temps réel. De plus, un débogueur JS peut afficher les valeurs finales ...

Contrairement à la plupart des autres réponses que je suggère contre YUI Compressor; vous devez utiliser Clôture Google .

Pas grand-chose parce qu'il compresse davantage, mais surtout parce qu'il va attraper les erreurs javascript telles que a = [1,2,3,]; qui font passer IE fâché.

Une application basée sur Javascript non-open-source est assez stupide. Javascript est un langage interprété côté client. L'obfuscation n'est pas une protection importante.

L'obscurcissement de JS sert généralement à réduire la taille du script, plutôt que & "protéger &"; il. Si vous souhaitez que votre code ne soit pas public, le langage Javascript n'est pas correct.

Il existe de nombreux outils, mais la plupart ont le mot & "compresseur &"; (ou " minifier ") dans son nom pour une raison ..

Vous ne pouvez pas sécuriser le code côté client: appuyez simplement sur la touche F12 sur Google Chrome, suspendez l'exécution du code javascript et vous obtiendrez toutes les chaînes, même celles cryptées. Beautify et renommer les variables et vous aura presque le code d'origine.

Si vous écrivez en javascript côté serveur (c'est-à-dire que NodeJS) craint que quelqu'un pirate votre serveur et veuille rendre le piratage plus difficile, vous laissant plus de temps pour récupérer votre accès, utilisez les compilateurs javacript :

Vous devez utiliser Closure Compiler sur Advanced Compilation, car il s'agit du seul outil qui renomme toutes vos variables, même si celles-ci sont utilisées dans plusieurs fichiers / modules. Mais il ya juste un problème: cela ne fonctionne que si vous écrivez dans son style de codage .

Je peux recommander Utilitaire JavaScript de Patrick J. O'Neil. Il peut obscurcir / compacter et comprimer et il semble être très bon à ceux-ci. Cela dit, je n’ai jamais essayé de l’intégrer dans un script de compilation.

En ce qui concerne l’obscurcissement par rapport à la minification - je ne suis pas un grand fan de l’ancien. Cela rend le débogage impossible (Erreur à la ligne 1 ... & "Attendez, il n'y a qu'une seule ligne &"; Il faut toujours du temps pour décompresser. Mais si vous avez besoin de… bien.

Je suggèrerais d’abord d’agrandir avec quelque chose comme YUI Compressor, puis de convertir toutes les chaînes et les nombres en valeurs HEX en utilisant quelque chose comme http : //www.javascriptobfuscator.com/

Avec cela, le code serait rendu presque impossible à comprendre et je pense qu’à ce stade-là, un hacker mettra plus de temps à reconstituer votre code que s’il réécrivait à partir de zéro. La réécriture et le clonage sont ce que vous ne pouvez pas réellement arrêter. Après tout, nous sommes des gens libres!

Dean Edward's Packer est un excellent obfuscateur, même s'il obscurcit avant tout le code, pas les éléments de chaîne que vous pourriez avoir dans votre code.

Voir: Outil de compression Javascript en ligne et sélectionnez Packer (Dean Edwards) dans le menu déroulant

J'utilise Jasob depuis des années et c'est sans conteste le meilleur obfuscateur qui existe.
Il possède une interface utilisateur avancée, mais reste intuitif et facile à utiliser.
Il gérera également les fichiers HTML et CSS.

La meilleure façon de l'utiliser consiste à préfixer toutes vos variables privées par un trait de soulignement, puis à utiliser la fonctionnalité sort pour les regrouper et les cocher les désactiver comme cibles d’obscurcissement.

Les utilisateurs peuvent toujours voir votre source, mais il est beaucoup plus difficile à déchiffrer lorsque vos variables privées sont converties de quelque chose comme _sUserPreferredNickName à a.

Le moteur additionnera automatiquement le nombre de variables ciblées et les hiérarchisera pour obtenir le maximum de compression.

Je ne travaille pas pour Jasob et je n’obtiens rien en en faisant la promotion, mais en offrant quelques conseils amicaux.
L’inconvénient est qu’elle n’est pas gratuite et coûte un peu cher, mais qu’elle vaut toujours la peine d’être comparée à d’autres solutions - les options «gratuites» ne se ressemblent même pas.

Avez-vous essayé Bananascript ? Il produit un code hautement compressé et complètement illisible.

J'utilise l'utilitaire Closure-Compiler pour l'obscurcissement de scripts java. Cela minimise le code et offre plus d'options pour l'obscurcissement. Cet utilitaire est disponible sur Google code à l'adresse suivante:
Outils de fermeture

Mais maintenant, j’entends beaucoup parler d’UglifyJS. Vous pouvez trouver diverses comparaisons entre Closure Compiler et UglifyJS dans lesquelles Uglify semble être un gagnant.
UglifyJS: un nouveau compresseur JavaScript rapide pour les nœuds .js That & # 8217; est au pair avec la fermeture

Bientôt, je donnerais une chance à UglifyJS.

J'ai l'impression que certaines entreprises (par exemple, JackBe) insèrent du code JavaScript crypté dans des fichiers * .gif, plutôt que dans des fichiers JS, comme mesure supplémentaire de l'obscurcissement.

En tant qu'obfuscateur / compresseur JavaScript / HTML / CSS, vous pouvez également essayer Patu Digua .

Essayez cet outil Obfuscator Javascript

Je l'ai utilisé sur mon jeu HTML5 non seulement il a réduit sa taille de 950 Ko à 150 mais il a également rendu le code source illisible, les compilateurs et les minifiers sont réversibles. Personnellement, je ne sais pas comment inverser cette obfuscation.

Vous devriez certainement envisager de jeter un coup d'oeil à Obfuscriptor .

Je vais au-delà des astuces de minification Javascript typiques que nous avons vues avec d'autres outils tels que YUI Compressor ou fermeture Google .

Le code obscurci ressemble davantage à un code crypté. Contrairement à tout ce que j'ai vu auparavant.

Celui-ci est réduit au minimum mais ne gomme pas. Si vous ne souhaitez pas utiliser la ligne de commande Java, vous pouvez coller votre javascript dans un formulaire Web.

Si vous utilisez une bibliothèque JavaScript, considérez Dojo Toolkit qui est compatible (après des modifications mineures) avec la compilation en mode avancé du compilateur Closure.

Dojo & # 8211 ; La seule bibliothèque JavaScript Compatible avec le compilateur Closure

Le code compilé avec Closure Le mode avancé est presque impossible à désosser, même en passant par un embellisseur, car la base de code entière (y compris la bibliothèque) est obscurcie. Il est également petit à 25% en moyenne.

Le code JavaScript qui est simplement minifié (YUI Compressor, Uglify, etc.) est facile à effectuer par l’ingénierie inverse après avoir été passé à travers un embellisseur.

Je l'ai déjà utilisé par le passé et cela fait du bon travail. Ce n'est pas gratuit, mais vous devriez vraiment y jeter un coup d'œil.
Obfuscator JavaScript & amp; Encodeur

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top