ledoc | lovers | Nouveau membre | | 44 messages postés |
| Posté le 28-11-2009 à 09:14:07
| Protections JavaScript Combien de fois êtes vous tomber sur des sites, où même sur des challenges qui vous bloquait la route, avec une source dont vous ne compreniez pas deux mot? Grace à ce tutoriel, j'espère que vous serrez en mesure de reussir a faire tous ce qui vous bloquait. Ce tutoriel est très simplement organiser, les protections se suivent et l'une ammèene a la suivante, voilà, le petit topo est terminé, bonne lecture . 1)Les mots de passe cachés par des étoiles sont généralement sous cette forme dans la source: <input name="textfield" type="password" value="Mot_de_pass" maxlength="11"> Ici, le mot de passe caché par les étoiles est après value=", le mot est don "Mot_de_passe" Dans les protections du genre: var a; if (a =="b"){ alert("good"); } else { alert("pas good"); } C'est toujours aussi simple, if verifie la condition: la valeur variable a est égale a la lettre b si c'est le cas, la fonction alert est lancé et affiche good, sinon, elle affiche pas good, un jeu d'enfant non? Quand le login et le password sont demandés, on a: if (a=="b" && g="e" /*Ici, il faut que a soit égal a "b" et que la varible g soit égale a "e"*/ { alert("good"); } else { alert("pas good"); } Facile non? Bon, on va passer à une étape un peut plus au dessus, dans le cas ou une fenêtre s'ouvre et vous demande: Entrez votre mot de passe; vous êtes affolé(e), vous ne savez pas quoi faire? pas de raison de vous inquiéter, c'est tout aussi simple Affichez la source de la page, et observez. Exemple: var b; /* On déclare la variable b */ b=prompt("Entrez votre password pour continuer",""); /*Une fenêtre s'affiche, la valeur que vous taperez sera donner a la variable b. */ if (b=="L4m3r" /* On verife la condition, b est egale a L4m3r, si oui: */ { alert("Bien joué"); /* On affiche une fenêtre disant: Bien joué */ } else { alert("Try again"); /* Sinon, on affiche : Try again */ } Dans le cas ou le webmaster est plus intelligent, il a peut être mis une redirection au cas ou le password serait faux, dans ce cas, pas de panique non plus on vide ses fichiers internet temporaire (il y a une option d'internet explorer pour ça), ensuite, retournez sur la page qui vous bloque, la fenêtre vous demandant de mettre votre pass s'affiche normalement, Allez donc dans vos internet tempory files, et vous verrez la page , ouvrez là avec le bloc note et vous apercevrez une partie de la source dans ce genre: var b; /* On déclare la variable b */ b=prompt("Entrez votre password pour continuer",""); /* Une fenêtre s'affiche, la valeur que vous tapperez sera donnée a la variable b. */ if (b=="L4m3r" /* On verife la condition, la variable b est egale a L4m3r, si oui: */ { window.location.href="Gagner.htm";; /* On est redirigé vers la page: gagner.htm*/ } else { window.location.href="Perdu.htm"; /* Sinon, on est redirigé vers la page: perdu.htm */ } Il beaucoup d'autres protections Javascript, beaucoup sont toutes simplement des maths plutôt que des protections ultra-developpées Nous terminerons cette introduction par une fonction assez peu utilisée, pas très efficace, mais faisant peur au premier passant non averti, je vous parle, vous l'aurez biensûr compris , de la fonction escape/unescape qui consiste à crypter la source avec les représentations ASCII des caractères, par exemple, <script> crypté par cette méthode donnera: %3Cscript%3E ça a l'air assez simple mais imaginez pour une source toute entiere! Notre dernier exemple consistera a montrer une partie d'une source cyptée avec cette fonction, de savoir comment la décrypter en créant un petit prog javascript. var%20l%3B%0Aif%20%28l%3D%3D%22Unicode%22%29%7B% 0Aalert%28%22Bien%2C%20tu%20es%20pr%E8s%20pour%20 le%20prochain%20niveau%22%29%3B%0A%7D%0Aelse%20 %7B%20%0Aalert%28%22Pas%20encore%22%29%3B%0A%7D Pas banal hein? Certains ont même eu l'idée de recrypté encore plusieur fois cette source, imaginez le résultat Bon, pour afficher ce que la page devait afficher, on fait: <script language="JavaScript"> document.write(unescape("var%20l%3B%0Aif%20%28l%3D %3D%22Unicode%22%29%7B%0Aalert%28%22Bien%2C%20tu%2 0es%20 pr%E8s%20pour%20le%20prochain%20niveau%22%29%3B%0A %7D%0Aelse%20%7B%20%0Aalert%28%22Pas%20encore%22%2 9% 3B%0A%7D")); </script> Maintenant, passons à la phase analyse. On remarque que la fonction permettant d'interpreter le code et d'afficher ce qu'il aurait du afficher est: unescape (escape servant à le crypter) Imaginons que la fonction unescape ne soit pas utilisé afin d' "interpreter" le code, mais afin d'afficher le code(enfin le code décrypté :p) La fontion alert, accouplé avec la fonction unescape nous permet de le faire, Soit le programme suivant: <html> /* Pas besoin d'explication je pense */ <head> <title>Prog Pour décrypter escape, Copyright :p</title> /* de même */ </head> <script language="JavaScript" type="text/javascript"> <!-- var m; /* On déclare la variable m */ m=" Code crypté"; /* On met le code crypté entre les guillemet */ document.write(unescape(m));/* On affiche ce que doit afficher le code crypté*/ alert(unescape(m)); /* On affiche une petite fenêtre, qui, grace à la fonction unescape va decrypter le contenu de la variable m */ //--> </script> </body> </html> Au cas où le code serait crypté plusieurs fois, on rajoute tout simplement des unescape a la demande, si la source est crypté 2 fois, on fera: alert(unescape(unescape(m)) Bon, un autre petit programme beaucoup plus simple a utilisé qui est fait pour décrypter aussi les unescape: <html> <head> <title>Décrypteur de source</title> </head> <body bgcolor="#000000" text="red"> <b>Decrypteur de source</b><br> Représentation du code: <script language="JavaScript" type="text/javascript"> <!-- var x; x=prompt("Entrez votre source à décrypter", ""); document.write(unescape(x)); alert(unescape(unescape(x))); //--> </script> </body> </html> Copyright Metttez ça dans un fichier texte et renommer en .htm Conclusion de ce tuto, si vous voulez avoir une réélle protection, préferez le php au javascript, car le php est executé du côté serveur, et la source que l'on peut voir n'est qu'une représentation(du code php) que le serveur nous a renvoyé. TTX69 Pour complèter le travail établit Zatham sur les "protections" du javascript j'me propose de vous parler de certaines fonctions de ce langage. On peut définir en Javascript ce qu'on appel des objets, des méthodes et des propriétés. Je ne vous donnerais pas leurs définitions exactes car vous en trouverez certainement de plus claires que la mienne, sur d'autres sites. Je peux juste vous dire qu'un objet est en qq sorte une super variable et que méthodes et propriétés sont des sortes de fonctions permettant de manipuler ces variables. On va commencer par faire simple avec l'objet STRING et les méthodes charAt(), indexOf et substring. Voilà une chaîne : U NE C H AIN E Voilà les positions respectives: 0 12 3 4 567 8 C'est pas très droit mais ça se comprend. (J'ai vu mais je peux pas le faire plus droit dsl) Voici un exemple de code: var mot = "tu trouveras jamais le code!"; // Une prase de base var cod = document.form.element.value; // Le code que vous tapez est copié dans // variable cod a = mot.substring (12,13); // On prend le 12e caractère ("[space]" b = mot.substring (3,9); // On prend les 3,4,5,6,7,8e caractères //(ss-chaîne "trouve" c = mot.substring (10,12); d = mot.substring (8,10); e = mot.charAt (15); // Le caractère position 15 ("m" f = mot.substring (0,1); g = mot.substring (25,27); h = mot.substring (22,23); txt = e+d+g+a+f+"'"+c+h+b; // Et la on concatène (on met bout à bout) if ( txt = cod) // Et toujours la fameuse comparaison alert ("Pass correct!"); // C'est bon else alert ("Pass incorrect!"); // Et là forcement... Et là si vous suivez bien les caractères et que je m'suis pas planté , vous devriez trouvez qu'il faut noter la phrase "merde t'as trouve" dans la case password. En effet l'instruction substring (x , y) récupère la ss-chaîne à partir de la position x jusqu'à la position (y-1) comprise (ou bien jusqu'à la position y sans la prendre elle-même). Ce type de protection n'est pas très difficile en soit mais parfois lorsqu'on utilise une methode dans une autre: for (var i=0 ; i<10 ; i++) { a += txt.substring(motsubstring(i,i+1) , parseInt(mot.substring(i,i+1))+1) // Challenge espionet } on s'aperçoit que c'est quand un peu casse tête (et sans entré dans les détails) mais ne vous sécouragé pas il suffit juste de bien connaître les fonctions utilisées et de suivre le cheminement intellectuel de l'auteur de la source, càd de suivre le script pas à pas (et s'casser un peu la tête, du moins c comme ça que je fait). Et en parlant de fonctions, le script utilise parseInt(x , y) qui transforme une chaîne en un entier, en notant que y est la base dans laquelle est exprimé la chaine x. OK! C'est du chinois donc qq exemples et vous allez mieux comprendre: parseInt(0x0C) = 12 // 0x devant le nombre donc chiffre en héxa par défaut parseInt(1110,2) = 14 // 1110 en base 2 (binaire) ça fait 14 parseInt(10,37abc) = 10 // Ben oui, on a dit un entier parseInt(abc10,37) = isNaN // La fonction sort isNaN (is Not A Number) *note:attention aux majuscule et minuscules et observez ce script: var mot = "Tu Trouveras Jamais Le Code!"; // La même phrase avec des // majuscules a = mot.substring(12,13); // On prend le 12e caractère b = mot.substring.toLowerCase(3,9); // Les 3,4,5,6,7,8e caractères //(ss-chaîne "trouve" en MINUSCULE c = mot.substring (10,12); d = mot.substring (8,10); e = mot.charAt.toUpperCase (15); // Le caractère position 15 ("m" en // MAJUSCULE donc "M" f = mot.substring (0,1); g = mot.substring (25,27); h = mot.substring (22,23); txt = e+d+g+a+f+"'"+c+h+b; // Et la on concatène (on met bout à bout) Et maintenant le bon code est "Merde t'as trouve", ben oui c'est juste une majuscule qui diffère mais le code sera quand même reconnu comme faux. Toujours dans le registre de l'objet string je vais vous parler de la méthode indexOf() qui retourne la valeur de la position du premier caractère d'une ss-chaîne: var chaine = "un sous-marin jaune"; var index = chaine.indexOf("un"); // retourne 0 var index = chaine.indexOf("le"); // retourne -1 (pas trouvé var index = chaine.indexOf("sous"); // retourne 3 var index = chaine.indexOf("un", 10); // retourne 16 (dans « ja-un-e » (Pompé d'un site mais m'en voulaiy pas!) Voilà un script: var mot = "tu trouveras jamais le code!"; var pass = document.form.element.value; a = mot.indexOf("tro"); // valeur = 3 b = mot.indexOf("ja"); // valeur = 13 c = mot.indexOf("co"); // valeur = 23 d = mot.indexOf("ama"); // valeur = 14 e = mot.indexOf("uve"); // ...... f = mot.indexOf("tut"); // g = mot.indexOf("sja"); // h = mot.indexOf("!"); // pswd = "a"+"b"+"c"+"d"+"e"+"f"+"g"+"h"; if ( pswd == pass) alert ("Pass correct!"); else alert ("Pass incorrect!"); Voilà c'est toujours le même principe avec une fonction qui diffèrent un peu c'est l'analyse de la source! J'espère avoir été suffisamment clair et ne m'être pas trompé dans ce que j'ai pu écrire. Voilà j'espère que ces qq lignes serviront à ceux qui désirent apprendre.
-------------------- Bonjour a tous , G'Day All / Désolé pour certain tutorial qui sont en anglais / Et bon Hack! / |
|