Uniqlo x Akamai Peace for All Bash Script 이스터 에그 해독하기

Uniqlo x Akamai Peace for All Bash Script 이스터 에그 해독하기

리테일 티셔츠에 담긴 기능적인 Bash 스크립트

Akamai와 Uniqlo는 "Peace for All" 캠페인의 일환으로 뒷면에 기능적이고 난독화된 Bash 스크립트가 포함된 한정판 티셔츠를 출시했습니다. 이 스크립트를 디코딩하여 터미널에서 실행하면, 사이언(cyan)과 오렌지 색상 사이의 그라데이션을 사용하여 캠페인 메시지인 "PEACE FOR ALL"의 연속적인 사인파(sine-wave) 애니메이션을 생성합니다.

난독화 기술 분석

이 스크립트는 알파뉴메릭 텍스트 블록으로 제시되며, shebang (#!/bin/bash)과 base64 --decode를 통해 eval로 전달되는 Base64 인코딩된 "Here string"을 사용합니다. 이 방법은 일반적인 관찰로부터 스크립트의 실제 로직을을 숨기기 위한 흔한 기술이지만, 필요한 도구를 가진 사람들에게는 쉽게 역전환이 가능합니다.

디코딩된 소스 코드

디코딩을 완료하면, 스크립트는 터미널 조작을 위해 tput을 사용하고 부동 소수점 계산을 위해 bc를 사용하는 잘 주석 처리된 Bash 프로그램임을 드러냅니다. 핵심 로직은 다음과 같습니다:

  1. 터미널 크기: tput colstput lines를 사용하여 현재 터미널의 너비(cols)와 높이(lines)를 가져옵니다.
  2. 사인파 계산: bc -l 수학 라이브러리를 통해 사인 함수(s($angle))를 사용하여 문자의 x-좌표를 계산함으로써 수평 진동을 생성합니다.
  3. 시각적 효과: 256색 그라데이션(색상 12에서 208까지)을 구현하고 ANSI 이스케이프 코드를 (\033[38;5;${color}m) 사용하여 문자를 채색합니다.
  4. 커서 제어: 스크립트는 커서를 숨기고 (tput civis) tput cup을 사용하여 화면에 문자를 정확하게 배치합니다.
#!/bin/bash

# Congratulations! You found the easter egg! ❤
# えもでちございます 覇されたさぷらいゖを見つかました ❤

text="❤PEACE❤FOR❤ALL❤PEACE❤FOR❤ALL❤PEACE❤FOR❤ALL❤PEACE❤FOR❤ALL❤PEACE❤FOR❤ALL❤"

cols=$(tput cols)
lines=$(tput lines)
text_length=${#text}
tput civis
trap "tput cnorm; exit" SIGINT
freq=0.2

for (( t=0; ; t+=1 )); do
    char="${text:t % text_length:1}"
    angle=$(echo "($t) * $freq" | bc -l)
    sine_value=$(echo "s($angle)" | bc -l)
    x=$(echo "($cols / 2) + ($cols / 4) * $sine_value" | bc -l)
    x=$(printf "%.0f" "$x")

    if (( x < 0 )); then x=0; fi
    if (( x >= cols )); then x=$((cols - 1)); fi

    color_start=12
    color_end=208
    color_range=$((color_end - color_start))
    color=$((color_start + (color_range * t / lines) % color_range))

    echo -ne "\033[38;5;${color}m"$(tput cup $t $x)"$char\033[0m"
    echo ""
done

구현상의 어려움 및 관찰 사항

OCR 및 전사

물리적 의류에서 스크립트를 전사하는 것은 어렵습니다. Base64 인코딩은 오류 정정 기능이 부족하기 때문입니다. 단 하나의 문자 오류만으로도 전체 문자열을 디코딩할 수 없게 됩니다. 사용자들은 OCR 도구에 대해 다음과 같은 다양한 성공 사례를 보고했습니다:

  • Android Circle-to-Search 및 Claude: 조합하여 사용하고 정확도를 위해 diff를 비교했을 때 효과적임이 증명되었습니다.
  • macOS Live Text: 전사 오류로 인해 결과 문자열을 디코딩하는 데 실패했다고 보고되었습니다.

타이포그래피 및 디자인

티셔츠에 사용된 폰트에 대한 논쟁이 있습니다. 일부는 Consolas를 제보하고 있지만, 다른 이들은 InDesign과 같은 디자인 도구를 통해 적용된 비표준 타이포그래피(광학적 커닝)가 적용된 Roboto Mono라고 주장합니다. 이는 왜 일부 문자가 표준 모노스페이스 폰트보다 수평 공간을 적게 차지하는 것처럼 보이는지를 설명해 줍니다.

호환성 문제

일부 사용자들은 스크립트가 쉼표를 소수점 구분자로 사용하는 비영어권 지역(예: 스페인어) 로케일에서 충돌할 수 있다고 언급했습니다. 이는 로케일 설정을 C로 지정하여 스크립트를 실행하는 방식인 LC_NUMERIC=C ./shirt.sh로 해결할 수 있습니다.

문맥 및 의의의

Akamai는 이 디자인을 초기 인터넷에 대한 경외의 표시로 설명합니다. 티셔츠의 "베이지 박스" 색상은 초기 PC 케이스를를 참조하며, Linux/Bash를 "공통 언어"로서 전 세계 브랜드와 사용자를 하나로 묶는 도구로 묘사합니다.

커뮤니티 구성원들은 이를 DeCSS t-shirts(DVD 복호화 키를 포함한)나 Quine Clock과 같은 다른 "코드-as-패션" 사례와 비교하고 있습니다. 한 비평가는 동일한 Uniqlo 제품군 내의 다른 디자인들이 "명백히 불완전히" 설계되어, 컴파일하거나 실행할 수 없는 잘린 코드 블록을 특징으로 한다는 점을 지적했습니다.

Sources