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

相关内容

热门资讯

5起高收入自然人偷逃税案件集中... 记者6月5日从国家税务总局获悉, 江苏、福建、甘肃、重庆、大连等地税务部门当日曝光一批共5起高收入自...
央视曝光:化工废料翻新成一次性... 近日,《财经调查》栏目接到消费者和业内人士的举报,市场上有一些牙刷生产企业,涉嫌违规使用各类废旧、回...
中国驻沙特大使馆:提醒在沙特中... 近日,中东地区安全形势快速演变,为确保在沙中国公民和机构的人身财产安全,中国驻沙特使馆就有关事项提醒...
国足备战遇伤病困扰!蒋光太缺席... 在国足的备战过程中,伤病问题总是令人头疼不已。最近,国足在集训时就遭遇了这样的困扰——后防主力蒋光太...
共话处理离婚房产纠纷的律师,价... 在婚姻关系中,房产往往是价值较高且牵扯复杂的财产组成部分,离婚时的房产纠纷也因此成为不少当事人头疼的...
视频︱《以法护绿》:遂宁六五环... 2026年3月12日,十四届全国人大四次会议议表决通过《中华人民共和国生态环境法典》,并于8月15日...
【伊朗拒绝接受将其资产用于向美... 【伊朗拒绝接受将其资产用于向美国盟友支付战争赔偿的设想】伊朗外交部副部长加里巴巴迪(Kazem Gh...
特朗普对伊朗喊话:行了,回来谈... 新华社华盛顿6月7日电(记者徐剑梅 颜亮)美国总统特朗普7日接受美媒采访时称, 伊朗当天稍早时向以色...
女排残阵秀新亮点:庄宇珊成攻防... 世联常规赛南京站经过5日的角逐落下帷幕,虽然赵勇挂帅中国女排由于李盈莹和吴梦洁伤停,并且龚翔宇和王媛...
靠谱的专业离婚律师排名情况大揭... 靠谱的专业离婚律师排名情况大揭秘,收费标准是多少? 在婚姻关系走到尽头时,不少当事人都会陷入两难:一...