Principe:
Brute-forcer la seed d'un 'rand()' pour reproduire les mêmes valeurs de la suite aléatoire (non-crypto safe) et s'en servir pour déchiffrer un PDF donnant le flag
Infos (cf menu latéral):
🚩 Flaggué! +1000 points gagnés —
💾 Téléchargez les fichiers du challenge
404CTF{W0w_p4s_Tr3S_r4nD0m_T0ut_c4}
Le challenge

Un chiffrement "random"
D'après la source en C fournie, une seed est choisie au hasard et sert à générer des valeurs aléatoires qui permettent ensuite de chiffrer le document (que l'on doit déchiffrer). Comme cette fonction aléatoire n'est pas crypto-safe, elle est répétable (à partir de sa seed). On va donc essayer de retrouver cette seed
Testons
D'après le nom du fichier flag.pdf.enc
, le document original est un PDF: on va donc se faire un jeu de test (pour trouver la méthode de déchiffrement) avec un PDF

424242
) et on chiffre un document de testNotre but va ensuite d'être de retrouver cette seed et de déchiffrer notre document de test

Cette méthode marche car le début d'un PDF est toujours %PDF
(la version, ensuite, peut différer). S'il n'y avait pas eu ce "magic number", il aurait fallut trouver une autre marqueur constant pour valider notre seed brute-forcée (un IEND
à X
bytes de la fin du fichier par exemple)


char
: ça marche!
Le brute-forceur nous renvoie ici deux candidats, qui sont en fait le même 424242
au signe près (2**31 - 2147059406 = 424242
)

int32
)Le vrai fichier

270701183
Je n'ai pas trouvé de logique à cette seed (je m'attendais à un 13374242
ou un truc du genre)


Flag

Oui, ca ne sert à rien, mais je me suis quand même amusé à reproduire le même "Wordart" dans libreoffice (ou un truc similaire en tous cas)!
Flag: 404CTF{W0w_p4s_Tr3S_r4nD0m_T0ut_c4}