この質問は、質問のタイトルに要約するのが難しい
UPDATE あなたがそれにアクセスすることができます。私はこの質問から抽出された文字をもとに、あなたの入力のうち難読化された文字列を構築しますJSFiddle作成ここでは、かなり要旨は容易になりましたか?
私は最近、このプロファイルで次のように難読化されたJavaScriptの楽しいビットに出会いました。
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]
驚きを台無しにして申し訳ありませんが、これが評価されるとき、これはこれを返します:
"I love you" in Chrome
"I lone you" In Firefox
"I lo[e you" in IE10
これが機能するときの動作方法は、一連のメッセージを生成し、そのようにして文字を引き出すことです(例として「I」を使用)。
[]+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"
生成されるその他の文字列には、次のものがあります。
({}+[]) -> "[object Object]" (where the space comes from)
([]+!!-[]) -> "false" (used for it's "l")
[/~/+{}][+!1] -> "/~/[object Object]" (this is used for an "o")
(/<</[1]+[]) -> "undefined"
「n」と「[」の代わりを見つけることに興味があり、これを思いつきました。
String.fromCharCode(('1'.charCodeAt(0)<<1)+(10<<1))
これは1と0を使用するという精神の中で感じていますが、文字列とはまったく関係がないように見える、元のコードのよりエレガントな側面の1つに違反しています。他の誰かが、元の難読化されたコードと一致する「v」を生成する方法についてのアイデアを持っていますか?
これは、才能のある多くのJavaScriptプログラマーがこれをさらに詳しく調べた後に見つかった追加情報です。
Firefoxは "I lone you"を返します。
([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])[1^11<<1]+
[1^11<<1]
これから特定の文字をトリムします:
([]+/-/[(!!1+[])[1>>1]+(!!1+[])[1<<1^1]+(!1+[])[1|1<<1]+(!!1+[])[1^1]])
これはこれに評価されます:
"function test() {
[native code]
}"
これは "V"があるようです!!!
同じコードがこれを返すため、Chromeは「I love you」を返します。
"function test() { [native code] }"
「本当のプログラミングの問題」との疑わしい関係のために質問が締め切られる前に、@ Supr、@ Cory、および@ alpha123に基づいて構築された要約されたソリューションを追加すると思いました。
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])
コードとコードが生成するメッセージが複雑であることを考えると、JavaScriptエンジンが特別な感じを伝えているように見えます:)
function test() { [native code] }
、それを正規化して必要な文字を抽出できます