Jsfuck——一个很有意思的Javascript特(附i春秋 broken wp)

简介

WP在后面
jsfuck源于一门编程语言brainfuck,其主要的思想就是只使用8种特定的符号来编写代码。而jsfuck也是沿用了这个思想,它仅仅使用6种符号来编写代码。它们分别是(、)、+、[、]、!。

演示

[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]])()

在这里插入图片描述

把此段代码在控制台输入执行,即弹窗显示1。
我们在console输入

Function("alert(1)")()

效果是一样的。
前面的Function是定义了一个函数,效果是弹窗显示数字1,后面的括号代表执行这个函数。
那么疑惑的地方就是,为什么那么一长串的字符,最后显示的效果和那么短的代码显示是一样的?
这就是Jsfuck!

原理

它使用6个特定字符取到了js中的undefined、true、false、NaN等关键字的字符,并将他们组装成了这个匿名函数。
举个栗子
在控制台输入![]+[] 会显示false
在这里插入图片描述
在这里插入图片描述

+[]的作用是将false转换为字符串格式。

在这里插入图片描述

常见取值

false       =>  ![]
true        =>  !![]
undefined   =>  [][[]]
NaN         =>  +[![]]
0           =>  +[]
1           =>  +!+[]
2           =>  !+[]+!+[]
10          =>  [+!+[]]+[+[]]
Array       =>  []
Number      =>  +[]
String      =>  []+[]
Boolean     =>  ![]
Function    =>  []["filter"]
eval        =>  []["filter"]["constructor"]( CODE )()
window      =>  []["filter"]["constructor"]("return this")()

原文链接:https://www.jianshu.com/p/e7246218f424

为什么要写Jsfuck??因为做题遇到了。
在这里插入图片描述
满屏幕的()[]+!
按上面的操作把他复制下来粘贴到控制台console运行
在这里插入图片描述
无论怎么回车都没有反应,看到了最后两个(),可能是直接执行了所以没有显示,删掉以后还是不行,于是感觉应该是字符方阵有问题,正常()[]都是可以一一对应上的,可以写个脚本检测一下,我就在WP的提示下知道第一个[没有匹配,删了就好了。【狗头】

在这里插入图片描述
第一个没有匹配上。
在这里插入图片描述
额,至于为什么叫broken?莫非是Jsfuck是把Javascript给打碎了?
【狗头】

猜你喜欢

转载自blog.csdn.net/weixin_45253216/article/details/112722890