灵感来自Ryan Barnett的BlackHat DC 2011 PPT,特别是下面的代码:
($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+ ($$=($_=!''+$)[_/_]+$_[+$])])()[__[_/_]+__ [_+~$]+$_[_]+$$](_/_)
昨天是恋人的特殊日子,所以我试着写一些类似的东西。这基本上警告“我爱你”没有任何字符或数字。
e.g。 “我”可以从((_=-~[])/--_+[])[_]
我们要使用“[object Object]”,“true”,“false”,“NaN”,“Infinity”,我无法想办法以这种方式获得“v”。
我试着想到String.fromCharCode()
,(Ryan已经为我们提供window
参考,所以从理论上讲,我们可以window["String"]["fromCharCode"](118)
但是我想念“S”和“C”字符这里。再想想window["eval"](...)
,我也没有“v”。
尝试解释一下,[]
为空,当应用+/-/~
操作时,它转换为数字0
,~[]
给出{{1} },1
给出1/0
。然后它来到Infinitey
,它们都将转换为添加的字符串,这将提供1/0 + []
和"Infinity"
...
Ryan的原始代码更复杂,它使用了更多,包括范围,特殊返回值等(这是另一个故事)
这似乎不是一件好事,但是非常有趣。
在meze的帮助下,我能够为Firefox制作这个:
"Infinity"[_] == "Infinity"[0] == "I"
它基本上是($=($=[$=[]][(__=!$+$)[_=-~-~-~$]+(_$={}+$)[_/_]+ ($$=($_=!''+$)[_/_]+$_[+$])])())[__[_/_]+__ [_+~$]+$_[_]+$$]((_$_=(__$=-~[])/--__$+[])[__$]+_$[_+++_]+__[__$=-~-~[]]+_$[-~[]]+($[_$[$__=_+_]+_$[++$__]+_$[++$__]+_$[++$__]+_$[++$__]+_$[++$__]]+[])[
$__+$__+--_]+__[++_]+_$[$__=_+--_]+_$_[_+++_]+_$[_/_]+$_[__$]);
,非常感谢!如果我昨天得到了帮助,我还没有发布这个:(
JavaScript很漂亮,有些可供参考:
alert("I love you")
有些变量多次重复使用,不会试图留下细节,这不是一个有趣的工作:)我很高兴,我们终于来了!这实际上有很多潜力,因为我们现在有“v”,而且有很多数字,理论上我们可以$_ = "true"
__ = "false"
_$ = "[object Object]"
$$ = "rt"
_$_ = "Infinity"
_ = 3 = 4 = 3 = 4 = 3
$ = window
$__ = 8 = 13
__$ = 0 = 2
很多......事情更容易。我会告诉我的妻子,希望她喜欢_ $ - +()......
示例作为参考: http://jsfiddle.net/Y4wqw/
顺便说一下,我们可以稍微缩短代码,因为我们已经引用eval()
,可以用它代替window [“Object”]来获取“本机代码”=> “v”,这是:
sort()
同样,它仅适用于Firefox,可能不会尝试迁移到其他浏览器。我喜欢Firefox。
答案 0 :(得分:13)
至少在Firefox中,JavaScript本机对象返回function Object() { [native code] }
,其中包含'v'。如果我们有window
和Object
,那么我想我们可以这样做:
(window["Object"]+0)[29];
答案 1 :(得分:6)
相同的消息,但拼写不同。
// "I <3 u"
_= +~[]; // 1
__= -[]; // 0
___= +(-~[] -~[] -~[]); // 3
$=''
+(''+(_/__))[__] // i
+' ' // space
+'<'+___ // <3
+' ' // space
+(''+(_<__))[+(-~[] -~[])]; // u
alert($);
答案 2 :(得分:6)
alert("\u2665"); // results in ♥
答案 3 :(得分:4)
试试这段代码:
$=(Å='',[Ç=!(µ=!Å+Å)+{}][Ç[È=++Å-~Å]+Ç[È+È]+µ[Å]+µ[Å-Å]])();
_=$[Ç[È+È+Å]+µ[Å-Å]+Ç[È+È]+Ç[Å]]("¾");
console.info( _[+[]] ); // concole is used just to show result ;)
如果你运行它,在控制台上你会得到“v”:),可以找到更多关于它的信息there
有一种方法可以避免“¾”,但结果将是“V”(对爱这样的词来说实际上没什么不好的):
$=(Å='',[Ç=!(µ=!Å+Å)+{}][Ç[È=++Å-~Å]+Ç[È+È]+µ[Å]+µ[Å-Å]])(); // we get window object
_=$[Ç[È+È+Å]+µ[Å-Å]+Ç[È+È]+Ç[Å]]( $ ); // we use btoa function with argument "[object Window]",
// and it returns "W29iamVjdCBXaW5kb3dd" - as you see there is V
$$=-~!''; // 2
$$$=-~$$; // 3
console.info( _[$$*$$$] ); // "V";
btoa
使用base-64编码从给定字符串创建编码数据。实际上玩这个功能和改变参数你可以得到不同的字符:)