Vieille Complicité
Énoncé
Bienvenue dans ce deuxième writeup dédié au BreizhCTF 2026 !

Pour ce challenge, il faut retrouver la ville où habite Mr O, le chef adjoint de la BZH Mafia. Un extrait de SMS interceptés est fourni comme point de départ :
- Free Mobile : rappel de consommation data, sans intérêt.
- Numéro inconnu : « Bonjour paulifonta35 ! Cela fait un moment que vous n'avez pas laissé de nouvel avis sur un livre. La communauté attend avec impatience vos prochaines critiques littéraires ! »
- Mémé : un lien cliqué qui a visiblement infecté son ordinateur avec un ransomware, hors-sujet mais amusant.
- Burger King : une offre promotionnelle, sans intérêt.
Le SMS le plus intéressant mentionne le pseudo paulifonta35 et une plateforme de critiques de livres.
Identification de la cible
Je dresse une liste des principales plateformes de critiques littéraires : Babelio, Livraddict, Booknode, SensCritique, Goodreads, StoryGraph, LibraryThing. J'ai le réflexe de lancer un scan WhatsMyName sur le pseudo, sans succès. Je teste donc les plateformes une par une, et je finis par trouver ce compte sur Goodreads :

goodreads.com/user/show/198943764-paulifonta35
En parcourant ses critiques de livres, celle sur Vendredi ou la Vie Sauvage de Michel Tournier attire mon attention : elle mentionne « mon ami Octave ». On cherche un « Mr O » pour « Mr Octave » — ça colle.

Paulifonta35 mentionne aussi son collège, le collège des Horizons Lumineux. Un Google dork sur ces informations permet d'obtenir plus de détails sur Octave :

Je tombe sur un compte Copains d'Avant :

Sa description contient un indice précieux : « Je n'utilise plus Twitter, je poste uniquement sur un nouveau réseau décentralisé. » Je pense directement à Bluesky, et une recherche permet de retrouver son profil :

bsky.app/profile/justoctave.bsky.social

Le compte ne contient que quelques posts. Puisqu'on cherche sa ville de résidence, le post le plus récent semble être la piste à suivre, car il contient une photo d'un colis qu'il vient de recevoir.
Décodage du colis
Avant de me lancer dans du GEOINT classique, je préfère d'abord analyser en détail la photo du colis :

À première vue, je ne reconnais pas ce type de code, et mon téléphone n'arrive pas à le scanner. Après quelques recherches sur les différents types de QR codes, je comprends qu'il s'agit en réalité d'un MaxiCode, un format créé et utilisé par UPS.

J'utilise une plateforme en ligne pour décoder le MaxiCode :

J'obtiens la chaîne suivante :
[)>~03001~0292645520~029250~029999~02948197Z7781~029UPSN~029R84M7

(structure de référence trouvée sur neodynamic.com)
Cette documentation détaille la structure des MaxiCode, mais en essayant d'extraire les différentes parties de la chaîne (par exemple 02948197Z00007781), je reste bloqué : impossible d'avancer plus précisément dans le décodage.
Je retourne sur le post Bluesky pour chercher d'autres indices, et je remarque que le texte alternatif de l'image contient en réalité deux liens :

- Une première documentation : barcodefaq.com/2d/maxicode
- La seconde, déjà trouvée plus tôt : neodynamic.com
La documentation de barcodefaq.com précise que « MaxiCode Mode 2 and Mode 3 shall be reserved for use as a destination sortation symbol for use by carriers in the transport industry. » J'en déduis qu'il s'agit bien d'un MaxiCode de mode 2 ou 3 :

La structure de la chaîne pour ces modes utilise des séparateurs GS. Or notre chaîne ne contient pas de « GS » mais des « ~ ».
Après une recherche sur internet, je découvre que ~029 représente le caractère de contrôle ASCII non imprimable GS.
En remplaçant chaque séparateur :
[)>~03001~0292645520~029250~029999~02948197Z7781~029UPSN~029R84M7
devient :
[)>RS01GS2645520GS250GS999GS48197Z7781GSUPSNGSR84M7

Le décodage révèle enfin la ville recherchée.
Flag