UfoCTF 2013 | aliensgif [Write Up]

Dans cette épreuve, nous avions une image au format gif.

_aliensgif

Commençons d’abord par extraire les 3 frames dans de nouvelles images.
Pour cela, nous avons utilisé l’excellent Stegsolve de Caesum, qui nous permet, entre autres, de visualiser les différentes frames d’un GIF et de les sauvegarder.

Nous avons donc ces 3 images :

frame1 frame2 frame3

Un peu d’analyse classique nous révèle du LSB en haut à gauche des trois images.
Dans la première image, le LSB se cache dans la composante rouge, la composante verte pour la deuxième, et la bleue pour la troisième.
Ce petit script python permet d’extraire ce LSB dans l’ordre Rouge -> Vert -> Bleu, de gauche à droite.

import Image
r = Image.open('frame1.bmp').convert('RGB')
g = Image.open('frame2.bmp').convert('RGB')
b = Image.open('frame3.bmp').convert('RGB')

bin = ''
for x in range(r.size[0]):
	bin += str(r.getpixel((x, 0))[0] & 1)
	bin += str(g.getpixel((x, 0))[1] & 1)
	bin += str(b.getpixel((x, 0))[2] & 1)

print bin
01010100011010000110010100100000011001100110110001100001011001110010000001101001
01110011001000000111001101101111011011110110111001011111011101110110010101011111
01110111011010010110110001101100010111110110010001100101011100110111010001110010
01101111011110010101111101110100011010000110010101101101111111111111111111 [...]

Il ne reste plus qu’à décoder la chaine binaire extraire et valider le flag.

The flag is soon_we_will_destroy_them

Enjoy!

2 réflexions au sujet de « UfoCTF 2013 | aliensgif [Write Up] »

  1. Salut,
    c’est un write_up fraîchement intéressant, je vous en remercie :).
    Cependant j’aurai une question :
    Pour quelle raison, lorsque en rajoutant avec une boucle for sur la img.size[1] ‘est a dire la hauteur, je n’obtiens pas le même résultats.

    voici un exemple pour illustrer mes propos :

    for x in range(img.size[0]):
        for y in range(img.size[1]):
            lsb += str(img.getpixel((x, y))[0] & 1)
    

    Merci, bien cordialement.
    & keep pwning guys 😉

    1. Salut M4z,

      A priori, tu fais deux boucles toi (for x et for y), ce qui va « balayer » l’image de gauche à droite sur toute sa surface. Or, le script dans le writeup ne fait pas cela. Il balaye juste UNE SEULE FOIS les images de gauche à droite en restant sur la même ligne 😉

      J’espère que mon explication est correcte et te seras utile !

Laisser un commentaire