Categories
Photography Python Security Steganography

Photo libre d’Irlande

Petite pause avec la stéganalyse pour tester quelque chose d’un peu différent.

import urllib
import base64
from PIL import Image

def bs(s):
    """
    Converts an int to its bits representation as a string of 0's and 1's.
    """
    return str(s) if s<=1 else bs(s>>1) + str(s&1)

def reveal(img):
    """
    Find a message in an image
    (with the LSB technique).
    """
    width, height = img.size
    bits = ""
    for row in range(height):
        for col in range(width):
            r, g, b = img.getpixel((col, row))
            bits += bs(r)[-1] + bs(g)[-1] + bs(b)[-1]
            if int(bits[-8:], 2) == 126:
                list_of_string_bits = ["".join(list(bits[i:(i+8)])) for i in range(0, len(bits)-8, 8)]
                list_of_character = [chr(int(elem, 2)) for elem in list_of_string_bits]
                return "".join(list_of_character)
    return ""

if __name__ == '__main__':
    # Point of entry in execution mode
    urllib.urlretrieve("http://blog.cedricbonhomme.org/wp-content/uploads/2014/08/surprise.png", "./surprise.png")
    img = Image.open("./surprise.png")
    surprise = reveal(img)
    data = base64.b64decode(surprise)
    with open("./surprise", "w") as f:
        f.write(data)

Le décodage pourra prendre deux ou trois minutes. Une fois le script terminé, faites un petit file ./surprise. Et vous saurez déjà quoi en faire.

Tout ce que je peux vous dire. 15 Mo is enough! Largement!

Mmm oui, le fichier téléchargé est une photo sous licence Creative Commons. Nous dirons donc que ce fichier peut être partagé.

2 replies on “Photo libre d’Irlande”

Ils sont amusants tes articles en ce moment. Et en effet, chiffrer le message semble de bon sens… mais du coup, pourquoi s’embêter à le cacher dans une image ?

Bref, continue de nous (me) faire découvrir les méthodes de stégano. Tu pourrais même compiler le tout en un cours, avec exemples en python !

(Hop là, au passage un lien pour me faire monter chez google… 😉 )

Ils sont amusants tes articles en ce moment. Et en effet, chiffrer le message semble de bon sens… mais du coup, pourquoi s’embêter à le cacher dans une image ?

Pour le plaisir, prendre le temps de temps en temps, faire un peu de Python et de Steno…

En fait je chiffre en base 64 afin d’avoir des caractères de tel sorte que pour dissimuler j’ai simplement à donner la chaîne en entrée à ce script (lsb-s) (le même que dans les précédents posts).
Je voudrais développer un ensemble de scripts modulaires qui “s’emboîtent”. Maintenant je peux cacher des binaires, donc c’est bon.

Et ce qui est une bonne nouvelle, c’est que le script lsb-s cache les données uniquement sur le bit de poids faible. Je pourrais utiliser les deux derniers bits si je voulais. Et là une image .png de 7Mo me suffirait largement. Et je crois qu’en touchant les deux derniers bits c’est toujours invisible à l’oeil.

Pour le cours je n’ai jamais été super pédagologique. Au pire le wiki pourrait contenir plus d’informations intéressantes.

Tiens, hier j’ai dis à ma copine que j’ai fais une fonction qui transforme des strings en bits. Je savais qu’elle allait délirer 😉

Comments are closed.