Programming languages 仅由括号、加号和感叹号组成的语言
我的一位同事给我发了一段代码,只由括号()[]{}加上符号和感叹号组成Programming languages 仅由括号、加号和感叹号组成的语言,programming-languages,Programming Languages,我的一位同事给我发了一段代码,只由括号()[]{}加上符号和感叹号组成 [][(![]+[])[!+[]+!![]+!![]]+([]+{})[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]] 事情是这样的 这隐约让我想起了,但我找不到任何像这样写的深奥的语言 你能帮我理解它是什么语言吗?这个链接很好地解释了这种javascript代码的工作原理: 下面是一个简短的总结: 这项工作的主要技巧是类型转换: []是一个空数组 +[]==0将此空数组强制转换为一个数
[][(![]+[])[!+[]+!![]+!![]]+([]+{})[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]]
事情是这样的
这隐约让我想起了,但我找不到任何像这样写的深奥的语言
你能帮我理解它是什么语言吗?这个链接很好地解释了这种javascript代码的工作原理: 下面是一个简短的总结:
这项工作的主要技巧是类型转换:
[]
是一个空数组+[]==0
将此空数组强制转换为一个数字,即零+[]==true
然后将零强制转换为false,并将其求反为true+[]+!+[]==2
基本上是添加true+true。因此,trues被强制转换为1,然后被添加。这样你可以得到任意的数字
但数字不足以编程,对吗?[]+{}==“[对象对象]”
我们可以通过向任意对象(例如空数组([]
)添加空对象({}
)来获取字符串。([]+{})[+!+[]]==“o”
然后我们可以通过对该字符串进行数组访问来获取该字符串的第二个字符(“abc”[1]==“b”
)
但我们仍然限制在该字符串中的10个字符。我们可以通过将其他内容转换为字符串来扩展它,如:“undefined”==[][+[]]+[]
(访问数组的未定义索引),“NaN”==+{}+[]
(将对象强制转换为数字),“true”===!![]+[]
,“false”==![]+[]
那么您仍然没有任意字符,但是从这里有几种方法可以获得它们。例如,如果您针对的是浏览器,则可以使用btoa
函数(btoa
将字符串作为输入并返回其base64编码版本)来获取任意ASCII字符
最后一步是执行生成的字符串:
[][“排序”][“构造函数”](“我们的代码”)()
我们首先得到排序函数,它是每个数组的一个属性。然后我们访问排序函数的构造函数,即
函数
函数。它可以用来构造任意匿名函数,并将带有代码的字符串作为输入。最后,我们用()调用新创建的函数,称为JSFuck。看看下面的链接
JSFuck编码器:
解码JSFuck:
在JavaScript控制台上运行它。这个问题似乎离题了,因为它几乎不是一个与编程问题相关的建设性问题。@deceze如果这离题了,我愿意重新措辞、移动或删除这个问题。我之所以在这里发帖,是因为我无法通过谷歌找到答案,我想这可能会发生在其他人身上。谢谢,@remyabel和gordon链接的重复可能是暂时的。你能将你的答案粘贴到这一部分吗