众所周知,作弊表是我们找到完成任务的最短途径 通过使用charsets。我无法理解它是如何被执行的。任何人都可以澄清吗?
"NaNundefined"[10] ="e"
或([+[][[]]]+[][[]])[++[[]][+[]]+[+[]]] = "e"
的方式?
答案 0 :(得分:6)
"NaNundefined"[10] ="e"
很简单 - e
是字符串中的第11个字符。
([+[][[]]]+[][[]])[++[[]][+[]]+[+[]]] = "e"
有点困难,但您可以轻松地将其拆分:
[+[][[]]] -> [ NaN ]
[][[]] -> undefined
[ NaN ] + undefined -> "NaNundefined"
++[[]][+[]] -> 1
[+[]] -> "0"
1 + "0" -> "10"
"NaNundefined"["10"] -> "e"
第二个版本实际上是一种使用javascript运算符的弱类型构造第一个(ab)的方法(例如,[NaN] + "" -> "NaN"
)。它还使用了javascript中的数组始终用字符串索引的事实(因此array[10]
等同于array["10"]
)。
如果您想阻止某人理解代码,则可以将第二个版本视为混淆。然而,它至少在日常编码生活中并没有真正发挥作用。
答案 1 :(得分:0)
索引10处的字符是e:
"NaNundefin
e d"[10] ="e"