Comment puis-je brouiller (protéger) JavaScript? [fermé]
je veux faire une application JavaScript qui n'est pas open source, et donc je veux apprendre comment brouiller mon code JS? Est-ce possible?
24 réponses
la confusion:
Try Yui compresseur . C'est un outil très populaire, construit, amélioré et entretenu par L'équipe de Yahoo UI.
vous pouvez également utiliser:
Privé Chaîne De Caractères:
garder des valeurs de chaîne privée est une préoccupation différente, et l'obscurcissement ne sera pas vraiment de beaucoup d'avantage. Bien sûr, en empaquetant votre source dans un désordre confus, vous avez une version légère de security par obscurity . La plupart du temps, c'est votre utilisateur qui regarde la source, et les valeurs de chaîne sur le client sont destinées à leur usage, de sorte que cette sorte de valeur de chaîne privée n'est pas souvent nécessaire.
si vous aviez vraiment une valeur que vous ne vouliez pas qu'un utilisateur voit, vous auriez quelques options. Tout d'abord, vous pouvez faire une sorte de cryptage, qui est décrypté 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 pouvez probablement base64 Encoder quelques valeurs de chaîne, et ce serait plus facile.. mais quelqu'un qui voulait vraiment ces valeurs de chaîne pourrait facilement décoder les . Le cryptage est le seul moyen d'empêcher vraiment quiconque d'accéder à vos données, et la plupart des gens trouvent que c'est plus de sécurité qu'ils ont besoin.
Note:
L'obscurcissement dans Javascript a été connu pour causer des bugs. Les obfuscators sont un peu mieux à ce sujet, mais de nombreuses tenues décident qu'ils voient assez de bénéfice de minifying et gzipping , et les économies supplémentaires d'obfuscation ne vaut pas toujours la peine de la peine . Si vous essayez de protéger votre source, peut-être que vous déciderez que cela en vaut la peine, juste pour rendre votre code plus difficile à lire. JSMin est une bonne alternative.
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 trouver et supprimer le code non utilisé, et réécrit pour un minification maximum. Il peut aussi faire la vérification de type et préviendra des erreurs de syntaxe.
JQuery est récemment passé du compresseur YUI au compilateur de fermeture, et a vu un" solid improvement "
L'obscurcissement ne peut jamais vraiment fonctionner. Pour quiconque veut vraiment obtenir votre code, c'est juste un ralentisseur. Pire, cela empêche vos utilisateurs de corriger les bogues (et de vous renvoyer les correctifs), et rend plus difficile pour vous de diagnostiquer les problèmes sur le terrain. C'est un gaspillage de votre temps et de l'argent.
parlez à 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". Au lieu de cela, Open Source est un modèle particulier de licence accordant la permission d'utiliser librement et de modifier votre code. Si vous n'accordez PAS une telle licence, alors les personnes qui copient votre code sont en violation et (dans la plupart du monde) vous avez des options légales pour les arrêter.
la seule façon de protéger votre code est de ne pas l'envoyer. Déplacez l'important côté du serveur de code et demandez à votre code Javascript public d'y faire des appels Ajax.
vous pouvez obscurcir la source javascript tout ce que vous voulez, mais il sera toujours rétro-motorisable juste en vertu de l'exigence de tout le code source de fonctionner effectivement sur la machine client... la meilleure option que je puisse imaginer est d'avoir tout votre traitement fait avec du code côté serveur, et tout le code client javascript fait est d'envoyer des requêtes pour le traitement au serveur lui-même. Sinon, quelqu'un sera toujours en mesure de garder une trace de toutes les opérations que fait le code.
Quelqu'un a mentionné base64 pour garder les ficelles en sécurité. C'est une idée terrible. Base64 est immédiatement reconnaissable par les types de personnes qui voudraient désosser votre code. La première chose qu'ils feront, c'est de l'enlever et de voir ce que c'est.
il y a un certain nombre d'outils de mystification JavaScript qui sont librement disponibles; cependant, je pense qu'il est important de noter qu'il est difficile d'obscurcir JavaScript au point où il ne peut pas être rétro-conçu.
à cette fin, il y a plusieurs options que j'ai utilisées dans une certaine mesure heures supplémentaires:
-
compresseur YUI . Yahoo!'s compresseur JavaScript fait un bon travail de condensation de la code qui améliorera son temps de chargement. Il y a un petit niveau d'obscurcissement qui fonctionne relativement bien. Essentiellement, compresseur va changer les noms de fonction, Supprimer l'espace blanc, et modifier les variables locales. C'est ce que j'utilise le plus souvent. C'est un outil open-source basé sur Java.
-
JSMin est un outil écrit par Douglas Crockford qui cherche à minifier votre source JavaScript. Selon les propres mots de Crockford, " JSMin n'obscurcit pas, mais il ne uglify."Son objectif premier est de minimiser la taille de votre source pour un chargement plus rapide dans les navigateurs.
-
Libre JavaScript Obfuscator . C'est un outil basé sur le web qui tente d'obscurcir votre code en l'encodant. Je pense que les compromis de sa forme d'encodage (ou d'obscurcissement) pourrait venir au prix de filesize; cependant, c'est une question de préférence personnelle.
Ce que je voudrais faire:
A. Troll le pirate!
Ce EST sera dans la deuxième partie de mon faux/brouillé lanceur de code javascript secret. Celui que vous voyez dans le code source.
Qu'est-ce que ce code?
- "1519200920 des charges" le code réel
- définit un en-tête personnalisé
- affiche 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. obscurcir un peu le code
Qu'est-ce que c'est?
- c'est le même code que ci-dessus en base64
- ce n'est pas le code javascript SECRET
(new Function(atob('dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ==')))()
C créer un fichier php difficile à afficher avec le code réel à l'intérieur
Qu'est-ce que ce code php?
- Vérifie le bon référent (domaine/dir/code de votre lanceur)
- vérifie l'en-tête personnalisé
- Vérifie pour le POSTE de douane variable
si tout va bien, il vous montrera le bon code sinon un faux code ou une adresse ip d'interdiction, page de fermeture.. quoi.
<?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=';
};
?>
base64 referrer = 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 les gestionnaires d'événements dans le javascript SECRET, il est probablement accessible.. vous devez les définir à l'extérieur avec le launchcode et pointant vers une fonction secrète imbriquée.
SO... y a-t-il un moyen facile d'obtenir le code?
document.body.appendChild(document.createElement('div')).innerText='Awesome';
Je ne suis pas sûr si cela fonctionne, mais je suis en utilisant chrome et les éléments vérifiés, les ressources, le réseau,les Sources,la chronologie,les profils, les Audits mais je n'ai pas trouvé la ligne ci-dessus.
note1: si vous ouvrez le Troll.url php De L'élément D'inspection - > réseau dans chrome vous obtenez le faux code.
note2: le code entier est écrit pour les navigateurs modernes. polyfill a besoin de plus de code.
EDIT
Lanceur.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=';}; ?>
Essayer JScrambler . J'ai fait un tour récemment et j'ai été impressionné. Il fournit un ensemble de gabarits pour l'obscurcissement avec des paramètres prédéfinis pour ceux qui ne se soucient pas beaucoup des détails et veulent juste le faire rapidement. Vous pouvez également créer l'obscurcissement Personnalisé En choisissant les transformations / techniques que vous voulez.
le problème avec les langues interprétées, c'est que vous envoyez la source pour les faire fonctionner (à moins que vous n'ayez un compilateur pour bytecode, mais là encore, il est assez trivial de décompiler).
donc, si vous ne voulez pas sacrifier la performance, 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, retirez autant d'espace / nouvelles lignes que vous le pouvez (c'est ce que font les compresseurs JS).
Les chaînes obscurcissantes auront un succès de performance, 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 Compresseur, vous devez utiliser Google Closure .
pas beaucoup parce qu'il comprime plus, mais surtout parce qu'il va attraper des erreurs javascript telles que a = [1,2,3,];
qui rendent IE aller haywire.
une application non-open-source basée sur Javascript est assez stupide. Javascript est un langage interprété côté client.. L'obscurcissement n'est pas une grande protection..
js obfuscation est généralement fait pour réduire la taille du script, plutôt que de "protéger" elle. Si vous êtes dans une situation où vous ne voulez pas que votre code soit public, Javascript n'est pas le bon langage..
Il y a beaucoup d'outils autour, mais la plupart ont la parole "compresseur" (ou "minifier") en son nom pour une raison..
vous ne pouvez pas sécuriser le code côté client: appuyez simplement sur F12 sur Google Chrome, pause exécution javascript et vous obtiendrez toutes les chaînes, même celles qui sont cryptées. Beautify it et renommer les variables et vous obtiendrez presque le code original.
si vous écrivez côté serveur javascript (c.-à-d. NodeJS) a peur de quelqu'un piratage dans votre serveur et veulent rendre le travail de hacker plus difficile, donnant vous avez plus de temps pour récupérer votre accès, puis utilisez compilateurs javaccript :
vous devez utiliser le compilateur de fermeture sur la Compilation avancée, car c'est le seul outil qui renomme toutes vos variables, même si celles-ci sont utilisées dans plusieurs fichiers/modules. Mais il a juste un problème: il ne fonctionne que si vous écrivez dans son le style de codage .
pour ce qui est d'affaiblir contre minifying - je ne suis pas un grand fan de l'ancien. Cela rend le débogage impossible (erreur à la ligne 1... "attendez, il y a une seule ligne") et ils prennent toujours le temps de décompresser. Mais si vous en avez besoin... bien.
le Packer de Dean Edward est un excellent brouilleur, bien qu'il obnubile principalement le code, pas tous les éléments de chaîne que vous pouvez avoir dans votre code.
voir: outil de Compression Javascript en ligne et sélectionner Packer (Dean Edwards) dans la liste déroulante
je suggère d'abord minify avec quelque chose comme compresseur YUI, puis convertir toutes les chaînes et les nombres en valeurs HEX en utilisant quelque chose comme http://www.javascriptobfuscator.com/
avec ceci, le code serait rendu presque impossible à comprendre et je pense qu'à ce stade, il faudra plus de temps à un Hacker pour rééditer votre code que s'il réécrivait à partir de zéro. Réécrire et Cloner est ce que vous ne pouvez pas réellement arrêter. Après tous, nous sommes libres-les gens !
j'utilise Jasob depuis des années et c'est de loin le meilleur obfuscator là-bas.
Il a une interface utilisateur avancée, mais il est encore intuitif et facile à utiliser.
Il traitera également les fichiers HTML et CSS.
la meilleure façon de l'utiliser est de préfixer toutes vos variables privées avec quelque chose comme un underscore, puis utiliser la fonctionnalité sort
pour les regrouper toutes et cochez comme cibles pour l'obscurcissement.
les utilisateurs peuvent toujours voir votre source, mais il est beaucoup plus difficile de déchiffrer quand vos variables privées sont converties de quelque chose comme _sUserPreferredNickName
à a
.
le moteur va automatiquement compter le nombre de variables ciblées et les prioriser pour obtenir la compression maximale.
Je ne travaille pas pour Jasob et je ne sors rien de les promouvoir, en leur donnant simplement quelques conseils amicaux.
L'inconvénient est qu'il n'est pas gratuit et est un peu cher, mais il en vaut la peine quand il est empilé contre des alternatives - les options "libres" ne s'approchent même pas.
avez-vous essayé Bananascript ? Il produit du code hautement compressé et complètement illisible.
j'utilise L'utilitaire Closure-Compiler pour masquer le script java. Il minimise le code et a plus d'options pour l'obscurcissement.
Cet utilitaire est disponible à Google code à L'URL ci-dessous:
outils de fermeture
mais aujourd'hui j'entends beaucoup D'UglifyJS. Vous pouvez trouver diverses comparaisons entre le compilateur de fermeture et UglifyJS dans lequel Uglify semble être un gagnant.
UglifyJS: A Nouveau Compresseur JavaScript Rapide Pour Le Noeud.js That's On pair With Closure
bientôt je donnerais la chance à UglifyJS.
j'ai l'impression que certaines entreprises (par exemple: JackBe) ont mis du code JavaScript crypté à l'intérieur *.les fichiers gif, plutôt que les fichiers JS, comme mesure supplémentaire d'obscurcissement.
comme JavaScript/HTML/CSS obfuscator/compresseur, vous pouvez aussi essayer Patu Digua .
Essayer cet outil Javascript Obfuscator
Je l'ai utilisé sur mon jeu HTML5 non seulement il a réduit sa taille de 950KB à 150, mais aussi fait le code source illisible compilateurs de fermeture et les minifieurs sont réversibles Je ne sais personnellement comment inverser cette confusion.
vous devriez certainement envisager de jeter un oeil à Obfuscriptor .
je va au-delà de la typique Javascript minifying des astuces que nous avons vu à partir d'autres outils tels que YUI Compressor ou Google Fermeture .
le code brouillé ressemble plus à un cryptage. Contrairement à tout ce que j'ai vu avant.
celui-ci minimise mais n'obscurcit pas. Si vous ne voulez pas utiliser Java en ligne de commande, 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 de mode Avancé du compilateur de fermeture.
Dojo – La Seule Bibliothèque JavaScript Compatible avec le compilateur de fermeture
code compilé avec le mode avancé de fermeture est presque impossible de rétro-ingénieur, même en passant par un plus beau, que le entier base de code (includinhg la bibliothèque) est obscurci. Il est également de 25% petit en moyenne.
code JavaScript qui est simplement minifié (compresseur YUI, Uglify etc.) est facile à rétro-ingénieur après passage par un plus beau.
j'ai utilisé dans le passé, et il fait un bon travail. Ce n'est pas gratuit, mais vous devriez y jeter un oeil.
JavaScript Obfuscator & Encoder