Javascript JSFuck:调用具有2个(或更多)参数的函数序列,无嵌套

Javascript JSFuck:调用具有2个(或更多)参数的函数序列,无嵌套,javascript,jsfuck,Javascript,Jsfuck,这是对更难的情况的继续。假设我想用两个参数调用string函数,例如 console.log( “真假”。替换(“真”,1) )是的,这是可能的 因此,我们从省略逗号的表达式开始,它只包含字符串文本和JSF字符: ["true"]["concat"]("1")["reduce"](""["replace"]["bind"]("truefalse&

这是对更难的情况的继续。假设我想用两个参数调用string函数,例如

console.log(
“真假”。替换(“真”,1)
)
是的,这是可能的

因此,我们从省略逗号的表达式开始,它只包含字符串文本和JSF字符:

["true"]["concat"]("1")["reduce"](""["replace"]["bind"]("truefalse"))
现在,我将使用可读性更高的点表示法来表达这个表达式,并返回到数组文本的逗号分隔符:

["true", "1"].reduce("".replace.bind("truefalse"))
这有替换的输入,即“truefalse”,位于末尾。另一方面,参数位于左侧,即“真”和“1”。我们可以试着把“真假”也变成一个论点,这样我们就可以把它移到左边

为此,我们可以使用
“”.replace.apply
而不是
“”。replace
作为
reduce
的回调。
apply
的第一个参数是
replace
调用的
this
-绑定。第二个参数应该是传递给
replace
的参数数组,因此这就是我们目前在左侧的数组

然后,
apply
方法本身也应该得到一个
this
-绑定。我们得到这个表达式:

console.log(
[“truefalse”,“true”,“1”].reduce(“.replace.apply.bind(“.replace))

);
Uh,
reduce
在这里是一个相当奇怪的用法(严格地说是错误的,因为它使用调用函数)。为什么不直接打电话?@Bergi你能发展你的概念吗(例如,作为源代码问题的答案)?答案似乎太琐碎了…字母集aply
aply
,没有问题吗?@Bergi你可以使用字符串
“apply”
(允许字符串中的a-z字母和数字)@Taplar为什么我们要删除它?这就是语言子集的名称。哇-这真是令人印象深刻-我认为这是不可能的(!!!)。但是,正则表达式部分仍然存在一个问题:
“truefalse”[“replace”](/e/g,“e”)
-有人建议使用
新的Regexp…
,但实际上我意识到这可能需要
eval
来运行。。。如果您认为它是好的,我可以从该问题中删除regexp部分并创建新问题…一次只问一个问题确实更好。如果你问一个新问题,我会不眠不休地思考;-)这可能也是你感兴趣的地方