Utilisation de la librairie Hachoir
Hachoir is a Python library that allows to view and edit a binary stream field by field. In other words, Hachoir allows you to "browse" any binary stream just like you browse directories and files. A file is split in a tree of fields, where the smallest field is just one bit. There are other fields types: integers, strings, bits, padding types, floats, etc. Hachoir is the French word for a meat grinder (meat mincer), which is used by butchers to divide meat into long tubes; Hachoir is used by computer butchers to divide binary files into fields.
Hachoir is composed of the parser core (hachoir-core), various file format parsers (hachoir-parser), and other peripheral programs. For example, you can use hachoir-metadata to extract information from your favourite photos or videos. Hachoir also allows you to edit files (of supported formats) without the original (often proprietary) program that was used to create them.
Installation de
la librairie Hachoir
---]]] http://hachoir.org/index.html
Il est nécessaire d'installer hachoir-core,
hachoir-metadata, hachoir-urwid et hachoir-editor pour que les scripts
d'exemple fonctionnent.
Se placer en ligne de commande dans chaque répertoire et lancer python
setup.py install en tant que root.
( Le fichier manquant nécessaire à l'installation de hachoir-editor à renommer en py)
Première utilisation possible
Dans le répertoie hachoir-tools se trouve un fuzzer.
L'idée est de détourner l'usage purement sécurité vers un usage ludique en
créant des images aléatoires, buggées.
Il est possible de placer les images sources sous plusieurs
formats ( [url=http://hachoir.org/hachoir-parser.html]tous les
formats possibles[/url] ) afin d'obtenir des résultats différents.
J'ai modifié le script pour pouvoir créer les images buggées ( remplacer le fichier file_fuzzer.py par celui ci )
./stress.py directorysource
Format Bmp
Format Gif
Format Pcx
Format Tga
Deuxième utilisation possible
Il est possible de modifier à la main les paramètres de nombreux
fichiers et par exemple les paramètres d'un fichier Jpeg.
Tous ces champs
sont lisibles grâce à l'utilitaire hachoir-urwid.
Code Python:
from hachoir_parser import
createParser
from hachoir_editor import
createEditor
from hachoir_core.field import
writeIntoFile
parser=createParser(u"lena.jpg")
editor=createEditor(parser)
editor["huffman[0]/content/huffman_table[0]/count[9]].value=
15
writeIntoFile(editor, u"resultat.jpg")
Troisième utilisation possible
Création de plusieurs images en mettant tous les paramètres à 0
Code Python:
[i]#!/usr/bin/python
from hachoir_core.cmd_line import (getHachoirOptions,
configureHachoir, unicodeFilename)
from hachoir_core.stream import InputStreamError, FileInputStream
from hachoir_core.i18n import _
from hachoir_parser import guessParser, HachoirParserList,createParser
from hachoir_editor import createEditor
from hachoir_core.field import writeIntoFile
from hachoir_urwid import exploreFieldSet
from hachoir_urwid.version import VERSION, WEBSITE
from optparse import OptionGroup, OptionParser
#import hachoir_core
import sys
from random import choice
import re
li=[]
def displayTree(tree):
for field in tree:
if "image_data" in field.path:
break
li.append(field.path)
if field.is_field_set: displayTree( field )
def main():
i=0
k=0
stream=FileInputStream(unicodeFilename(sys.argv[1]))
parser=guessParser(stream)
displayTree(parser)
while k<=4:
for item in li:
pattern=r'(start_image$|app0$|content$|jfif$|photoshop|signature$|adobe|quantization\[0\]$|qt\[0\]|qt\[1\]|start_frame$|component\[0\]$|component\[1\]$|component\[2\]$|huffman\[0\]$|restart_interval$|huffman_table\[0\]$|huffman_table\[1\]$|huffman_table\[2\]$|huffman_table\[3\]$|start_scan\[0\]$)'
if re.search(pattern, item):
print ''
else:
parser2=createParser(unicodeFilename(sys.argv[1]))
editor=createEditor(parser2)
editor[item].value=0
fichier=res-"+str(k)+"-"+str(i) + ".jpg"
unicodefichier=unicode(fichier, 'utf-8')
#print unicodefichier
writeIntoFile(editor, unicodefichier)
i=i+1
k=k+1
if __name__ == "__main__":
main()
Création de plusieurs images en mettant des valeurs en Random
Code Python:
#!/usr/bin/python
from hachoir_core.cmd_line import (getHachoirOptions,
configureHachoir, unicodeFilename)
from hachoir_core.stream import InputStreamError, FileInputStream
from hachoir_core.i18n import _
from hachoir_parser import guessParser, HachoirParserList,createParser
from hachoir_editor import createEditor
from hachoir_core.field import writeIntoFile
from hachoir_urwid import exploreFieldSet
from hachoir_urwid.version import VERSION, WEBSITE
from optparse import OptionGroup, OptionParser
#import hachoir_core
import sys
from random import choice
from random import randint
import re
li=[]
def displayTree(tree):
for field in tree:
if "image_data" in field.path:
break
li.append(field.path)
if field.is_field_set: displayTree( field )
def main():
j=0
while j<=1000:
i=randint(0,255)
k=randint(0,65555)
stream=FileInputStream(unicodeFilename(sys.argv[1]))
parser=guessParser(stream)
displayTree(parser)
item=choice(li)
parser2=createParser(unicodeFilename(sys.argv[1]))
editor=createEditor(parser2)
editor[item].value=i
fichier=res-"+str(k)+".jpg"
unicodefichier=unicode(fichier, 'utf-8')
#print unicodefichier
writeIntoFile(editor, unicodefichier)
j=j+1
if __name__ == "__main__":
main()
Dernière modification par Hans Cenhalan (2011-12-28 15:57:29)
Hors ligne
la page html pour ceux qui veulent les scripts propres
http://jkp.antisocial.be/bgucore-hachoir.html
à noter le site hachoir est un des plus pénibles que je connaisse
avec des appels à la wayback machine automatiques pour recréer des pages disparues.
Dernière modification par Hans Cenhalan (2011-12-28 16:00:43)
Hors ligne
Je vais me faire pourrir... mais il n'y a pas de version sous Win?
Hors ligne
je suis désolé
cela devrait etre possible mais j'ignore comment installer des librairies python sous Win.
peut etre en les placant dans le répertoire de c:/python26/
bon courage
Hors ligne
Pages: 1