Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取完整的字母表而不使用字母_Javascript - Fatal编程技术网

Javascript 获取完整的字母表而不使用字母

Javascript 获取完整的字母表而不使用字母,javascript,Javascript,看到下面的代码后,我开始怀疑是否有一种方法可以访问完整的小写字母表而不使用任何字母(下面要应用的条件): 使用下面的各种语句,可以访问以下字母a b c d e f g i j l m n o p r s t v x y: // "true" yeilds: e r t u !0+''; // "false" yeilds: a f l s !1+''; // "[object Object]" yeilds: b c j o t []+{}+''; // "undefined" yeil

看到下面的代码后,我开始怀疑是否有一种方法可以访问完整的小写字母表而不使用任何字母(下面要应用的条件):

使用下面的各种语句,可以访问以下字母
a b c d e f g i j l m n o p r s t v x y

// "true" yeilds: e r t u
!0+'';

// "false" yeilds: a f l s
!1+'';

// "[object Object]" yeilds: b c j o t
[]+{}+'';

// "undefined" yeilds: d i n
[][1]+'';

// "Infinity" yeilds: y
1/0+'';

// Using the above statements "constructor" can be spelled
// It has no value by itself but can be coupled with other statements to get more letters
($=[]+{}+'')[5]+$[1]+(([]+[])[1]+'')[1]+((!1)+'')[3]+($=!0+'')[0]+$[1]+$[2]+($=[]+{}+'')[5]+$[6]+$[1]+((!0)+'')[1];

// "function RegExp() { [native code] }" yeilds: g p v x
(/./)[/*constructor" from above*/]+'';

