escape

(Image générée avec Copilot)

TP2-ESCAPE-01 : Escape Game !#

Objectif pédagogique#

  • mobiliser l’entier des sujets vus en première et en deuxième année pour résoudre une énigme informatique

    • représentation de l’information (images, sons, etc..)

    • algorithmique (tri, recherche, etc..)

    • programmation en Python (variables, tests conditionnels, boucles, etc..)

    • réseaux (TCP/IP, routage, passerelles, etc..)

    • enjeux sociaux du numérique

Énigme 1 : L’Interception Réseau#

Un message d’alerte a transité dans l’ancien réseau de Raspberry Pi. Retrouvez la machine finale pour obtenir la Clé Réseau.

Le message part de la machine de départ et suit aveuglément ces règles de routage :

Départ : IP 192.168.1.10 
    -> Règle : Envoyer le paquet à la machine qui a le plus petit dernier octet pair.

Suite : IP 192.168.1.XXX
    -> Règle : Toujours envoyer le paquet à la machine dont le dernier octet est un multiple de 7.

reseau

La Clé Réseau est égale à : (Dernier octet de la deuxième machine) + (Dernier octet de la machine finale).

Énigme 2 : Le Message Caché#

Voici une image :

cius

Le lanceur d’alerte a caché le mot de passe de l’archive dans l’image.

Énigme 3 : Le Briseur de Code#

Voici un fichier nommé anti_virus.py. Il contient un algorithme de tri.

  1. Copiez-le

  2. Collez-le dans une fenêtre de l’éditeur Thonny

  3. Enregistrez-le avec le nom : anti_virus.py

  4. Exécutez-le

# =====================================================================
# MISSION 3 : RECONSTRUIRE LE MANIFESTE ÉCOLOGIQUE
# =====================================================================
# Consignes :
# 1. Lancez le script et entrez le mot de passe trouvé à l'énigme 2.
# 2. Répondez à la question sur la complexité.
# 3. Corrigez l'erreur dans l'algorithme de tri pour décoder le message.
# =====================================================================

# --- ÉTAPE 1 : VÉRIFICATION DU MOT DE PASSE ---
mot_de_passe = input("Entrez le mot de passe secret de l'énigme 2 : ")

if mot_de_passe != "VERDURE":
    print("ACCÈS REFUSÉ. Le système s'est verrouillé.")
else:
    print("\n--- ACCÈS ACCÉPTÉ ---")
    print("Vérification de vos compétences en algorithmique...")
    
    # --- ÉTAPE 2 : QUESTION DE COMPLEXITÉ ---
    print("Ce programme utilise un tri à bulles (deux boucles imbriquées).")
    print("Quelle est sa complexité dans le pire des cas si la liste contient N éléments ?")
    print("Options disponibles : 'N', 'N^2', ou '1'")
    
    reponse = input("Votre réponse : ")
    
    if reponse != "N^2":
        print("Erreur d'analyse algorithmique. Fin du programme.")
    else:
        print("\n--- ANALYSE LOGIQUE CORRECTE ---")
        print("Début du processus de tri des données...")
        
        # Deux listes simples (les positions et les lettres correspondantes)
        positions = [5, 2, 6, 1, 4, 3]
        lettres = ["T", "L", "E", "A", "R", "E"]
        
        # Algorithme de tri à bulles pour remettre les positions dans l'ordre (1, 2, 3...)
        taille = 6
        for i in range(taille):
            for j in range(0, taille - i - 1):
                if positions[j] < positions[j+1]:
                    # On échange les positions
                    temporaire_pos = positions[j]
                    positions[j] = positions[j+1]
                    positions[j+1] = temporaire_pos
                    
                    # On échange AUSSI les lettres pour qu'elles suivent leur position
                    temporaire_lettre = lettres[j]
                    lettres[j] = lettres[j+1]
                    lettres[j+1] = temporaire_lettre
        
        # Reconstruction du message final sous forme de texte
        message_decode = ""
        for k in range(taille):
            message_decode = message_decode + lettres[k]
            
        print("\nRésultat du décodage :", message_decode)
---------------------------------------------------------------------------
StdinNotImplementedError                  Traceback (most recent call last)
Cell In[1], line 11
      1 # =====================================================================
      2 # MISSION 3 : RECONSTRUIRE LE MANIFESTE ÉCOLOGIQUE
      3 # =====================================================================
   (...)      9 
     10 # --- ÉTAPE 1 : VÉRIFICATION DU MOT DE PASSE ---
---> 11 mot_de_passe = input("Entrez le mot de passe secret de l'énigme 2 : ")
     13 if mot_de_passe != "VERDURE":
     14     print("ACCÈS REFUSÉ. Le système s'est verrouillé.")

File ~/.local/pipx/venvs/jupyter-book/lib/python3.11/site-packages/ipykernel/kernelbase.py:1274, in Kernel.raw_input(self, prompt)
   1272 if not self._allow_stdin:
   1273     msg = "raw_input was called, but this frontend does not support input requests."
-> 1274     raise StdinNotImplementedError(msg)
   1275 return self._input_request(
   1276     str(prompt),
   1277     self._parent_ident["shell"],
   1278     self.get_parent("shell"),
   1279     password=False,
   1280 )

StdinNotImplementedError: raw_input was called, but this frontend does not support input requests.

Énigme 4 : Le Choix Éthique#

Pour terminer le jeu, voici un fichier texte brut. A vous de résoudre l’énigme

=====================================================================
ULTIME ÉTAPE : TRANSMISSION DU CODE DE DÉSACTIVATION
=====================================================================
Pour couper le centre de surveillance de la NSA, vous devez calculer 
le code de sécurité "S" et le donner immédiatement à votre professeur.

Formule mathématique :
S = (Clé Réseau de l'énigme 1) x (Valeur ASCII de la première lettre du mot décodé à l'enigme 3) + Le Bonus Environnement

Pour trouver le "Bonus Environnement", répondez à la question suivante :
Quelle est la cause majeure de l'empreinte carbone de la surveillance de masse et du numérique aujourd'hui ?
- Si c'est la fabrication des millions de kilomètres de câbles réseau sous marin : le bonus vaut 10
- Si c'est la consommation électrique des Data Centers : le bonus vaut 100
- Si c'est l'utilisation des smartphones : le bonus vaut 500

Solution#

Que vaut \(S\) ?