Principe:
Analyser les valeurs de filtre des lignes de pixel du IDAT d'un PNG pour y trouver un flag encodé en base 4
Infos (cf menu latéral):
🚩 Flaggué! +100 points gagnés —
💾 Téléchargez les fichiers du challenge
404CTF{7h3r3_15_n07h1n9_b4d_4b0u7_sc4nn3rz}
Le challenge
pngsplit, encore
pngcheck)
IDAT on va donc en sortir les données (c'est à dire retirer leurs headers/footers), les fusionner et les décompresser… et ca ne donne rien de fou (juste un "data")Comprendre le IDAT
On a aussi la taille dans les propriétés du fichier via Nautilus, mais c'est moins drôle
Données extraites
IDAT est égal à [width(=800) 4(RGBA) + 1 (filter)] height(=600)
On constate, à l'oeil, que les chiffres du début sont "bordéliques" et n'ont aucun "4" alors que les chiffres de la fin sont mieux ordonnés, et ont des "4".
Il se peut que le flag soit donc au début, encodé en base 4 (0,1,2,3)
C'est donc un bon indice que les premiers filtres servent sans doute à chiffrer le flag!
Flag
Initialement, le "filtering" des lignes de pixel PNG a été créé pour permettre d'assembler les pixels de la façon la plus efficace pour la compression. Ici, cela a été détourné pour stocker un message. Assez malin et élégant, je trouve
Flag: 404CTF{7h3r3_15_n07h1n9_b4d_4b0u7_sc4nn3rz}