- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这段代码等同于alert(1)
,但它是如何工作的呢?我在这里没有看到 eval
。
/ㅤ/-[ㅤ=''],ᅠ=!ㅤ+ㅤ,ㅤㅤ=!ᅠ+ㅤ,ㅤᅠ=ㅤ+{},ᅠㅤ=ᅠ[ㅤ++],ᅠᅠ=ᅠ[ᅠㅤㅤ=ㅤ
],ᅠㅤᅠ=++ᅠㅤㅤ+ㅤ,ㅤㅤㅤ=ㅤᅠ[ᅠㅤㅤ+ᅠㅤᅠ],ᅠ[ㅤㅤㅤ+=ㅤᅠ[ㅤ]+(ᅠ.ㅤㅤ+ㅤᅠ)[ㅤ]+ㅤㅤ[ᅠㅤᅠ]+ᅠㅤ+ᅠᅠ+ᅠ
[ᅠㅤㅤ]+ㅤㅤㅤ+ᅠㅤ+ㅤᅠ[ㅤ]+ᅠᅠ][ㅤㅤㅤ](ㅤㅤ[ㅤ]+ㅤㅤ[ᅠㅤㅤ]+ᅠ[ᅠㅤᅠ]+ᅠᅠ+ᅠㅤ+"(ㅤ)")()
最佳答案
这是 JSFuck ,一种深奥的编程语言,实际上是有效的 JavaScript,因此您不需要任何特殊的解释器/编译器来运行它。
最流行的只涉及使用 6 个字符 ([]()!+
),但你的有点不同,因为它也使用 /
,=
, "
, '
, ,
, {
, }
code> 和 (空白)。
它通过利用 JavaScript 的一些不错的特性来工作。
例如,我们知道 []
是一个真值,因此 ![]
会产生 false
。
使用相同的逻辑,我们可以通过执行 !![]
获得 true
。
数字也可以实现。我们知道 false
等于 0
,所以下面的表达式是有道理的:0 + false == 0
,对吧?确实如此。我们知道false
可以写成![]
,我们知道我们可以省略表达式左边的0
: +![] == 0
。
同样可以用 true
和 1
表示:+!![]
数字2
可以通过将两个1
相加得到:(+!![])+(+!![])
,等等。
有了这些逻辑,您几乎可以做任何事情。
例如,获取字母 "a"
的一种流行方法是生成 NaN
结果,将其转换为字符串 ("NaN"
),然后得到索引1
处的字母,即"a"
。
好吧..我们知道我们可以获得 "alert(1)"
,但是我们如何执行它呢?
我们不能使用 eval
,因为那样需要使用 JSFuck 不允许的字符。
嗯,大多数人的做法是这样的:
Array.prototype
的一个众所周知的函数,比方说indexOf
所以,总结一下:
// You can try this on your browser!
[]["indexOf"]["constructor"]("alert(1)")()
我们知道我们可以在 JSFuck 上生成字母字符,我们也知道我们可以生成数字,所以上面那行代码实际上是很有可能的。
关于javascript - 这么深奥的JS代码怎么解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47520309/
我是一名优秀的程序员,十分优秀!