这个问题很难概括成问题标题
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的精神感觉的,但是却违反了原始代码的一个更为优雅的方面,即与字符串完全无关的外观。还有其他人对如何生成与原始混淆代码保持一致的“ v”有想法吗?
这是许多有才华的JavaScript程序员对此进行深入研究后发现的一些额外信息。
Firefox由于以下原因返回“我孤单”:
([]+/-/[(!!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返回“我爱你”,因为相同的代码返回以下内容:
"function test() { [native code] }"
问题是关闭与“真正的编程问题”可疑连接之前,我想我会添加一个概括的解决方案,建立在@ SUPR的,@科里和@ 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] }
,那么您可以将其标准化并提取您想要的字母