Il s'agit d'un petit morceau de code JavaScript qui alerte "Hello world" :
=/´~//*´*/['_'];o=()=_=3;c=()=()-();()=()=(o^_^o)/(o^_^o);()={:'_',:((==3)+'_')[],:(+'_')[o^_^o-()],:((==3)+'_')[]};()[]=((==3)+'_')[c^_^o];()['c']=(()+'_')[()+()-()];()['o']=(()+'_')[];(o)=()['c']+()['o']+(+'_')[]+((==3)+'_')[]+(()+'_')[()+()]+((==3)+'_')[]+((==3)+'_')[()-()]+()['c']+(()+'_')[()+()]+()['o']+((==3)+'_')[];()['_']=(o^_^o)[o][o];()=((==3)+'_')[]+().+(()+'_')[()+()]+((==3)+'_')[o^_^o-]+((==3)+'_')[]+(+'_')[];()+=();()[]='\\';().=(+)[o^_^o-()];(oo)=(+'_')[c^_^o];()[o]='\"';()['_'](()['_'](+()[o]+()[]+()+()+()+()[]+()+(()+())+()+()[]+()+()+(()+())+()[]+()+((o^_^o)+(o^_^o))+((o^_^o)-())+()[]+()+((o^_^o)+(o^_^o))+()+()[]+(()+())+(c^_^o)+()[]+()+((o^_^o)-())+()[]+()+()+(c^_^o)+()[]+()+()+(()+())+()[]+()+(()+())+()+()[]+()+(()+())+()+()[]+()+(()+())+(()+(o^_^o))+()[]+()+(c^_^o)+()[]+()+((o^_^o)-())+(()+(o^_^o))+()[]+()+(()+())+(()+(o^_^o))+()[]+()+((o^_^o)+(o^_^o))+((o^_^o)-())+()[]+()+(()+())+()+()[]+()+()+()+()[]+()+((o^_^o)-())+()[]+(()+())+()+()[o])())('_');
Une version qui a de l'allure :
= /´~//*´*/['_'];
o = () = _ = 3;
c = () = () - ();
() = () = (o^_^o)/(o^_^o);
() = {
: '_',
: ((==3)+'_')[],
: (+'_')[o^_^o-()],
: ((==3)+'_')[]
};
()[] = ((==3)+'_')[c^_^o];
()['c'] = (()+'_')[()+()-()];
()['o'] = (()+'_')[];
(o)=()['c'] + ()['o'] + ( + '_')[] + ((==3) + '_')[] + (() + '_')[() + ()] + ((==3) + '_')[] + ((==3) + '_')[() - ()] + ()['c'] + (() + '_')[() + ()] + ()['o'] + ((==3) + '_')[];
()['_'] = (o^_^o)[o][o];
() = ((==3) + '_')[] + (). + (() + '_')[() + ()] + ((==3) + '_')[o^_^o-] + ((==3) + '_')[] + (+'_')[];
() += ();
()[] = '\\';
(). = (+)[o^_^o-()];
(oo) = (+'_')[c^_^o];
()[o] = '\"';
()['_'](()['_'](+()[o]+()[]+()+()+()+()[]+()+(()+())+()+()[]+()+()+(()+())+()[]+()+((o^_^o)+(o^_^o))+((o^_^o)-())+()[]+()+((o^_^o)+(o^_^o))+()+()[]+(()+())+(c^_^o)+()[]+()+((o^_^o)-())+()[]+()+()+(c^_^o)+()[]+()+()+(()+())+()[]+()+(()+())+()+()[]+()+(()+())+()+()[]+()+(()+())+(()+(o^_^o))+()[]+()+(c^_^o)+()[]+()+((o^_^o)-())+(()+(o^_^o))+()[]+()+(()+())+(()+(o^_^o))+()[]+()+((o^_^o)+(o^_^o))+((o^_^o)-())+()[]+()+(()+())+()+()[]+()+()+()+()[]+()+((o^_^o)-())+()[]+(()+())+()+()[o])())('_');
JSFiddle
Elle est tirée d'ici : https://codegolf.stackexchange.com/questions/23975/obfuscation-challenge/24041#24041
Comment cela fonctionne-t-il ? Je ne vois même pas le alert
dans ce code.
13 votes
Il y a une brève explication dans le troisième commentaire à codegolf.stackexchange.com/questions/307/obfuscated-hello-world/
1 votes
@NPE oui, j'ai lu cela, mais l'auteur ne donne qu'un petit indice. Je n'ai toujours aucune idée de comment cela fonctionne...
1 votes
La réponse à laquelle vous avez renvoyé contient un lien supplémentaire vers la source originale de la réponse. Dans les commentaires qui suivent, une explication est donnée - il s'agit d'utiliser RegEx parmi d'autres outils. Par ailleurs : votre "belle version" est incorrecte - j'ai repéré
='\"';
dans la dernière ligne, il peut y avoir d'autres erreurs.1 votes
Quelques conseils : en JavaScript, vous pouvez utiliser presque tous les caractères Unicode comme noms de variables. La deuxième chose est que la première variable semble être une expression régulière qui fait des remplacements, mais je ne comprends pas tout le code.
9 votes
J'ai trouvé l'outil pour cela utf-8.jp/public/aaencode.html
0 votes
Voir aussi excellent article de Mathias Bynens sur le thème des identifiants JavaScript.