解码优衣库T恤上的混淆bash脚本
摘要
一篇博文详细介绍了在优衣库T恤上发现并解码一个经过混淆的bash脚本的过程,该T恤是Akamai“Peace for All”活动的一部分,执行脚本后会显示一条隐藏的彩蛋信息。
暂无内容
查看缓存全文
缓存时间: 2026/07/09 07:40
# 由CDN Akamai编写的混淆自求值Bash脚本,通过零售店提供给消费者
来源:https://tris.sherliker.net/blog/obfuscated-self-evaluating-bash-script-by-cdn-akamai-being-supplied-to-consumers-via-retail-stores/
当妻子对我说“给你看件T恤……”时,我本没抱什么期待,但万万没想到,那竟然是一件背面印着混淆Bash脚本的T恤,用于打印一条复活节彩蛋信息。
我不习惯写标题党式的标题我完全不知道这个网站有多少浏览量,但我敢打赌,每月访问量连两位数都不到。但我也能理解副编辑们为何对此乐此不疲。严格来说,上面的标题完全准确,但可能并非你所想。这个所谓的混淆代码其实是一个彩蛋,由Akamai设计,通过优衣库门店在一件非常棒的T恤上提供,以支持他们的“和平为所有人”活动(https://www.uniqlo.com/nl/en/special-feature/peace-for-all)。
而且非常酷!正面有一颗花括号中的心:
正面
背面则是一大块字母数字混合的文本:
背面
## 那是……一个shebang吗?!
妻子说得对,我确实想看看。那居然是……一个shebang?
仔细看看文本块:
脚本
没错,就是一个shebang!而且是在街头专卖店销售的T恤上。很明显,这是一个经过base64编码的here字符串,通过`base64 --decode`喂给eval。
有趣。我对妻子说:“这基本上就是人们传播病毒的方式”,然后买下了它。
## OCR过程很麻烦
有好消息也有坏消息:
- **坏消息**是base64没有纠错功能,这意味着转录必须完美无误。唉。
- **好消息**是字符串似乎完整——至少它以预期的填充字符结尾,并且引号和花括号都匹配。这是件好事,因为优衣库 x Akamai还销售同一系列的另一款T恤设计(https://www.uniqlo.com/nl/en/products/E459562-000/00?colorDisplayCode=09&sizeDisplayCode=003),但那款显然是*不完整的*例如,其导入部分被截断,结尾写的是“retu”而不是“return”。这很可惜,因为它的颜色搭配很棒,而且包含了高度惯用的指令`go doStuff\(msg, work...`,任何人都能产生共鸣。,是从一个更宽的文本块中裁剪出来的,根本无法编译。
我用了几种方式运行OCR:首先,使用Android上“圈选搜索”功能的内置OCR,它通常非常出色;其次,使用Tesseract并调整一些选项;第三,通过Claude运行。对比三者以查找不匹配之处,并让Claude输出一个位置表格以便快速扫描,整理剩余部分变得琐碎但耗时。最终得到的字符串是:
```
IyEvYmluL2Jhc2gKCiMgQ29uZ3JhdHVsYXRpb25zISBZb3UgZm91bmQgdGhlIGVhc3RlciBlZ2chIOKdpO+4jwojIOOBiuOCgeOBp+OBqOOBhuOBlOOBluOBhOOBvuOBme+8gemaoOOBleOCjOOBn+OCteODl+ODqeOCpOOCuuOCkuimi+OBpOOBkeOBvuOBl+OBn++8geKdpO+4jwoKIyBEZWZpbmUgdGhlIHRleHQgdG8gYW5pbWF0ZQp0ZXh0PSLimaVQRUFDReKZpUZPUuKZpUFMTOKZpVBFQUNF4pmlRk9S4pmlQUxM4pmlUEVBQ0XimaVGT1LimaVBTEzimaVQRUFDReKZpUZPUuKZpUFMTOKZpVBFQUNF4pmlRk9S4pmlQUxM4pmlIgoKIyBHZXQgdGVybWluYWwgZGltZW5zaW9ucwpjb2xzPSQodHB1dCBjb2xzKQpsaW5lcz0kKHRwdXQgbGluZXMpCgojIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHRoZSB0ZXh0CnRleHRfbGVuZ3RoPSR7I3RleHR9CgojIEhpZGUgdGhlIGN1cnNvcgp0cHV0IGNpdmlzCgojIFRyYXAgQ1RSTCtDIHRvIHNob3cgdGhlIGN1cnNvciBiZWZvcmUgZXhpdGluZwp0cmFwICJ0cHV0IGNub3JtOyBleGl0IiBTSUdJTlQKCiMgU2V0IGZyZXF1ZW5jeSBzY2FsaW5nIGZhY3RvcgpmcmVxPTAuMgoKIyBJbmZpbml0ZSBsb29wIGZvciBjb250aW51b3VzIGFuaW1hdGlvbgpmb3IgKCggdD0wOyA7IHQrPTEgKSk7IGRvCiAgICAjIEV4dHJhY3Qgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUKICAgIGNoYXI9IiR7dGV4dDp0ICUgdGV4dF9sZW5ndGg6MX0iCiAgICAKICAgICMgQ2FsY3VsYXRlIHRoZSBhbmdsZSBpbiByYWRpYW5zCiAgICBhbmdsZT0kKGVjaG8gIigkdCkgKiAkZnJlcSIgfCBiYyAtbCkKCiAgICAjIENhbGN1bGF0ZSB0aGUgc2luZSBvZiB0aGUgYW5nbGUKICAgIHNpbmVfdmFsdWU9JChlY2hvICJzKCRhbmdsZSkiIHwgYmMgLWwpCgogICAgIyBDYWxjdWxhdGUgeCBwb3NpdGlvbiB1c2luZyB0aGUgc2luZSB2YWx1ZQogICAgeD0kKGVjaG8gIigkY29scyAvIDIpICsgKCRjb2xzIC8gNCkgKiAkc2luZV92YWx1ZSIgfCBiYyAtbCkKICAgIHg9JChwcmludGYgIiUuMGYiICIkeCIpCgogICAgIyBFbnN1cmUgeCBpcyB3aXRoaW4gdGVybWluYWwgYm91bmRzCiAgICBpZiAoKCB4IDwgMCApKTsgdGhlbiB4PTA7IGZpCiAgICBpZiAoKCB4ID49IGNvbHMgKSk7IHRoZW4geD0kKChjb2xzIC0gMSkpOyBmaQoKICAgICMgQ2FsY3VsYXRlIGNvbG9yIGdyYWRpZW50IGJldHdlZW4gMTIgKGN5YW4pIGFuZCAyMDggKG9yYW5nZSkKICAgIGNvbG9yX3N0YXJ0PTEyCiAgICBjb2xvcl9lbmQ9MjA4CiAgICBjb2xvcl9yYW5nZT0kKChjb2xvcl9lbmQgLSBjb2xvcl9zdGFydCkpCiAgICBjb2xvcj0kKChjb2xvcl9zdGFydCArIChjb2xvcl9yYW5nZSAqIHQgLyBsaW5lcykgJSBjb2xvcl9yYW5nZSkpCgogICAgIyBQcmludCB0aGUgY2hhcmFjdGVyIHdpdGggMjU2LWNvbG9yIHN1cHBvcnQKICAgIGVjaG8gLW5lICJcMDMzWzM4OzU7JHtjb2xvcn1tIiQodHB1dCBjdXAgJHQgJHgpIiRjaGFyXDAzM1swbSIKCiAgICAjIExpbmUgZmVlZCB0byBtb3ZlIGRvd253YXJkCiAgICBlY2hvICIiCgpkb25lCgo=
```
## 解码后的脚本
经过Base64解码后,得到的脚本是一个友好且注释精美的彩蛋:
```bash
#!/bin/bash
# Congratulations! You found the easter egg! ❤️
# おめでとうございます!隠されたサプライズを見つけました!❤️
# Define the text to animate
text="♥PEACE♥FOR♥ALL♥PEACE♥FOR♥ALL♥PEACE♥FOR♥ALL♥PEACE♥FOR♥ALL♥PEACE♥FOR♥ALL♥"
# Get terminal dimensions
cols=$(tput cols)
lines=$(tput lines)
# Calculate the length of the text
text_length=${#text}
# Hide the cursor
tput civis
# Trap CTRL+C to show the cursor before exiting
trap "tput cnorm; exit" SIGINT
# Set frequency scaling factor
freq=0.2
# Infinite loop for continuous animation
for (( t=0; ; t+=1 )); do
# Extract one character at a time
char="${text:t % text_length:1}"
# Calculate the angle in radians
angle=$(echo "($t) * $freq" | bc -l)
# Calculate the sine of the angle
sine_value=$(echo "s($angle)" | bc -l)
# Calculate x position using the sine value
x=$(echo "($cols / 2) + ($cols / 4) * $sine_value" | bc -l)
x=$(printf "%.0f" "$x")
# Ensure x is within terminal bounds
if (( x < 0 )); then x=0; fi
if (( x >= cols )); then x=$((cols - 1)); fi
# Calculate color gradient between 12 (cyan) and 208 (orange)
color_start=12
color_end=208
color_range=$((color_end - color_start))
color=$((color_start + (color_range * t / lines) % color_range))
# Print the character with 256-color support
echo -ne "\03338;5;${color}m"$(tput cup $t $x)"$char\033[0m"
# Line feed to move downward
echo ""
done
```
结果是一个持续循环的欢乐正弦波,展示着活动标语“Peace for All”:
Peace for All
## 细节:字体选择
**编辑:以下字体识别有误。Hacker News上的用户ralphinus指出该字体是Roboto Mono。我不知道自己怎么会忽略了非常不同的`g`字型。**
不过,我猜测优衣库是通过Windows运行的:一件让我印象深刻的事情是字体,我*之前*几乎肯定它是[Consolas (https://en.wikipedia.org/wiki/Consolas)我曾有幸与设计师Lucas de Groot通信,涉及一起某人使用他的一款字体伪造文件的案件。他非常乐于助人,并友好地以书面形式确认了必要的事实,尽管他并不欠我们什么。,这也是我喜欢的一种字体。注意那个非常浅斜线的`0`,`1`没有衬线,以及像`BDyg`和数字`2`这样的圆润曲线。这很引人注目,因为它主要是Windows字体,所以我没料到会出现在调用Bash的场合。
## Linux,互联网的语言
Akamai在衬衫发布时发了一篇新闻稿(https://www.akamai.com/newsroom/press-release/uniqlo-adds-new-akamai-tshirt-to-peace-for-all-collection),由于科技与营销的融合,这本身也很有意思:
> 设计理念:25年多前,Akamai帮助实现了我们今天所知的互联网。这款T恤的设计是对早期网络生活的致敬。浅褐色调指的是“米色盒子”塑料外壳,那种外壳曾包裹着早期互联网计算机;正面的心形象征着互联网在世界各地被用于善举。T恤背面是真实的代码。它引用自Linux,这种开源的互联网语言。这种共同语言将Akamai与世界顶级品牌及其服务的人们联系在一起,我们共同努力,朝着一个更安全、更互联的世界愿景迈进。
## 并非首例
我一开始故意没有搜索剧透,但我发现自己当然不是第一个被这个“技术饵”吸引的人。李文川(https://leewc.com/blog/uniqlo-akamai-peace-for-all/)那篇博客还链接了另一篇(我已根据那篇交叉核对过我的转录)。我很高兴能继续这个链条。
阅读Hacker News上关于这篇文章的讨论,其中包含了来自设计师的更多链接以及其他有趣的观察(https://news.ycombinator.com/item?id=48829312)。
相似文章
在 Claude Code 或 Codex 发送之前屏蔽密钥和 PII
一位开发者构建了 Hamza,该工具会检查来自 Claude Code 和 Codex 等 AI 编码代理的出站请求,在它们离开你的机器之前屏蔽机密和个人身份信息(PII)。
@xiangxiang103: 卧槽,Anthropic 这次真的翻大车了。 有人在 Claude Code 的二进制里挖出了隐藏代码——专门检测你是不是中国用户、或者代理走了中国。不是普通遥测,是故意混淆、发行说明不写、用户完全不知情的那种。 过程很骚: - 检测到你…
有人在 Claude Code 的二进制中发现隐藏代码,专门检测中国用户或代理,并偷偷修改 system prompt 添加水印,引发对开发者工具信任的广泛质疑。
@Tabbu_ai: https://x.com/Tabbu_ai/status/2059217417096843296
一篇深度解析文章,揭示Anthropic的Claude Code不仅仅是另一个AI编码助手,而是一个在终端中运行的自主软件工程师。
我检查了我的带回家面试项目。这整个就是个精心策划的操作
一位软件工程师收到了一个可疑的带回家面试项目,其中包含旨在执行恶意软件的恶意 Git 钩子,揭示了一场针对开发者的精心求职骗局。
阿里巴巴据报禁止员工使用Claude Code
出于安全考虑,阿里巴巴将禁止员工使用Anthropic的Claude Code,并要求他们使用自家的Qoder工具。