JavaScript 非字母数字代码
admin
2024-04-24 21:21:11
0

JavaScript是一种松散类型的语言,它可以:

  • 类似于 true+true == 2 可以不使用数字字面量来获取数字。
  • + 符号 可以将对象类型转为字符串类型
  • ''+{} == '[object Object]'
  • 可以不用字符字面量来获取字符,例子:[object Object][1] == 'o'
  • 'abc'[0] == 'a'

以上,我们完全可以不使用数字和字母字面量来写一些js代码!

获取数字

获取数字 0 比较简单,+[] 即为 0
为了获取数字 1 就需要使用 !+!![] == 1+!+[] 等都为 1

要获取除 0 1 之外的数字,只需要使用加法即可。2 = 1 + 1废话) 即:+!+[]+!+[]

获取字母

如果要是获取字母该如何?

其实有个技巧,我们可以利用js的特点,在某些情况下js或默认调用 toString()valueOf() 函数,我们可以利用其获取字母。

例如,可以利用数组下标越界来获取类型 undefined ,然后将其隐式转换为字符串 'undefined' ,这样的话,我们就可以获取到 u n d e f 等字母!

看下面例子:

// 获取 'f'
console.log([[][+!+[]]+[]][+[]][+!+[]+!+[]+!+[]+!+[]]) // 'f' 

解析:

  • 首先,设置一个空数组: []
  • 接着读取其第一个位置: [][+!+[]] ,因为为空,所以会返回 undefined
  • 当对象类型+上一个'' 时会将其转换为字符串:[][+!+[]]+[],得到字符串 'undefined'
  • 这里我们为了避免使用括号,而是使用中括号将其包围成一个数组,然后 [+[]] 读取第0个位置,即 undefined;方面后续取下标
  • 为了得到字符 f ,需要读取字符串下标为 4 的位置:[[][+!+[]]+[]][+[]][+!+[]+!+[]+!+[]+!+[]]

这里我们只使用三种符号 [] + ! 即可表示字符 f,amazing!

非字母数字代码

有了以上的铺垫,现在我们可以做一些不可思议的事情:

例如,调用 slice() 函数

let _slice = [][[![]+[]][+[]][!+[]+!+[]+!+[]]+[![]+[]][+[]][!+[]+!+[]]+[[][+!+[]]+[]][+[]][+!+[]+!+[]+!+[]+!+[]+!+[]]+ [[[]+[]][+[]]+{}][+[]][+!+[]+!+[]+!+[]+!+[]+!+[]]+[![]+[]][+[]][!+[]+!+[]+!+[]+!+[]]] // ƒ slice() { [native code] }// 测试
let arr = [1,2,3,4];
console.log(_slice.call(arr, 2)) // [ 3, 4 ]

访问Function构造函数:

[][[[][[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]]]+[]][+[]][!+[]+!+[]+!+[]]+[[]+{}][+[]][+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+[![]+[]][+[]][!+[]+!+[]+!+[]]+[!![]+[]][+[]][+[]]+[!![]+[]][+[]][+!+[]]+[[][[]]+[]][+[]][+[]]+[[][[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]]]+[]][+[]][!+[]+!+[]+!+[]]+[!![]+[]][+[]][+[]]+[[]+{}][+[]][+!+[]]+[!![]+[]][+[]][+!+[]]][[[][[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]]]+[]][+[]][!+[]+!+[]+!+[]]+[[]+{}][+[]][+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+[![]+[]][+[]][!+[]+!+[]+!+[]]+[!![]+[]][+[]][+[]]+[!![]+[]][+[]][+!+[]]+[[][[]]+[]][+[]][+[]]+[[][[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]]]+[]][+[]][!+[]+!+[]+!+[]]+[!![]+[]][+[]][+[]]+[[]+{}][+[]][+!+[]]+[!![]+[]][+[]][+!+[]]]
// ƒ Function() { [native code] }

参考文献

  • Executing non-alphanumeric JavaScript without parenthesis
  • Array - JavaScript | MDN

相关内容

热门资讯

美军称对伊朗发动新一轮打击 美军中央司令部7月16日在社交媒体发布消息说,美国东部时间16日14时,美军对伊朗“连续第6晚”发动...
美军连续第五晚空袭伊朗、霍尔木... 美伊冲突进入持续升级阶段,但军事施压与外交接触仍在同步进行。 当地时间7月16日周四,美军连续第五晚...
伊朗方面否认有美籍人员从该国监... 当地时间16日,伊朗方面驳斥美国总统特朗普有关美籍囚犯获释的说法。 伊朗方面称,经核查,目前没有符合...
美军“连续第6晚”对伊朗发动打... 新华社 美军中央司令部16日在社交媒体发布消息说,美国东部时间16日14时,美军对伊朗“连续第6晚”...
罗梅罗深情挽留队长:若我们夺冠... 北京时间7月17日,据阿根廷媒体《TYC》报道,在2-1击败英格兰晋级决赛后,罗梅罗直言挽留梅西,希...
黎海川:藤井公开信背后,是日本... 日前,《日本经济新闻》编辑委员会执行主席藤井彰夫再次向美国总统发出公开信。去年4月,当美国挥舞“对等...
马克龙:将对枫丹白露森林火灾责... 法国总统马克龙16日前往巴黎附近的枫丹白露森林火灾现场视察,马克龙表示,将对造成火灾的责任人依法追责...
欧盟要求谷歌开放安卓AI功能并... 新华社布鲁塞尔7月16日电(记者张馨文)欧盟委员会16日宣布,依据《数字市场法案》向美国谷歌公司出台...
巴西正酝酿对美反制措施,“可能... 据路透社7月17日消息,三名知情人士表示,当地时间16日,巴西政府在总统府召集高级部长和工作人员,准...
英媒:事关财政大臣任命,伯纳姆... 【环球时报特约记者 王逸】据英国广播公司16日报道,英国下院工党议员、前大曼彻斯特市市长安迪·伯纳姆...