Aujourd'hui on on résout le challenge Bring weakness du AlexCTF (2017) qu'on a recrée dans le post précédent.

On sait que le challenge demande de faire 10 prédictions correctes contre un algorithme pseudo aléatoire. Le mot clé ici c'est "pseudo", en effet si l'on demande suffisamment de prédictions au PRNG, il arrive un moment ou l'on "reboucle" et le PRNG fournit une séquence déjà connue.

Toute l'astuce de ce challenge est donc de demander au PRNG suffisamment de valeurs afin de reconstruire la boucle de génération ou une partie de cette boucle (car on n'a besoin de seulement 10 valeurs juste successives).

Pour ce faire, on va créer un programme en python, dont voici le flow chart.

Plutôt simple non ?

L'important dans cet algorithme est le calcul du taux d'accroissement. Ce taux d'accroissement représente l'évolution de la connaissance de la séquence du générateur aléatoire. Plus il est important plus on a découvert de nouvelles valeurs de la séquence. C'est lui qui est en charge d’arrêter l'acquisition des données quand il considère qu'il connait suffisamment de valeurs.

Dans mon exemple je me contente de faire la moyenne du nombre d'ajout sur les 50 dernières entrées. Il n'existe pas de formule magique pour déterminer sur combien d'échantillon faire la moyenne, c'est un processus empirique.

Et voilà le résultat !

Le code complet est ici.

Social et Media

Comme toujours je suis disponible sur Twitter et cie, si vous avez des questions, des remarques, des suggestions etc. N’hésitez pas !

Twitter: @GhostAgs

Discord: hackraw