HN 日本語サマリー

← 一覧へ戻る
プログラミング

Uniqlo Tシャツに隠された難読化Bashスクリプトの解読

Decoding the obfuscated bash script on a Uniqlo t-shirt (tris.sherliker.net)

1383 pointsby speerer218 コメント

要約

UniqloのTシャツに印刷された難読化されたBashスクリプトが発見され、その内容が解析されました。このスクリプトはAkamaiの「Peace for All」キャンペーンの一環として、端末上でアニメーションメッセージを表示するイースターエッグであることが判明しました。OCRによる文字起こしの苦労や、スクリプトの動作原理、そしてAkamaiのキャンペーンメッセージについて解説しています。

全文翻訳

CDN Akamaiによる難読化された自己評価型Bashスクリプトが、小売店を通じて消費者に提供されています。 私の妻が「見たTシャツを見せてあげるわ…」と言ったとき、私は何が期待できるか分かりませんでしたが、それは間違いなく、幸せなイースターエッグメッセージを表示するためにデザインされた、背面に印刷された難読化Bashスクリプトではありませんでした。 私はクリックベイトな見出しをつける習慣はありません。このサイトがどれだけのビューを得ているかは全く分かりませんが、月に十数人にも満たないと賭けてもいいです。しかし、サブエディターたちがなぜそれらで楽しむのかは理解できます。 上記のタイトルは、厳密には完全に正確ですが、おそらくあなたが考えているものではありません。 問題の難読化コードは実際にはイースターエッグであり、Akamaiが「Peace for All」キャンペーンを支援するためにデザインした優れたTシャツに、Uniqloを通じて提供されています。そして、それは非常にクールです! フロントには波括弧で囲まれたハートがあります。 そして、背面には大きな英数字のブロックがあります。 それは…シェバン(shebang)ですか? 妻は私がそれを見たいだろうと言った通りでした。それは…シェバンでしたか? テキストブロックをよく見てください。 はい、シェバンです! しかも、街のお店で売られているTシャツにです。 そして、それは明らかにbase64エンコードされたヒアストリング(Here string)で、base64 --decodeを介してevalに渡されています。 興味深い。私は妻に「それは基本的にウイルスが出荷される方法だね」と言って、それを購入しました。 OCRは手間がかかりました 良いニュースと悪いニュースがありました。 悪いニュースは、base64にはエラー訂正機能がないため、文字起こしが完璧である必要があることでした。ため息。 良いニュースは、文字列がそのまま残っているように見えたことです。少なくとも、期待されるパディングで終了し、一致する引用符と波括弧がありました。 これは良いことです。なぜなら、Uniqlo x Akamaiは同じ範囲で別のデザインのシャツを販売していますが、それは明らかに不完全だからです。 例えば、そのインポートは切り取られており、「return」ではなく「retu」で終わっています。 それは残念です。なぜなら、それは本当に良い色の組み合わせであり、誰でも共感できる非常に慣用的な指示「go doStuff(msg, work...」を含んでいるからです。これは、コンパイルできない広いテキストブロックからの切り取られた部分です。 私はいくつかの方法でOCRを実行しました。 まず、Androidの円形検索機能の組み込みOCRを使用しました。これはしばしば非常に優れています。 次に、Tesseractをいくつかのオプションと調整で使用しました。 そして第三に、Claudeを通して実行しました。 3つの結果を比較して不一致を探し、Claudeにスキャンを容易にするための場所のテーブルを出力させた後、残りを整理するのは些細なことでしたが、時間がかかりました。 結果の文字列は次のとおりです。 ``` IyEvYmluL2Jhc2gKCiMgQ29uZ3JhdHVsYXRpb25zISBZb3UgZm91bmQgdGhlIGVhc3RlciBlZ2chIOKdpO+4jwojIOOBiuOCgeOBp+OBqOOBhuOBlOOBluOBhOOBvuOBme+8gemaoOOBleOCjOOBn+OCteODl+ODqeOCpOOCuuOCkuimi+OBpOOBkeOBvuOBl+OBn++8geKdpO+4jwoKIyBEZWZpbmUgdGhlIHRleHQgdG8gYW5pbWF0ZQp0ZXh0PSLimaVQRUFDReKZpUZPUuKZpUFMTOKZpVBFQUNF4pmlRk9S4pmlQUxM4pmlUEVBQ0XimaVGT1LimaVBTEzimaVQRUFDReKZpUZPUuKZpUFMTOKZpVBFQUNF4pmlRk9S4pmlQUxM4pmlIgoKIyBHZXQgdGVybWluYWwgZGltZW5zaW9ucwpjb2xzPSQodHB1dCBjb2xzKQpsaW5lcz0kKHRwdXQgbGluZXMpCgojIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHRoZSB0ZXh0CnRleHRfbGVuZ3RoPSR7I3RleHR9CgojIEhpZGUgdGhlIGN1cnNvcgp0cHV0IGNpdmlzCgojIFRyYXAgQ1RSTCtDIHRvIHNob3cgdGhlIGN1cnNvcgogICAgdHJhcCAiZWNobyBcY25vcm07IGV4aXQiIFNJR0lOVCAgCgojIFNldCBmcmVxdWVuY3kgc2NhbGluZyBmYWN0b3IKZnJlcT0wLjIKICMgSW5maW5pdGUgbG9vcCBmb3IgY29udGludW91cyBhbmltYXRpb24KZm9yICggdD0wOyA7IHRrPTEgKSk7IGRvCiAgICAjIEV4dHJhY3Qgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUKICAgIGNoYXI9IiR7dGV4dDp0ICUgdGV4dF9sZW5ndGg6MX0iIAogICAgIyBDYWxjdWxhdGUgdGhlIGFuZ2xlIGluIHJhZGlhbnMKICAgIGFuZ2xlPSQoZWNobyAiKCR0KSogJmZyZXEnIHwgYmMgLWwKICAgICMgQ2FsY3VsYXRlIHRoZSBzaW5lIG9mIHRoZSBhbmdsZQogICAgc2luZV92YWx1ZT0kKGVjaG8gInMoJGFuZ2xlKSIgfCBiYyAtbApICAgICMgQ2FsY3VsYXRlIHggcG9zaXRpb24gdXNpbmcgdGhlIHNpbmUtdmFsdWUKICAgIHg9JChlY2hvICIoJGNvbHMvIDIpICsgKCRjb2xzIC8gNCkgKiAke2NpbmVfdmFsdWV9IikgfCBiYyAtbAp4PSQocHJpbnRmICIlLjBmICIgJHgpCgogICAgIyBFbnN1cmUgeCBpcyB3aXRoaW4gdGVybWluYWwgYm91bmRzCiAgICBpZiAoKCB4IDwgMCkpOyB0aGVuIHg9MDsgZmkKICAgIGlmICgoIHggPj0gY29scykpOyB0aGVuIHg9JChjb2xzIC0gMSk7IGZpCgogICAgIyBDYWxjdWxhdGUgY29sb3IgZ3JhZGllbnQgYmV0d2VlbiAxMiAoY3lhbikgYW5kIDIwOCBvcmFuZ2UpCiAgICBjb2xvcl9zdGFydD0xMgogICAgY29sb3JfZW5kPTIwOAogICAgY29sb3JfcmFuZ2U9JChjb2xvcl9lbmQgLSBjb2xvcl9zdGFydCkpCiAgICBjb2xvcj0kKChjb2xvcl9zdGFydCArIChjb2xvcl9yYW5nZSAqIHRcIC8gbG5lcykgJSBjb2xvcl9yYW5nZSkpCgogICAgIyBQcmludCB0aGUgY2hhcmFjdGVyIHdpdGggMjU2LWNvbG9yIHN1cHBvcnQKICAgIGVjaG8gLW5lICdcMDMzWzM4OzU7JHtjb2xvcml9bScgJCh0cHV0IGN1cCAkIHR4ICk0ICRjaGFyICdcMDMzWzBtJwoKICAgICMgTGluZSBmZWVkIHRvIG1vdmUgZG93bndhcmQKICAgIGVjaG8gIgoKZG9uZSAK ``` デコードされたスクリプト 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 "\033[38;5;${color}m" # Move cursor to the calculated position echo -ne "$(tput cup $t $x)" echo -ne "$char" echo -ne "\033[0m" # Line feed to move downward echo "" done ``` 結果は、キャンペーンメッセージ「Peace for All」の連続した幸せなサイン波ループです。 詳細:フォントの選択 UniqloはWindowsで運営されているのだと思いますが:私が気づいた一つのことはフォントです。これはコンソラス(Consolas)であるとほぼ確信しています。私はかつて、誰かが彼のフォントを使って文書を偽造したという訴訟に関して、デザイナーのLucas de Grootと幸運にもやり取りしました。彼は私たちに何も借りがないにもかかわらず、必要な事実を書面で確認してくれて、とても親切で親切でした。 私はそれが好きです。非常に浅くスラッシュされた0、1のセリフの欠如、そしてBDygや数字の2のような文字の丸みを帯びた曲線に注目してください。それは、主にWindowsフォントであるため、Bashを呼び出すようなものではないため、印象的です。 Linux、インターネットの言語 Akamaiはリリース時にこのTシャツについてプレスリリースを出しました。これは、テクノロジーとマーケティングのブレンドという点で、もう一つの興味深いものです。 デザインメッセージ 25年以上前、Akamaiは今日のインターネットを可能にするのを助けました。このTシャツのデザインは、オンラインでの初期の頃へのオマージュです。薄いタン色の色は、初期のインターネットコンピューターを収容していた「ベージュボックス」のプラスチック筐体を参考にしています。そして、前面のハートは、インターネットが世界中で善のためにどのように使われてきたかを象徴しています。 Tシャツの背面には実際のコードがあります。これは、インターネットのオープンソース言語であるLinuxへの参照です。この共通言語は、Akamaiと世界のトップブランド、そしてそれらがサービスを提供する人々を結びつけ、より安全でより接続された世界というビジョンの実現に向けて協力しています。 最初ではない 私は意図的に最初はネタバレを探しませんでしたが、もちろん、このことで神経を刺激されたのは私が最初ではないことに気づきました。Wen Chuan Leeの投稿も、私が上記の文字起こしをクロスチェックした別の投稿にリンクしています。私はこの連鎖を続けることを嬉しく思います。