questa domanda è difficile da riassumere in un titolo di domanda
AGGIORNAMENTO Ho creato un JSFiddle che costruisce una stringa offuscata dal tuo input in base alle lettere estratte da questa domanda: puoi accedervi qui , o sarebbe più semplice una sintesi ?
Recentemente ho trovato un po 'di JavaScript offuscato in questo profilo che assomiglia a questo:
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]
Mi dispiace rovinare la sorpresa, ma quando viene valutato restituisce questo:
"I love you" in Chrome
"I lone you" In Firefox
"I lo[e you" in IE10
Il modo in cui funziona quando viene scomposto è generare una serie di messaggi e tirarne fuori le lettere in questo modo (usando l'io come esempio):
[]+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"
Altre stringhe che vengono generate includono:
({}+[]) -> "[object Object]" (where the space comes from)
([]+!!-[]) -> "false" (used for it's "l")
[/~/+{}][+!1] -> "/~/[object Object]" (this is used for an "o")
(/<</[1]+[]) -> "undefined"
Ero interessato a trovare un sostituto per "n" e "[" e ho pensato a questo:
String.fromCharCode(('1'.charCodeAt(0)<<1)+(10<<1))
Che mi sento nello spirito di usare 1 e 0, ma viola uno degli aspetti più eleganti del codice originale che sembra non avere nulla a che fare con le stringhe. Qualcun altro ha idea di come generare una "v" in linea con il codice offuscato originale?
Ecco alcune informazioni extra che sono state trovate dopo che molti talentuosi programmatori JavaScript hanno dato un'occhiata più approfondita a questo
Firefox restituisce "I lone you" A causa di questa riga:
([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^11<<1]+
[1^11<<1]
taglia un carattere specifico da questo:
([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])
Che valuta questo:
"function test() {
[native code]
}"
Sembra che potremmo avere la nostra "V" !!!
Chrome restituisce "Ti amo", perché lo stesso codice restituisce questo:
"function test() { [native code] }"
Prima che la domanda fosse chiusa per una discutibile connessione con "un vero problema di programmazione", ho pensato di aggiungere una soluzione riepilogativa che si basa su @ Supr , @ Cory e @ alpha123 , ecco:
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])
Data la complessità del codice e del messaggio che produce, è quasi come se il motore JavaScript stia dicendo quanto lo rendi speciale :)
function test() { [native code] }
, quindi potresti normalizzarle ed estrarre la lettera che desideri