Présentation du script
Un script bash obfusqué a été découvert sur un t-shirt Uniqlo, conçu par Akamai dans le cadre de leur campagne Peace for All. Le script est un easter egg qui affiche un message de paix sous forme d'une sinusoïde heureuse.
Fonctionnement du script
Le script utilise la commande base64 --decode pour décoder le texte obfusqué, puis il utilise la commande tput pour obtenir les dimensions du terminal et afficher le message de paix de manière animée. Le script utilise également la commande bc pour effectuer des calculs mathématiques et la commande echo pour afficher les caractères avec une couleur spécifique.
Analyse technique du script
Le script est écrit en bash et utilise des commandes spécifiques à ce langage, telles que tput et bc. Le script utilise également des techniques de programmation telles que les boucles infinies et les calculs mathématiques pour créer l'effet de sinusoïde. Le choix de la police de caractères, Consolas, est également intéressant, car il s'agit d'une police de caractères principalement utilisée sous Windows.
Implications et limites
Le script obfusqué sur le t-shirt Uniqlo est un exemple intéressant de l'utilisation de la technologie pour créer des expériences interactives et engageantes. Cependant, il est important de noter que le script nécessite une certaine connaissance de la programmation et des commandes bash pour être compris et modifié. De plus, le script est limité par les capacités du terminal et de la police de caractères utilisée, ce qui peut affecter son apparence et son fonctionnement.
#!/bin/bash
# Congratulations! You found the easter egg!
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"$(tput cup $t $x)"$char033[0m"
# Line feed to move downward
echo ""
done