如何在JavaScript中没有字符或数字说"爱"?

ccp*_*ava 39 javascript obfuscation

灵感来自Ryan Barnett的BlackHat DC 2011 PPT,特别是下面的代码:

($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+ ($$=($_=!''+$)[_/_]+$_[+$])])()[__[_/_]+__ [_+~$]+$_[_]+$$](_/_)
Run Code Online (Sandbox Code Playgroud)

昨天是恋人的特殊日子,所以我试着写类似的东西.这基本上警告"我爱你"没有任何字符或数字.

例如,"I"可以从中获得 ((_=-~[])/--_+[])[_]

我们有"[object Object]","true","false","NaN","Infinity"使用,我无法弄清楚这种方式得到"v".

我试着想一想String.fromCharCode(),(Ryan已经window为我们提供了参考,所以理论上我们可以window["String"]["fromCharCode"](118))但是我想念这里的"S"和"C"字符.window["eval"](...)再想想,我没有"v".

只是尝试解释一下,[]是空的,当应用+/-/~操作时,它转换为数字0,并~[]给出1,1/0给出Infinitey.然后说到1/0 + [],他们都将转换成字符串为补充,这给"Infinity""Infinity"[_] == "Infinity"[0] == "I"...

Ryan的原始代码更复杂,它使用了更多,包括范围,特殊返回值等(这是另一个故事)

这似乎不是一件好事,但只是非常有趣.

在Meze的帮助下,我能够为Firefox生成这个:

($=($=[$=[]][(__=!$+$)[_=-~-~-~$]+(_$={}+$)[_/_]+ ($$=($_=!''+$)[_/_]+$_[+$])])())[__[_/_]+__ [_+~$]+$_[_]+$$]((_$_=(__$=-~[])/--__$+[])[__$]+_$[_+++_]+__[__$=-~-~[]]+_$[-~[]]+($[_$[$__=_+_]+_$[++$__]+_$[++$__]+_$[++$__]+_$[++$__]+_$[++$__]]+[])[
$__+$__+--_]+__[++_]+_$[$__=_+--_]+_$_[_+++_]+_$[_/_]+$_[__$]);
Run Code Online (Sandbox Code Playgroud)

它基本上是alert("I love you"),非常感谢!如果我昨天得到了帮助,我还没有发布这个:(

JavaScript很漂亮,有些可供参考:

$_ = "true"
__ = "false"
_$ = "[object Object]"
$$ = "rt"
_$_ = "Infinity"
_ = 3 = 4 = 3 = 4 = 3
$  = window
$__ = 8  = 13
__$  = 0 = 2
Run Code Online (Sandbox Code Playgroud)

有些变量被重复使用很多次,不会试图留下细节,这不是一个有趣的工作:)我很高兴,我们终于来了!这实际上有很多潜力,因为我们现在有"v",而且有很多数字,理论上我们可以eval()更容易地做很多事情.我会告诉我的妻子,希望她喜欢_ $ - +()......

示例作为参考:http: //jsfiddle.net/Y4wqw/

顺便说一句,我们可以稍微缩短代码,因为我们已经参考了sort(),可以用它代替window ["Object"]来获取"native code"=>"v",这里是:

($=($_$=($=[$=[]][(__=!$+$)[_=-~-~-~$]+(_$={}+$)[_/_]+ ($$=($_=!''+$)[_/_]+$_[+$])]))())[__[_/_]+__ [_+~$]+$_[_]+$$]((_$_=(__$=-~[])/--__$+[])[__$]+_$[_+++_]+__[__$=-~-~[]]+_$[-~[]]+($_$+[])[(__$<<__$<<__$)-_+~[]]+$_[--_]+_$[$__=_+++_]+_$_[_+--_]+_$[_/_]+$_[__$]);
Run Code Online (Sandbox Code Playgroud)

同样,它仅适用于Firefox,可能不会尝试迁移到其他浏览器.我喜欢Firefox.

mez*_*eze 13

至少在Firefox中,JavaScript本机对象返回function Object() { [native code] },其中有'v'.因此,如果我们有windowObject,然后我想我们可以这样做:

(window["Object"]+0)[29];
Run Code Online (Sandbox Code Playgroud)

  • @Daniel ......已经证明数字很容易产生,字符串'Object'也是如此. (2认同)

eri*_*ckb 6

相同的消息,但拼写不同.

// "I <3 u"
_= +~[]; // 1
__= -[]; // 0
___= +(-~[] -~[] -~[]); // 3
$=''
+(''+(_/__))[__] // i
+' ' // space
+'<'+___ // <3
+' ' // space
+(''+(_<__))[+(-~[] -~[])]; // u
alert($); 
Run Code Online (Sandbox Code Playgroud)

jsfiddle链接


pow*_*tac 6

alert("\u2665"); // results in ?
Run Code Online (Sandbox Code Playgroud)