Diese Frage ist schwer in einem Fragentitel zusammenzufassen
UPDATE Ich habe eine JSFiddle , die eine verschleierte Zeichenfolge aus Ihrer Eingabe baut auf der Grundlage der Briefe aus dieser Frage extrahiert: Sie können darauf zugreifen hier , oder wäre ein Kern einfacher sein?
Ich bin kürzlich auf ein lustiges Stück verschleiertes JavaScript in diesem Profil gestoßen , das so aussieht:
javascript:[[]+1/!1][1^1][1>>1]+({}+[])[1<<1^11>>1]+([]+!!-
[])[1<<1]+[/~/+{}][+!1][-~1<<1]+([]+/-/[(!!1+[])[1>>1]+(!!1
+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^11<<1]+([,][
~1]+[])[1-~1]+[[]+{}][!1.1%1][11111.1%11.1*111e11|!1]+(/1/+
1/[1<1][1%1])[1^11]+[[],[]+{}][1][+1]+(/<</[1]+[])[1/1.1&1]
Es tut mir leid, die Überraschung zu ruinieren, aber wenn dies ausgewertet wird, wird Folgendes zurückgegeben:
"I love you" in Chrome
"I lone you" In Firefox
"I lo[e you" in IE10
Die Art und Weise, wie dies funktioniert, wenn es ausgebrochen ist, besteht darin, eine Reihe von Nachrichten zu generieren und Buchstaben wie folgt daraus herauszuziehen (am Beispiel des "Ich"):
[]+1/!1
returns
"Infinity"
then
[[]+1/!1]
creates this array:
["Infinity"]
then
[[]+1/!1][1^1]
Takes the first (1^1 == 0) element of that array
"Infinity"
finally
[[]+1/!1][1^1][1>>1]
Takes the first (1>>1 == 0) char of that string
"I"
Andere Zeichenfolgen, die generiert werden, sind:
({}+[]) -> "[object Object]" (where the space comes from)
([]+!!-[]) -> "false" (used for it's "l")
[/~/+{}][+!1] -> "/~/[object Object]" (this is used for an "o")
(/<</[1]+[]) -> "undefined"
Ich war daran interessiert, einen Ersatz für "n" und "[" zu finden, und fand Folgendes:
String.fromCharCode(('1'.charCodeAt(0)<<1)+(10<<1))
Was ich im Geiste der Verwendung von Einsen und Nullen empfinde, aber gegen einen der eleganteren Aspekte des ursprünglichen Codes verstößt, nämlich den Anschein, überhaupt nichts mit Zeichenfolgen zu tun zu haben. Hat jemand eine Idee, wie ein "v" generiert werden kann, das dem ursprünglichen verschleierten Code entspricht?
Hier sind einige zusätzliche Informationen, die gefunden wurden, nachdem viele talentierte JavaScript-Programmierer dies genauer untersucht hatten
Firefox gibt "Ich habe dich allein" zurück. Wegen dieser Zeile:
([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^11<<1]+
[1^11<<1]
schneidet einen bestimmten Charakter daraus ab:
([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])
Was dazu führt:
"function test() {
[native code]
}"
Was so aussieht, als hätten wir unser "V" !!!
Chrome gibt "Ich liebe dich" zurück, da derselbe Code dies zurückgibt:
"function test() { [native code] }"
Bevor die Frage wegen fragwürdiger Verbindung mit "einem echten Programmierproblem" geschlossen wird, dachte ich, ich würde eine zusammengefasste Lösung hinzufügen, die auf @ Supr's , @ Cory's und @ alpha123's aufbaut , sehen:
alert([[]+1/!1][1^1][1>>1]+({}+[])[1<<1^11>>1]+(
[]+!!-[])[1<<1]+[/~/+{}][+!1][-~1<<1]+[([]+/-/[(
!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(
!!1+[])[1^1]])[1+(1^(11+1+1)<<1)],([]+/-/[(!!1+[
])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[
])[1^1]])[1^11<<1],([]+/-/[(!!1+[])[1>>1]+(!!1+[
])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^(11
+1+1)<<1]][((([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<
1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[(1<<1<<1<<1
)+1<<1]==({}+[])[1^1])*1)+((([]+/-/[(!!1+[])[1>>
1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1
]])[(1^11<<1)-1]==({}+[])[1^1])<<1)]+([,][~1]+[]
)[1-~1]+[[]+{}][!1.1%1][11111.1%11.1*111e11|!1]+
(/1/+1/[1<1][1%1])[1^11]+[[],[]+{}][1][+1]+(/<</
[1]+[])[1/1.1&1])
Angesichts der Komplexität des Codes und der von ihm erzeugten Nachricht ist es fast so, als würde die JavaScript-Engine sagen, wie besonders Sie sich fühlen :)
function test() { [native code] }