将JSF ** k转换为普通JS


12

你们中的许多人已经知道JSF ** k。对于那些不喜欢的人来说,这是一个脚本,基本上可以将任何JavaScript代码变成只使用编写的代码[]()!+

您的任务是使用您选择的任何语言来构建一个程序,该程序将JSF ** k转换为不混淆的JavaScript。

  • 输入:具有有效JSF ** k代码的字符串。
  • 输出:具有常规JavaScript代码的字符串,该字符串先前已被JSF ** ked以生成输入。

对于此挑战,请考虑仅对JSF ** ked输入字符串一次。

这是一场竞赛,因此以字节为单位的最短代码获胜。


@Michael,但是编码是否可以明确还原?我不这么认为...如何确定某个[...]数组访问是原始代码的一部分还是混淆的一部分?所有其他构造都一样。
马丁·恩德2014年

2
@JanDvorak哦,什么……太适得其反了……我们可以帮助他解决这个问题赞成而不是反对。
马丁·恩德2014年

2
@ m.buettner我投票不足,因为我认为问题无处不在。我绝对不想仅仅为了释放某人的某些特权而赞美帖子。
约翰·德沃夏克

2
@JanDvorak我认为我们不应该劝阻想要编写好的挑战并听取批评的新用户。由于沙箱在元,并会呆在那里,downvoting是适得其反。关闭就足够了。我认为,一次投票不会伤害任何人,并且不会给用户提供实际找到该社区条目的机会。但是有人同意您的意见,并决定也拒绝投票,因为老兄,为什么要允许新用户在沙箱中发布(我想)……现在他仍然无法在此发布。我认为这不是我们发展这个社区的方式。
马丁·恩德

1
能否请您解释一下普通JavaScript的含义?如何进行逆转换可能并不明显。例如,如果我在某个不错的输入上两次迭代遮盖程序,则建议的输出是什么?原始程序或已被混淆的输入?
霍华德

Answers:


12

Javascript- 68 55 51

alert(/\n(.+)/.exec(eval(prompt().slice(0,-2)))[1])

或者:(相同长度)

alert(/.+(?=\n})/.exec(eval(prompt().slice(0,-2))))

在浏览器的控制台中运行。仅保证与jsfuck.com生成的代码一起使用,并勾选“ Eval Source”选项。

取消高尔夫:

alert(
    /\n(.+)/.exec(                 // regex to extract code from inside outer function braces {}
        eval(prompt().slice(0,-2)) // remove the final set of parens () and evaluate the code
                                   // this results in a function, which will be converted to a string as 'exec' expects a string
    )[1]                           // get the first capture group
)

在我拒绝的建议编辑中,@ user3082537建议使用正则表达式而不是切片,例如replace(/^.*\n|\n}$/g,'')
user12205 2014年

7

JavaScript,122,可用于任何输入

s=prompt().slice(0,-2)
i=s.length
while(i--){if((l=s.slice(i)).split(')').length==l.split('(').length)break}alert(eval(l))

很简单;它只是返回字符串,直到括号(())平衡为止。JSF输出的最后三个字符始终是 )(),因此切出最后两个paren,然后找到另一个的匹配parane总是可以的。(它也可以用于输入[]。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.