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

相关内容

热门资讯

苏州资产管理有限公司与徐家寅债... 根据苏州资产管理有限公司(以下简称转让方)与徐家寅(以下简称受让方)签署的《债权转让协议》,转让方将...
一中国籍男子在大阪被抢劫,两名... 据日本电视台报道,日本警方3月17日通报,针对中国籍男子日前在大阪遭抢劫事件,已逮捕涉案的两名日本青...
伊朗军方发言人嘲讽特朗普:“‘... 3月16日,伊朗哈塔姆·安比亚中央司令部发言人用英文喊话特朗普称,战争不是靠推文取胜,而是在战场上,...
内塔尼亚胡露面了?发视频证明自... 近期,以色列总理内塔尼亚胡的动态引发了广泛的关注与讨论。随着有关他“意外去世”的谣言迅速传播,众多人...
鲁比奥呼吁韩国护航 参考消息网3月17日报道据路透社3月17日报道,美国国务卿马尔科·鲁比奥16日与韩国外交部长官赵显通...
油价大反转 3月16日晚间,市场的情绪再一次被扭转。国际油价出现大幅反转行情,由大涨转为直线跳水。 布伦特原油期...
吉电股份更名“电投绿能” 构建... 来源:中国经济新闻网 图片来源:新华社 ■金国华 ■中国经济时报记者 王有军 日前,在国电投绿色能...
墨香留韵,情系嘉大——图书馆、... 捐赠倡议书 点此亲启 亲爱的嘉兴大学离退休教师: 岁月缱绻,如诗如画。在嘉兴大学波澜壮阔的发展历程中...
网络平台不应成文物倒卖的“暗门... 近日,“商家在二手平台倒卖国保文物”事件备受关注。有群众举报称,有商家在“闲鱼”平台售卖疑似重要文物...
杨玉鑫:海湾国家成冲突前线,“... 【文/观察者专栏作者 杨玉鑫】 自2月28日美国、以色列在谈判过程中袭击伊朗以来,战火迅速向周边国...