Le Mystère Henry Déchiffre

Inigo A-H., Ugo M., Mattéo B., Yves-Antoine G., Eliot S., Guilhem C.

← Le Mystère Henry Déchiffre · La Disparition / La compromission

La Disparition

Vous avez accès aux derniers messages que Monsieur Déchiffre a échangés avec sa

femme avant de disparaitre.

Peut-être que vous y trouverez un indice important...

Le célèbre journaliste Henry Déchiffre a soudainement disparu alors qu'il

enquêtait pour sa prochaine affaire.

Sa femme a fait un signalement inquiétant indiquant qu'il a complètement arrêté

de répondre à ses messages du jour au lendemain alors qu'il était en voyage.

Monsieur Déchiffre ne dévoile généralement pas sa position exacte par téléphone,

de peur que ses échanges ne puissent être interceptés.

Même sa femme ne sait pas où il se trouvait exactement.

Néanmoins, celle-ci est persuadée qu'un indice important se cache parmi les SMS

qu'il lui a envoyés.

Elle a donc collaboré avec les forces de l'ordre et vous a transmis une copie de

leurs échanges par messages sur les 30 derniers jours dans l'espoir que vous

puissiez le retrouver.

Téléchargez cette copie, et retrouvez l'adresse de la dernière position du

journaliste avant sa disparition.

(Le format de l'adresse à suivre est celui donné par Google Maps.)

Cote 11 pts

Indices

Les messages ne semblent pas contenir d'information suffisante pour retrouver notre Journaliste... Mais alors, peut-être a t-il envoyé -autre chose- qui permettrait de le retrouver ?

Faire son rapport

La première étape est de restaurer la copie des messages pour qu'ils puissent
être lus.

On peut le faire ainsi :

# Terminal 1
mkdir ./db
mongod -dbpath ./db
# Terminal 2
mongorestore -d message_dump ./message_dump
mongosh

On peut à présent lire le contenu de la base de données.

test> use message_dump
switched to db message_dump
message_dump> db.messages.countDocuments()
125

On peut obtenir les identifiants utilisateurs avec :

db.users.find()

On remarque que le journaliste a l'ID utilisateur 3258270385, et sa femme a
l'ID 3258026835.

Les messages peuvent être ensuite remis dans le bon ordre avec :

db.messages.find().sort({createdAt: 1})

On peut alors lire les derniers échanges pour essayer de retrouver des
informations pertinentes.

En lisant les échanges, on se rend compte que le journaliste est arrivé à son
hôtel et a envoyé au même moment une image qui a l'ID 894843567.

On peut récupérer le contenu du fichier avec cette commande

mongosh --norc --quiet  --eval "db=db.getSiblingDB('message_dump'); db.medias.findOne({_id: 894843567}).media" > IMAGE

Ainsi, l'image se retrouve dans le fichier IMAGE.
Mais il faut maintenant la reconvertir dans un format lisible, car elle est
actuellement encodée en base 64.

La bibliothèque python base64 permet de très simplement décoder notre image.

def extract(path: str, output: str):
    with open(path) as file:
        media = file.read()

        with open(output, "wb") as out_file:
            out_file.write(base64.b64decode(media))

Dans la base de données de médias, on voit que l'image était au format PNG.
On exporte l'image dans ce format avec le code python ci-dessus.

Il ne reste plus qu'à lire les informations EXIF de l'image.
On obtient la position 41 deg 3' 4.66" S, 145 deg 54' 2.72" E qui correspond à
la position du Wellers Inn Backpacker Hostel, dont on peut récupérer
l'adresse.