取自 - http://www.echojs.com/news/8518
这如何产生window.alert("I love you");
?我理解它如何从I
获得Infinity
,就是它
$= ~[]; $={___:
++$,$$$$: (![]+"")[$],
__$:++$,$_$_:(![]+"")
[$],_$_:++$,$_$$:
({} + "")[$],
$$_$
:
($[$]+"") [$],_$$:
++$,$$$_:(!""+"")[$],$__:
++$,$_$:++$,$$__:({}+"")
[$],$$_: ++$,$$$:++$,
$___:++$,$__$:++$
};$.$_ = ($.$_=
$ + "")
[
$.$_$]+ ($._$=
$.$_[$.__$ ])+($.$$=(
$.$+"")[$.__$])+((!$)+"")
[$._$$]+($.__=$.$_[$.$$_
])+($.$=(!""+"")[$.__$
]) + ($._= (!""+"")
[ $._$_]) +$.$_
[ $.$_$ ]+
$.__+
$._$+ $.$;
$.$$=$.$+(!""+"")
[$._$$]+$.__+$._+$.$+
$.$$;$.$=($.___)[$.$_]
[$.$_];$.$($.$($.$$+
"\""+$.$_$_+(![]+
"")[$._$_]+
$.$$$_+
"\\"+
$.__$+ $.$$_+
$._$_+$.__+"(\\\"\\"+
$.__$+$.__$+$.__$+"\\"+
$.$__+$.___+(![]+"")[$._$_]+
$._$+"\\"+$.__$+$.$$_+$.$$_+
$.$$$_+"\\"+$.$__+ $.___+
"\\"+$.__$+$.$$$+$.__$+
$._$+$._+".\\\"\\"+
$.$__ +$.___+
")"+ "\"")
( ))(
);
答案 0 :(得分:7)
我翻译了整个代码:
$ = ~[];
/*
* $ = -1
*/
$ = {
___:++$, // $.___ = $ = 0
$$$$: (![] + "")[$], // $.$$$$ = "false"[0] = "f" unuse
__$: ++$, // $.__ = $ = 1
$_$_: (![] + "")[$], // $.$_$_ = "false"[1] = "a"
_$_: ++$, // $._$_ = $ = 2
$_$$: ({} + "")[$], // $.$_$$ = "[object Object]"[2] = "b" unuse
$$_$:($[$] + "")[$], // $.$$_$ = "undefined"[2] = "d" unuse
_$$:++$, // $._$$ = $ = 3
$$$_: (!"" + "")[$], // $.$$$_ = "true"[3] = "e"
$__:++$, // $.$__ = $ = 4
$_$: ++$, // $.$_$ = $ = 5
$$__: ({} + "")[$], // $.$$__ = "[object Object]"[5] = "c" unuse
$$_: ++$, // $.$$_ = $ = 6
$$$: ++$, // $.$$$ = $ = 7
$___: ++$, // $.$___ = $ = 8
$__$: ++$ // $.$__$ = $ = 9
};
/*
* build digit and data
*/
$.$_ =
($.$_ = $ + "")[$.$_$] + // $.$_ = "[object Object]"
// "[object Object]"[5] = "c"
($._$ = $.$_[$.__$]) + // $._$ = "[object Object]"[1] = "o"
($.$$ = ($.$ + "")[$.__$]) + // $.$$ = "undefined"[1] = "n"
((!$) + "")[$._$$] + // "false"[3] = "s"
($.__ = $.$_[$.$$_]) + // $.__ = "[object Object]"[6] = "t"
($.$ = (!"" + "")[$.__$]) + // $.$ = "true"[1] = "r"
($._ = (!"" + "")[$._$_]) + // $._ = "true"[2] = "u"
$.$_[$.$_$] + // "[object Object]"[5] = "c"
$.__ + // "t"
$._$ + // "o"
$.$; // "r"
/*
* $.$_ = "constructor"
*/
$.$$ =
$.$ + // "r"
(!"" + "")[$._$$] + // "true"[3] = "e"
$.__ + // "t"
$._ + // "u"
$.$ + // "r"
$.$$; // "n"
/*
* $.$$ = "return"
*/
$.$ =
($.___)[$.$_][$.$_]; // (0)["constructor"]["constructor"]
/*
* $.$ = function Function(){ [native code] }
*/
$.$( // Function(
$.$( // Function(
$.$$ + // "return
"\"" + // "\""
$.$_$_ + // "a"
(![] + "")[$._$_] + // "l"
$.$$$_ + // "e"
"\\" + // "\\"
$.__$ + // "1"
$.$$_ + // "6"
$._$_ + // "2"
$.__ + // "t"
"(\\\"\\" + // "(\\\"\\"
$.__$ + // "1"
$.__$ + // "1"
$.__$ + // "1"
"\\" + // "\\"
$.$__ + // "4"
$.___ + // "0"
(![] + "")[$._$_] + // "l"
$._$ + // "o"
"\\" + // "\\"
$.__$ + // "1"
$.$$_ + // "6"
$.$$_ + // "6"
$.$$$_ + // "e"
"\\" + // "\\"
$.$__ + // "4"
$.___ + // "0"
"\\" + // "\\"
$.__$ + // "1"
$.$$$ + // "7"
$.__$ + // "1"
$._$ + // "o"
$._ + // "u"
".\\\"\\" + // ".\\\"\\""
$.$__ + // "4"
$.___ + // "0"
")" + // ")"
"\"" // "\""
)() // )()
)(); // )();
/*
* Function(
* Function(
* "return\"ale\\162t(\\\"\\111\\40lo\\166e\\40\\171ou.\\\"\\40)\""
* )()
* )();
*/
您也可以从这里阅读:https://gist.github.com/mutoo/9003010
答案 1 :(得分:2)
实际解码非常简单。只需打开调试器并评估每个语句(按顺序)。要查找语句,请查找;
。然后它将为您提供表达式的结果,并帮助您了解它们如何相互影响,然后您可以单独分析每个表达式,看看它们是如何构建的。
表达式#1
$= ~[]; // -1
表达式#2
$={___:
++$,$$$$: (![]+"")[$],
__$:++$,$_$_:(![]+"")
[$],_$_:++$,$_$$:
({} + "")[$],
$$_$
:
($[$]+"") [$],_$$:
++$,$$$_:(!""+"")[$],$__:
++$,$_$:++$,$$__:({}+"")
[$],$$_: ++$,$$$:++$,
$___:++$,$__$:++$
};
在这里,我们看到一些字母开始弹出,让我们看看怎么样?首先,让我们看一下引用$$$$
的{{1}}属性。
'f'
在上面的代码中,我们知道$={___:++$, $$$$: (![]+"")[$],
最初是$
,现在我们看到-1
,这意味着++$
现在是$
,然后我们看一下在0
定义(![]+"")[$]
属性的值。
$$$$
现在让我们执行下一个属性(![]+"") //evaluates to 'false'
'false'[$] //which we can translate to...
'false'[0]; //f
,其中包含值$_$_
。
'a'
我们可以再次看到__$:++$, $_$_:(![]+"")[$]
按++$
递增$
,因此我们现在处于1
,那么它与字母1
的表达式相同,但我们在索引f
所以:
1
您可以使用相同的方法找出其余代码,祝您好运!
答案 2 :(得分:1)
这是一个很酷的谜题。当你分解它时并没有那么糟糕,但它确实依赖于很多JavaScript的怪癖。我做了几行来说明变量是如何设置为整数和字符的。如果有人想完成这个,我很乐意把它变成一个社区维基。
$ = ~ []; // $ = -1
$ = {
___: ++$, // ___ = 0, $ = 0
$$$$: (![] + "")[$], // $$$$ = "f";
__$: ++$, // __$ = 1, $ = 1
$_$_: (![] + "")[$], // $_$_ = "a"
_$_: ++$, // _$_ = 2, $ = 2
$_$$: ({} + "")[$], // $_$$ = "b"
$$_$: ($[$] + "")[$], // $$_$ = "d"
_$$: ++$, // _$$ = 3, $ = 3
$$$_: (!"" + "")[$],
$__: ++$,
$_$: ++$,
$$__: ({} + "")[$],
$$_: ++$,
$$$: ++$,
$___: ++$,
$__$: ++$
};
$.$_ = ($.$_ =
$ + "")[$.$_$] + ($._$ =$.$_[$.__$]) +
($.$$ = ($.$ + "")[$.__$]) + ((!$) + "")[$._$$] +
($.__ = $.$_[$.$$_]) +
($.$ = (!"" + "")[$.__$]) +
($._ = (!"" + "")[$._$_]) + $.$_[$.$_$] +
$.__ + $._$ + $.$;
$.$$ = $.$ + (!"" + "")[$._$$] + $.__ + $._ + $.$ + $.$$;
$.$ = ($.___)[$.$_][$.$_];
$.$($.$($.$$ + "\"" + $.$_$_ + (![] + "")[$._$_] + $.$$$_ +
"\\" +
$.__$ + $.$$_ +
$._$_ + $.__ + "(\\\"\\" +
$.__$ + $.__$ + $.__$ + "\\" +
$.$__ + $.___ + (![] + "")[$._$_] +
$._$ + "\\" + $.__$ + $.$$_ + $.$$_ +
$.$$$_ + "\\" + $.$__ + $.___ +
"\\" + $.__$ + $.$$$ + $.__$ +
$._$ + $._ + ".\\\"\\" +
$.$__ + $.___ +
")" + "\"")
())();