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'.因此,如果我们有window和Object,然后我想我们可以这样做:
(window["Object"]+0)[29];
Run Code Online (Sandbox Code Playgroud)
相同的消息,但拼写不同.
// "I <3 u"
_= +~[]; // 1
__= -[]; // 0
___= +(-~[] -~[] -~[]); // 3
$=''
+(''+(_/__))[__] // i
+' ' // space
+'<'+___ // <3
+' ' // space
+(''+(_<__))[+(-~[] -~[])]; // u
alert($);
Run Code Online (Sandbox Code Playgroud)