// "function Number() { [native code] }" yeilds: m
(0)[/*"constructor" from above*/]+'';
在应用以下限制的情况下,访问剩余字符的方法是什么

  • 代码中只能使用非字母字符(符号、数字和标点符号)
  • 代码中使用的所有字符必须归入ASCII的前128个字符
  • 代码不能依赖环境变量,例如节点的global、浏览器的window
  • 在探索所有其他途径之前,应避免使用转义变体、八进制语法等重新编码字母
  • 为您提供“构造函数”,然后您可以将其与字符串文字一起使用,如下所示:

    ('')[([]+{}+'')[5]+([]+{}+'')[1]+(([]+[])[1]+'')[1]+(!1+'')[3]+(!0+'')[0]
    +(!0+'')[1]+(!0+'')[2]+([]+{}+'')[5]+(!0+'')[0]+([]+{}+'')[1]+(!0+'')[1]]+''
    
    它给你函数字符串(){[native code]}它给你v和g

    编辑:您也找到了“构造函数”,如果没有访问全局变量的方法,很难获得更多

    以下是在节点中获取全局变量的方法:

    ('')['constructor']['constructor']('','return global')()
    
    使用上述方法:

    ('')[
        // 'constructor'
        ({}+'')[5] + ({}+'')[1] + (([]+[])[1]+'')[1] + (!1+'')[3] +
        (!0+'')[0] + (!0+'')[1] + (!0+'')[2] + ({}+'')[5] +
        (!0+'')[0] + ({}+'')[1] + (!0+'')[1]
    ][
        // 'constructor'
        ([]+{}+'')[5] + ([]+{}+'')[1] + (([]+[])[1]+'')[1] + (!1+'')[3] +
        (!0+'')[0] + (!0+'')[1] + (!0+'')[2] + ([]+{}+'')[5] +
        (!0+'')[0] + ([]+{}+'')[1] + (!0+'')[1]
    ](
        '',
        // 'return'
        (!0+'')[1] + (!0+'')[3] + (!0+'')[0] + (!0+'')[2] + (!0+'')[1] + (([]+[])[1]+'')[1] +
        ' ' +
        // 'g'
        (('')[
            ([]+{}+'')[5] + ([]+{}+'')[1] + (([]+[])[1]+'')[1] +
            (!1+'')[3] + (!0+'')[0] + (!0+'')[1] + (!0+'')[2] +
            ([]+{}+'')[5] + (!0+'')[0] + ([]+{}+'')[1] + (!0+'')[1]
        ] + '')[14] +
        // 'lobal'
        (!1+'')[2] + ({}+'')[1] + ({}+'')[2] + (!1+'')[1] + (!1+'')[2]
    )()
    
    从那里你可以访问
    global.env
    ,从那里你几乎可以作弊

    编辑:您还可以生成以下内容:

    []['constructor']['constructor'](
        'o',
        "var a=[];for(var x in o){a.append(x)};return a")
    
    这将为您提供一个穷人的
    对象.keys()
    ,您可以使用它访问各种对象方法的名称

    您还可以构建一个eval函数并将其分配给
    $

    $=[]['constructor']['constructor']('s','return eval(s)')
    

    啊哈,明白了。如果允许使用
    unescape
    ,为清晰起见不进行编码:

    []['constructor']['constructor']['call']('','return unescape' + '("%68%71%77%7' + 'a' +'")')()
    
    这给了我们hqwx,当然也可以给我们其他任何东西

    唯一无法到达的位是
    ”(“%68%71%77%7”)
    ,但它满足符号和数字规则。a可以用其他方式构造

    如果我们想避免unescape,我们可以使用
    (828035)['toString'](36)
    ——通过使用
    parseInt('hqwz',36)
    生成“神奇”数字
    828035

    并进行了编码——为了便于阅读,将较大的部分进行了拆分:

    // From your post
    str_constructor = ($=[]+{}+'')[5]+$[1]+(([]+[])[1]+'')[1]+
        ((!1)+'')[3]+($=!0+'')[0]+$[1]+$[2]+($=[]+{}+'')[5]+
        $[6]+$[1]+((!0)+'')[1];
    
    // call
    str_call = ([]+{}+'')[5]+($=!1+'')[1]+$[2]+$[2];
    
    // return unescape ( bonus, not using a literal space character )
    ret_unescape = ($=!0+'')[1]+$[3]+$[0]+$[2]+$[1]+($=''[1]+'')[1]+
        ([]+{}+'')[7]+$[0]+$[1]+$[3]+($=!1+'')[3]+([]+{}+'')[5]+$[1]+
         ((/./)[str_constructor]+'')[14]+(!0+'')[3];
    
    
    // finally
    [][str_constructor][str_constructor][str_call]('',ret_unescape + '("%68%71%77%7' + (!1+'')[1] +'")')() // "hqwz"
    
    // or -- toString
    str_toString = (!0+'')[0]+([]+{}+'')[1]+($=(('')[str_constructor]+''))[9]+$[10]+$[11]+$[12]+$[13]+$[14]
    
    (828035)[str_toString](36)  // hqwz
    
    奖金:

    如果我们偷偷摸摸,我们甚至可以放弃数字

    true: !![]
    false: ![]
    
    0: ![]+![]
    1: !![]+![]
    2: !![]+!![]
    10: (!![]+![]+'')+(![]+![])
    
    因此,我最讨厌的魔法常数可能是:

    ((!![]+!![])*(!![]+!![])*(!![]+!![])+'')+((!![]+!![])+'')+
        ((!![]+!![])*(!![]+!![])*(!![]+!![])+'')+
        (![]+![]+'')+(!![]+!![]+!![]+'')+((!![]+!![])*(!![]+!![])+!![])-![]
    

    我看不出有什么理由不这样做。我认为这个问题应该被问进去而不是stackoverflow。我不知道codegolf。有没有一种方法可以在不关闭这个问题的情况下将它移动到那里,并在那里创建一个新问题?你没有dn的来源,等等。。我相信你是通过“未定义”得到的<代码>([]+[])[1]+'?顺便说一句,包括数字——如果我们能找到一种方法获得大写字母
    C
    h
    ——游戏结束<代码>''['constructor']['fromCharCode']](120)不错,我忘记了'string'我不知道/不知道如何在OP中解释它,但我不想依赖于从依赖于环境的变量获取信息。如果你能得到一个'k',你可以使用函数构造函数来构建一个调用Object.keys()的函数。另外,你也可以得到'[对象对象]'只要
    {}+'
    ,就不需要
    []+{}+'
    {}+“
    yeilds
    0
    在chrome的开发控制台中,我会对此给出一点意见,但感觉规则有点扭曲。哪条规则?我会尽量找时间编码
    构造函数
    调用
    并在我今天回家后返回unescape
    规则
    无字母
    规则。我知道你没有使用任何字母,但你没有这是一个非常巧妙的解决方案,符合规定的规则。我唯一能想到的另一种方法,就是避免明显的编码:
    (828033)。toString(36)
    (我们通过
    “函数字符串(){[本机代码]}“
    ——我们可以用我上面的技巧来运行它)——这至少看起来更神奇。不过这是经过编码的。通过
    parseInt('hqwx',36)
    …我刚刚意识到
    z
    是我们缺少的,而不是
    x
    ——这个方法仍然适用。
    true: !![]
    false: ![]
    
    0: ![]+![]
    1: !![]+![]
    2: !![]+!![]
    10: (!![]+![]+'')+(![]+![])
    
    ((!![]+!![])*(!![]+!![])*(!![]+!![])+'')+((!![]+!![])+'')+
        ((!![]+!![])*(!![]+!![])*(!![]+!![])+'')+
        (![]+![]+'')+(!![]+!![]+!![]+'')+((!![]+!![])*(!![]+!![])+!![])-![]