这是这个问题的延续,更困难的情况。假设我想用 2 个参数调用字符串函数,例如
console.log(
"truefalse".replace("true",1)
)
在第一步中,我将字符集减少为jsfuck约定,其中我们有 6 个可用字符:[]()!+
并且 az 字母和数字被"
字符包围 - JS 字符串(很容易转换为这 6 个字符):
console.log(
"truefalse"["replace"]("true","1")
)
这里的问题是逗号(禁止字符),但我们可以通过使用trincot发现的以下巧妙技术来克服这个问题:
console.log(
["true"]["concat"]("1")["reduce"](""["replace"]["bind"]("truefalse"))
)
但新的问题出现了:
可以调用具有 2 个(或更多)参数的函数序列而不嵌套它们(这是由上述技术强加的),但是以“流动”方式,我们在右侧调用下一个函数,例如"truefalse".replace("true",1).replace("false",0)..
:(不使用 'eval' 之类的将字符串解释为代码的解决方案)?(对于具有一个参数的函数,例如"truefalse"["replace"]("true")["replace"]("false")
:)