[Pratique] Bit de poids faible (LSB)
Bonjour à tous et bienvenue dans mon second tutoriel qui complète le précédent sur les bits de poids faible !
On a vu précédemment qu'on pouvais extraire les bits de poids faible d'une image, mais on peut même le faire pour un fichier audio, donc comme je vous ai expliqué comment ça fonctionnais pour les images on va continuer avec cette base
Mais avant de commencer, vous avez du vous poser une question du genre
Comment peut on savoir s'il y a des informations cachées dans le LSB?
Peut-on faire une analyse?
Hé bien évidemment c'est possible !
Je vais vous décrire d'abord une méthode qui consiste à savoir si oui ou non qu'une information soit cachée dans ces bits
Et je vous donnerais un petit script en PHP qui pourra extraire les bits de poids faible d'une image BMP, avec une méthode simple
Sans oublier de faire une démonstration d'un script écrit en python capable de faire une analyse pour savoir si des informations sont cachées ou non dans les bits de poids faible d'une image
On doit savoir que toutes les méthodes de stéganographie à base de LSB altèrent le contenu de l'image, et que même si ce n'est pas visible à l'œil nu, il existe des techniques bien efficaces pour la détection
Le truc c'est que même si les bits de poids faibles sont porteurs de très peu d'informations, ça ne veut pas dire qu'il sont porteurs d'aucune information.
Alors pour commencer on doit séparer les bits de poids faible et les bits de poids fort, pour cela on va vider chaque bit des informations inutiles (bit de poids fort MSB), et seules les bits susceptibles de cacher des informations seront gardés.
Ex:
Pour cela j'utilise le script python dont je vous ai parlé en haut:
Faisons un test sur cette image:
La structure de l'image n'a pas changé, il y va de même pour les bits de poids faible
Essayons de cacher des données dans l'image d'origine:
On vois très bien qu'en haut de l'image que quelque chose a changé, mais pas en bas de l'image, c'est parce que ça suffisait pour cacher ce qu'il y avait dans le fichier texte, et donc le bas n'a pas été touché.
C'est vraiment une des méthodes les plus intéressantes dans la stegano LSB.
Astuce: Vous pouvez tout de même voir si une image contient des données cachées dans le LSB en baissant la correction gamma, avec Photoshop par exemple, CTRL + L et on bouge le point gris vert la droite
Exemple d'extraction
Maintenant je vais vous montrer un petit script PHP pouvant extraire le LSB d'une image BMP:
Cependant si on arrive a altérer une image BMP en mettant des données cachées, on pourra les extraire avec ce script, mais c'est pas toujours gagné, il y a une infinité de méthodes pour cacher des informations dans le LSB et celle qu'utilise ce dernier est une méthode assez simple.
Alors voilà pour vous montrer, j'ai extrait les données LSB d'une image et on obtient ceci:
http://pastebin.com/7n9J9VEf
Je le mets sur pastebin vu que ça prends toute la largeur de la page, ce qui peut vous gêner.
Essayez de convertir du Binaire -> ASCII
Bien évidemment c'est moi qui a caché ce petit texte dans une image, vous ne trouverez pas le même texte dans toutes les images hein :p
J'espère que ce tutoriel vous a plu, et si vous avez d'autres idées ou suggestions n’hésitez pas a me les remettre
-------------------------
Tutoriel écrit par Itcef.
Libre à vous d'en faire ce que vous voulez
On a vu précédemment qu'on pouvais extraire les bits de poids faible d'une image, mais on peut même le faire pour un fichier audio, donc comme je vous ai expliqué comment ça fonctionnais pour les images on va continuer avec cette base
Mais avant de commencer, vous avez du vous poser une question du genre
Comment peut on savoir s'il y a des informations cachées dans le LSB?
Peut-on faire une analyse?
Hé bien évidemment c'est possible !
Je vais vous décrire d'abord une méthode qui consiste à savoir si oui ou non qu'une information soit cachée dans ces bits
Et je vous donnerais un petit script en PHP qui pourra extraire les bits de poids faible d'une image BMP, avec une méthode simple
Sans oublier de faire une démonstration d'un script écrit en python capable de faire une analyse pour savoir si des informations sont cachées ou non dans les bits de poids faible d'une image
On doit savoir que toutes les méthodes de stéganographie à base de LSB altèrent le contenu de l'image, et que même si ce n'est pas visible à l'œil nu, il existe des techniques bien efficaces pour la détection
Le truc c'est que même si les bits de poids faibles sont porteurs de très peu d'informations, ça ne veut pas dire qu'il sont porteurs d'aucune information.
Alors pour commencer on doit séparer les bits de poids faible et les bits de poids fort, pour cela on va vider chaque bit des informations inutiles (bit de poids fort MSB), et seules les bits susceptibles de cacher des informations seront gardés.
Code :
compos = compos & 1; // On supprime les informations inutiles
compos = compos << 7; // On augmente le poids du bit
Ex:
Pour cela j'utilise le script python dont je vous ai parlé en haut:
Code :
itcef# ./lsb.py -h
lsb.py [options] -i input_img -o output_img : le nom de l'image d'entrée et le nom de l'image de sortie
--colors|-c r|g|b : la couleur que l'on veut garder ex: -c r pour garder le Rouge
--bit|-b bit : Le bit qu'on va utiliser
--help|-h : affiche l'aide
--hide|-f : pour cacher des données, ex: -f hide.txt input.png -o output.png
Faisons un test sur cette image:
Code :
itcef# ./lsb.py toxico.png -o toxico_lsb.png
La structure de l'image n'a pas changé, il y va de même pour les bits de poids faible
Essayons de cacher des données dans l'image d'origine:
Code :
itcef# ./lsb.py -f hidden.txt toxico.png -o toxico_hidden.png
itcef# ./lsb.py toxico_hidden.png -o toxico_hidden_lsb.png
On vois très bien qu'en haut de l'image que quelque chose a changé, mais pas en bas de l'image, c'est parce que ça suffisait pour cacher ce qu'il y avait dans le fichier texte, et donc le bas n'a pas été touché.
C'est vraiment une des méthodes les plus intéressantes dans la stegano LSB.
Astuce: Vous pouvez tout de même voir si une image contient des données cachées dans le LSB en baissant la correction gamma, avec Photoshop par exemple, CTRL + L et on bouge le point gris vert la droite
Exemple d'extraction
Maintenant je vais vous montrer un petit script PHP pouvant extraire le LSB d'une image BMP:
Code :
<?php
$contents = str_split(substr(file_get_contents('lsb_hidden.bmp'), 54),4);
for($i = 0; $i < count($contents); $i++){
$base10value = ord($contents[$i]{0});
echo substr(decbin($base10value), -1);
$base10value = ord($contents[$i]{1});
echo substr(decbin($base10value), -1);
$base10value = ord($contents[$i]{2});
echo substr(decbin($base10value), -1);
}
?>
Cependant si on arrive a altérer une image BMP en mettant des données cachées, on pourra les extraire avec ce script, mais c'est pas toujours gagné, il y a une infinité de méthodes pour cacher des informations dans le LSB et celle qu'utilise ce dernier est une méthode assez simple.
Alors voilà pour vous montrer, j'ai extrait les données LSB d'une image et on obtient ceci:
http://pastebin.com/7n9J9VEf
Je le mets sur pastebin vu que ça prends toute la largeur de la page, ce qui peut vous gêner.
Essayez de convertir du Binaire -> ASCII
Bien évidemment c'est moi qui a caché ce petit texte dans une image, vous ne trouverez pas le même texte dans toutes les images hein :p
J'espère que ce tutoriel vous a plu, et si vous avez d'autres idées ou suggestions n’hésitez pas a me les remettre
-------------------------
Tutoriel écrit par Itcef.
Libre à vous d'en faire ce que vous voulez
CyberSee
Admin fondateur de N-PN Messages : 1,721 Sujets : 287 Points: 157 Inscription : Jan 2012 |
[Pratique] Bit de poids faible (LSB)
Très bon tuto bravo :-)
|
Luxerails
Bon membre Messages : 267 Sujets : 6 Points: 67 Inscription : Aug 2011 |
[Pratique] Bit de poids faible (LSB)
A noter que le code php à la fin pour extraire les bits de poids faible ne marche que dans un BMP. Pourquoi ? Le bmp code ses couleurs en clair dans le raw byte, contrairement au PNG par exemple. Il est tout à fait possible de cacher des bits de poids faible dans du PNG de cette façon, mais il va falloir passer par une lib d'image (sous PHP gd par exemple.).
|
itcef
Membre actif Messages : 77 Sujets : 4 Points: 2 Inscription : Oct 2011 |
[Pratique] Bit de poids faible (LSB)
Effectivement, merci de la précision
Mieux vaut être faux que vrai.
|
supersnail
Éleveur d'ornithorynques Messages : 1,609 Sujets : 71 Points: 465 Inscription : Jan 2012 |
[Pratique] Bit de poids faible (LSB)
Bon tuto, continue comme ça, dude
|
oxoo
Newbie Messages : 11 Sujets : 1 Points: 0 Inscription : Nov 2011 |
[Pratique] Bit de poids faible (LSB)
En fin de compte, mieux vaut faire ton XOR sur les octets, vu que si y'a une analyse sur le fichier, au moins le mec trouvera pas l'original sur images google . Après, j'suis sûr que certains formats de fichiers utilisent des paddings qui pourraient se révéler bien utiles en fin de compte...
|
itcef
Membre actif Messages : 77 Sujets : 4 Points: 2 Inscription : Oct 2011 |
[Pratique] Bit de poids faible (LSB)
Le format BMP par exemple.
Mieux vaut être faux que vrai.
|
Luxerails
Bon membre Messages : 267 Sujets : 6 Points: 67 Inscription : Aug 2011 |
[Pratique] Bit de poids faible (LSB)
Oui, d'ailleurs on utilise souvent le padding bmp pour cacher des informations aussi (voir même des octets réservés inutilisés dans un pixel, en sachant qu'un pixel = 4 octets dont un qui devrait toujours être nul), mais bon là l'information cachée est un peu en clair dans le fichier, c'est pour ça que je préfère le lsb personnellement :p (par exemple, si on veut cacher un png dans du padding bmp, si le padding bmp restant d'une ligne est de quatre caractères, on peut voir directement par exemple en clair le début d'un PNG, soit ‰PNG)
|
oxoo
Newbie Messages : 11 Sujets : 1 Points: 0 Inscription : Nov 2011 |
[Pratique] Bit de poids faible (LSB)
Oui, mais pour moi, l'intérêt de la ségano n'est pas de cacher de l'info en clair, mais de l'info chiffrée . Après, modifier un padding c'est assez grillé (lsb aussi apparemment). Le mieux c'est sûrement de modifier un binaire, c'est moins "flag", je pense.
|
Luxerails
Bon membre Messages : 267 Sujets : 6 Points: 67 Inscription : Aug 2011 |
[Pratique] Bit de poids faible (LSB)
Oui, le mieux c'est de combiner la crypto et la stégano
|