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

相关内容

热门资讯

卖一辆车只赚几百块,上汽的利润... 净利润增长506%,听起来很爽。然后上汽的股价连跌了三天。市场在用行动告诉你:这506%,不全是真的...
探讨有实力的公司法律律师,电话... 在当今竞争激烈且法律环境日益复杂的商业世界里,公司面临着各种各样的法律问题,无论是股权架构设计、合同...
美国封锁伊朗海上交通有何后果 ... 美方称13日10时开始对所有进出伊朗港口的海上交通实施封锁。那么,美国有能力封锁伊朗海上交通吗?美国...
教皇被特朗普“侮辱”,伊朗总统... 据美国有线电视新闻网(CNN)报道,针对美国总统特朗普批评罗马教皇利奥十四世一事,伊朗总统佩泽希齐扬...
受网络攻击影响,比利时布鲁塞尔... 9月23日消息,比利时布鲁塞尔机场9月23日表示,预计24日将取消约10%的航班。布鲁塞尔机场提醒旅...
福建万辰生物科技集团股份有限公... 9月23日消息,福建万辰生物科技集团股份有限公司向港交所提交上市申请书,联席保荐人为中金公司、招商证...
江苏国泰:实际控制人将变更为张... 9月23日消息,江苏国泰公告称,本次无偿划转系江苏省张家港市人民政府拟将持有的国际贸易100%股权无...
ST炼石:股票交易将被实施退市... 9月23日消息,ST炼石公告称,公司收到四川省成都市中级人民法院裁定受理公司的重整申请,并指定北京金...
特朗普称已开始封锁伊朗 据CCTV国际时讯,美国总统特朗普当地时间4月13日中午在白宫回答记者提问时确认,美军对伊朗的“封锁...
三岁萌娃街头走失,深圳守护接力... 4月12日下午,深圳市宝安区松岗街道沙浦志愿服务U站上演了一场温馨的“爱心接力”。一名脱离家长看管的...