pertanyaan ini sulit untuk diringkas dalam judul pertanyaan
PEMBARUAN Saya membuat JSFiddle yang membangun string yang dikaburkan dari input Anda berdasarkan surat-surat yang diambil dari pertanyaan ini: Anda dapat mengaksesnya di sini , atau apakah intisari akan lebih mudah?
Baru-baru ini saya menemukan sedikit keceriaan JavaScript yang membingungkan di profil ini yang terlihat seperti ini:
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]
Maaf merusak kejutan tetapi ketika ini dievaluasi itu mengembalikan ini:
"I love you" in Chrome
"I lone you" In Firefox
"I lo[e you" in IE10
Cara ini berfungsi ketika pecah, adalah untuk menghasilkan serangkaian pesan dan menarik surat keluar seperti itu (menggunakan "I" sebagai contoh):
[]+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"
String lain yang dihasilkan termasuk:
({}+[]) -> "[object Object]" (where the space comes from)
([]+!!-[]) -> "false" (used for it's "l")
[/~/+{}][+!1] -> "/~/[object Object]" (this is used for an "o")
(/<</[1]+[]) -> "undefined"
Saya tertarik mencari pengganti untuk "n" dan "[" dan muncul dengan ini:
String.fromCharCode(('1'.charCodeAt(0)<<1)+(10<<1))
Yang saya rasakan dalam semangat menggunakan 1 dan 0, tetapi melanggar salah satu aspek yang lebih elegan dari kode asli yang merupakan penampilan yang tidak ada hubungannya dengan string sama sekali. Apakah ada orang lain yang memiliki ide tentang bagaimana menghasilkan "v" yang sesuai dengan kode asli yang dikaburkan?
Berikut adalah beberapa informasi tambahan yang ditemukan setelah banyak programmer JavaScript yang berbakat melihat lebih dalam
Firefox mengembalikan "I lone you" Karena baris ini:
([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^11<<1]+
[1^11<<1]
memangkas karakter tertentu dari ini:
([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])
Yang mengevaluasi ini:
"function test() {
[native code]
}"
Yang sepertinya kita punya "V" kita !!!
Chrome mengembalikan "I love you", karena kode yang sama mengembalikan ini:
"function test() { [native code] }"
Sebelum pertanyaan ditutup untuk koneksi yang meragukan dengan "masalah pemrograman nyata", saya pikir saya akan menambahkan solusi terangkum yang dibangun di atas @ Supr , @ Cory's dan @ alpha123's , lihat:
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])
Mengingat kompleksitas kode dan pesan yang dihasilkannya, hampir seperti mesin JavaScript memberi tahu betapa istimewanya Anda membuatnya :)
function test() { [native code] }
, maka Anda dapat menormalkannya dan mengekstrak surat yang Anda inginkan