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给打碎了?
【狗头】

JSFuck 可以让你只用 6 个字符 []()! 来编写 JavaScript 程序。例如你想用 JSFuck 来实现 alert(1) 代码如下:[][(![] [])[ [[ []]]] ([][[]] [])[ [[! [] ! [] ! [] ! [] ! []]]] (![] [])[ [[! [] ! []]]] (!![] [])[ [[ []]]] (!![] [])[ [[! [] ! [] ! []]]] (!![] [])[ [[ ! []]]]][([][(![] [])[ [[ []]]] ([][[]] [])[ [[! [] ! [] ! [] ! [] ! []]]] (![] [])[ [[! [] ! []]]] (!![] [])[ [[ []]]] (!![] [])[ [[! [] ! [] ! []]]] (!![] [])[ [[ ! []]]]] [])[ [[! [] ! [] ! []]]] ([][(![] [])[ [[ []]]] ([][[]] [])[ [[! [] ! [] ! [] ! [] ! []]]] (![] [])[ [[! [] ! []]]] (!![] [])[ [[ []]]] (!![] [])[ [[! [] ! [] ! []]]] (!![] [])[ [[ ! []]]]] [])[ [[! [] ! [] ! [] ! [] ! [] ! []]]] ([][[]] [])[ [[ ! []]]] (![] [])[ [[! [] ! [] ! []]]] (!![] [])[ [[ []]]] (!![] [])[ [[ ! []]]] ([][[]] [])[ [[ []]]] ([][(![] [])[ [[ []]]] ([][[]] [])[ [[! [] ! [] ! [] ! [] ! []]]] (![] [])[ [[! [] ! []]]] (!![] [])[ [[ []]]] (!![] [])[ [[! [] ! [] ! []]]] (!![] [])[ [[ ! []]]]] [])[ [[! [] ! [] ! []]]] (!![] [])[ [[ []]]] ([][(![] [])[ [[ []]]] ([][[]] [])[ [[! [] ! [] ! [] ! [] ! []]]] (![] [])[ [[! [] ! []]]] (!![] [])[ [[ []]]] (!![] [])[ [[! [] ! [] ! []]]] (!![] [])[ [[ ! []]]]] [])[ [[! [] ! [] ! [] ! [] ! [] ! []]]] (!![] [])[ [[ ! []]]]]((![] [])[ [[ ! []]]] (![] [])[ [[! [] ! []]]] (!![] [])[ [[! [] ! [] ! []]]] (!![] [])[ [[ ! []]]] (!![] [])[ [[ []]]] ([][(![] [])[ [[ []]]] ([][[]] [])[ [[! [] ! [] ! [] ! [] ! []]]] (![] [])[ [[! [] ! []]]] (!![] [])[ [[ []]]] (!![] [])[ [[! [] ! [] ! []]]] (!![] [])[ [[ ! []]]]] [])[ [[ ! []]] [[! [] ! [] ! [] ! [] ! []]]] [ ! []] ([][(![] [])[ [[ []]]] ([][[]] [])[ [[! [] ! [] ! [] ! [] ! []]]] (![] [])[ [[! [] ! []]]] (!![] [])[ [[ []]]] (!![] [])[ [[! [] ! [] ! []]]] (!![] [])[ [[ ! []]]]] [])[ [[ ! []]] [[! [] ! [] ! [] ! [] ! [] ! []]]])()其他一些基本的表达:false       =>  ![]true        =>  !![]undefined   =>  [][[]]NaN         =>   [![]]0           =>   []1           =>   ! []2           =>  ! [] ! []10          =>  [ ! []] [ []]Array       =>  []Number      =>   []String      =>  [] []Boolean     =>  ![]Function    =>  []["filter"]eval        =>  []["filter"]["constructor"]( CODE )()window      =>  []["filter"]["constructor"]("return this")() 标签:JSFuck
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值