Comment puis-je dire «amour» sans caractère ou chiffres en JavaScript?

Inspiré par le PPT de BlackHat DC 2011 de Ryan Barnett, en particulier le code ci-dessous:

($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+ ($$=($_=!''+$)[_/_]+$_[+$])])()[__[_/_]+__ [_+~$]+$_[_]+$$](_/_) 

Hier était une journée spéciale pour les amoureux, alors j’ai essayé d’écrire quelque chose de similaire. Qui alerte fondamentalement “je t’aime” sans aucun caractère ou chiffre.

Par exemple, “I” peut être obtenu à partir de ((_=-~[])/--_+[])[_]

nous avons “[Object Object]”, “true”, “false”, “NaN”, “Infinity” à utiliser, je ne peux pas trouver un moyen d’obtenir “v” de cette façon.

J’ai essayé de penser à Ssortingng.fromCharCode() , (Ryan a déjà une référence de window pour nous, donc en théorie, on peut window["Ssortingng"]["fromCharCode"](118) ) mais “S” et “C “personnage ici. Pensez aussi à window["eval"](...) , encore une fois, je n’ai pas de “v”.

Essayez simplement d’expliquer un peu, [] est vide, quand applique +/-/~ fonctionne, il convertit en nombre 0 , et ~[] donne 1 , 1/0 donne Infinitey . Ensuite, il s’agit de 1/0 + [] , ils seront tous deux convertis en chaîne pour l’addition, ce qui donne "Infinity" , et "Infinity"[_] == "Infinity"[0] == "I"

Le code original de Ryan est plus complexe, il est beaucoup plus utilisé, inclut la scope, la valeur de retour spéciale, etc. (ceci est une autre histoire)

Cela ne semble pas être une bonne idée de faire des choses, mais c’est très intéressant.

Avec l’aide de meze, j’ai pu produire ceci pour Firefox:

 ($=($=[$=[]][(__=!$+$)[_=-~-~-~$]+(_$={}+$)[_/_]+ ($$=($_=!''+$)[_/_]+$_[+$])])())[__[_/_]+__ [_+~$]+$_[_]+$$]((_$_=(__$=-~[])/--__$+[])[__$]+_$[_+++_]+__[__$=-~-~[]]+_$[-~[]]+($[_$[$__=_+_]+_$[++$__]+_$[++$__]+_$[++$__]+_$[++$__]+_$[++$__]]+[])[ $__+$__+--_]+__[++_]+_$[$__=_+--_]+_$_[_+++_]+_$[_/_]+$_[__$]); 

il est fondamentalement alert("I love you") , merci beaucoup! Si seulement je reçois l’aide hier, ce que je n’ai pas encore posté 🙁

JavaScript est magnifique, quelques variantes pour votre référence:

 $_ = "true" __ = "false" _$ = "[object Object]" $$ = "rt" _$_ = "Infinity" _ = 3 = 4 = 3 = 4 = 3 $ = window $__ = 8 = 13 __$ = 0 = 2 

Certaines variables sont réutilisées plusieurs fois, n’essaieront pas de laisser des détails, ce n’est pas un travail amusant 🙂 Je suis heureux, nous sums enfin arrivés! Cela a en fait beaucoup de potentiel, car nous avons maintenant “v”, et beaucoup de chiffres, nous pourrons en théorie eval() beaucoup de … choses plus facilement. Je vais le montrer à ma femme, j’espère qu’elle apprécie le _ $ – + () …

exemple comme référence: http://jsfiddle.net/Y4wqw/

btw, nous pouvons raccourcir un peu le code, car nous avons déjà une référence à sort() , qui peut être utilisé à la place de window [“Object”] pour obtenir le “code natif” => “v”, le voici:

 ($=($_$=($=[$=[]][(__=!$+$)[_=-~-~-~$]+(_$={}+$)[_/_]+ ($$=($_=!''+$)[_/_]+$_[+$])]))())[__[_/_]+__ [_+~$]+$_[_]+$$]((_$_=(__$=-~[])/--__$+[])[__$]+_$[_+++_]+__[__$=-~-~[]]+_$[-~[]]+($_$+[])[(__$<<__$<<__$)-_+~[]]+$_[--_]+_$[$__=_+++_]+_$_[_+--_]+_$[_/_]+$_[__$]); 

Encore une fois, cela ne fonctionne que dans Firefox, il se peut que vous n’essayiez pas de migrer vers un autre navigateur. Et j’adore Firefox.

Eh bien au moins dans Firefox, les objects natifs JavaScript renvoient la function Object() { [native code] } , qui a ‘v’. Donc, si nous avons une window et un Object , alors je suppose que nous pourrions faire:

 (window["Object"]+0)[29]; 

Même message, mais orthographe différente.

 // "I <3 u" _= +~[]; // 1 __= -[]; // 0 ___= +(-~[] -~[] -~[]); // 3 $='' +(''+(_/__))[__] // i +' ' // space +'<'+___ // <3 +' ' // space +(''+(_<__))[+(-~[] -~[])]; // u alert($); 

lien jsfiddle

 alert("\u2665"); // results in ♥ 

essayez ce code:

 $=(Å='',[Ç=!(µ=!Å+Å)+{}][Ç[È=++Å-~Å]+Ç[È+È]+µ[Å]+µ[Å-Å]])(); _=$[Ç[È+È+Å]+µ[Å-Å]+Ç[È+È]+Ç[Å]]("¾"); console.info( _[+[]] ); // concole is used just to show result ;) 

si vous l’exécutez, sur la console, vous obtiendrez “v” :), vous trouverez plus d’informations à ce sujet

il y a un moyen d’éviter “¾”, mais le résultat sera “V” (en fait rien de mal pour un tel mot comme l’amour :):

 $=(Å='',[Ç=!(µ=!Å+Å)+{}][Ç[È=++Å-~Å]+Ç[È+È]+µ[Å]+µ[Å-Å]])(); // we get window object _=$[Ç[È+È+Å]+µ[Å-Å]+Ç[È+È]+Ç[Å]]( $ ); // we use btoa function with argument "[object Window]", // and it returns "W29iamVjdCBXaW5kb3dd" - as you see there is V $$=-~!''; // 2 $$$=-~$$; // 3 console.info( _[$$*$$$] ); // "V"; 

btoa crée des données encodées à partir de la chaîne donnée, en utilisant un encodage base 64. En jouant avec cette fonction et en changeant d’argument, vous pouvez obtenir différents caractères 🙂