乌托邦网站建设,物联网技术应用,wordpress 内容采集,找工作的平台JavaScript奇技淫巧#xff1a;Eval的未公开用法 作者#xff1a;http://JShaman.com w2sft#xff0c;转载请保留此信息很多人都知道#xff0c;Eval是用来执行JS代码的#xff0c;可以执行运算、可以输出结果。
但它还有一种未公开的用途#xff0c;想必很少有人用过。…JavaScript奇技淫巧Eval的未公开用法
作者http://JShaman.com w2sft转载请保留此信息很多人都知道Eval是用来执行JS代码的可以执行运算、可以输出结果。
但它还有一种未公开的用途想必很少有人用过。
例
var a eval([g, o, l, ., e, l, o, s, n, o, c].reverse().join()); var b [m, o, c, ., n, a, m, a, h, s, j].reverse().join(); a(b);这段JS代码如果单看语法是否能知道a(b)调用会输出什么答案是很难想到的它的输出如下 能有这样的输出依靠的便是eval的未公开用法可以将字符串转为语法关键字。
上面的eval语句简化后等于
eval(console.log)用reverse、join是为了隐藏console.log明文。
这个方法用于JS代码加密效果很不错。
因为对JS代码混淆加密时语法关键字是很难隐藏的就如console.log一般情况下可能变化为console[“log”]或者console[“\x6c\x6f\x67”]log字符可以变化但console作为语法关键字是不可变的这就容易被识别。
而eval的这种未公开用法恰好可以解决这一问题。可以隐藏很多语法关键字。