# Le futur

**Flag:** CYBN{1594}

## Challenge

{% file src="https://2344605990-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5vTwbgJFy6k3bN4a9ntp%2Fuploads%2FjW32QWU0wfNG7Su3cF2u%2Fle-futur.zip?alt=media&token=40345dc1-535c-4eb6-9a34-f1d34ded9db9" %}

{% hint style="info" %}
**Description**

***

Tu as reçu un message provenant du futur

Apparemment il utilise une méthode dépréciée très connue pour rendre le texte illisible, mais de manière améliorée.

Le futur est-il vraiment en avant sur nos méthodes ?

Le flag est la durée complète, en minutes, citée dans le texte : `CYBN{123465}`
{% endhint %}

## Solution

Le fichier contient clairement des hash. En cherchant sur internet le premier, on tombe sur le md5 du mot "Bon".

<figure><img src="https://2344605990-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5vTwbgJFy6k3bN4a9ntp%2Fuploads%2FnHRQVm27U3J8WhFMHYE1%2Fimage.png?alt=media&#x26;token=065a5c5b-8e37-4976-9db4-7b36d7d9ac12" alt=""><figcaption></figcaption></figure>

En fait, les hash sont des md5 de quelques lettres. On peut alors scripter pour générer tous les hash possibles pour des groupes jusqu'à 4 lettres et remplacer les hash dans le fichier.

J'ai juste remplacé les hash non trouvés par un **`_`** pour une question de lisibilité.

```python
from itertools import product
from string import printable as CHARSET
from hashlib import md5

CHARSET += ' éàèùâêîôûçëïü'

with open('secret_message.txt', 'r') as f:
  hashes = f.read().splitlines()

for r in range(1, 4):
  for letters in product(CHARSET, repeat=r):
    group = ''.join(letters)
    hash = md5(group.encode()).hexdigest()
    if hash in hashes:
      hashes = [group if h == hash else h for h in hashes]

hashes = ['_' if len(c) == 32 else c for c in hashes]
print(''.join(hashes))
```

Après quelques secondes :

```
Bonjour Marty.

Je viens du futur. Ce message utilise une technique cryptographique DE POINTE pour arriver jusqu'? toi, dans le plus grand des secrets. Je me ?brouillerai pour te faire parvenir la fa?n de le d??iffrer autrement.

Comment vas-tu ? Je suis content de pouvoir prendre des nouvelles de toi. Et Einstein ? Ca fait un moment que je n'ai pas pu voir mon chien ad??..
Mais bon, pour lui c??e doit faire que... 1 jour, 2 heures, 34 minutes environ. En prenant en compte le facteur du ??ai du facteur (cocasse !), j'estime ??lus ou moins 18 minutes la r?eption. Mais j'estime que mes calculs sont assez PRECIS pour ne pas m'etre tro??
Embrasse ta ?? pour moi, nom de Zeus !?

F:\CTF\CYBN 2024>python futur.py
Bonjour Marty.

Je viens du futur. Ce message utilise une technique cryptographique DE POINTE pour arriver jusqu'_ toi, dans le plus grand des secrets. Je me _brouillerai pour te faire parvenir la fa_n de le d__iffrer autrement.

Comment vas-tu ? Je suis content de pouvoir prendre des nouvelles de toi. Et Einstein ? Ca fait un moment que je n'ai pas pu voir mon chien ad__..
Mais bon, pour lui c__e doit faire que... 1 jour, 2 heures, 34 minutes environ. En prenant en compte le facteur du __ai du facteur (cocasse !), j'estime __lus ou moins 18 minutes la r_eption. Mais j'estime que mes calculs sont assez PRECIS pour ne pas m'etre tro__
Embrasse ta __ pour moi, nom de Zeus !_
```

1 jour, 2 heures et 34 minutes, ça fait **`1594 minutes`**.
