Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2011-12-28 15:56:02 [python] JKP - Bgucore && Hachoir

Hans Cenhalan
membre
Date d'inscription: 2011-12-16
Messages: 86

[python] JKP - Bgucore && Hachoir



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

http://jkp.antisocial.be/images/image-hachoir-bmp.jpg Format Bmp

http://jkp.antisocial.be/images/image-hachoir-gif.jpg Format Gif

http://jkp.antisocial.be/images/image-hachoir-pcx.jpgFormat Pcx



http://jkp.antisocial.be/images/image-hachoir-tga.jpgFormat 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.

http://jkp.antisocial.be/images/image-hachoir-urwid.png


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")



http://jkp.antisocial.be/images/image-hachoir-quantization0-qt1-coeff01-49.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()




http://jkp.antisocial.be/images/image-hachoir-random.jpg


http://jkp.antisocial.be/images/image-hachoir-random-2.jpg

Dernière modification par Hans Cenhalan (2011-12-28 15:57:29)

Hors ligne

 

#2 2011-12-28 15:59:40 Re : [python] JKP - Bgucore && Hachoir

Hans Cenhalan
membre
Date d'inscription: 2011-12-16
Messages: 86

Re: [python] JKP - Bgucore && Hachoir



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

 

#3 2011-12-28 16:55:08 Re : [python] JKP - Bgucore && Hachoir

Olivier
N°4
Lieu: Chalon sur la Saône
Date d'inscription: 2009-04-07
Messages: 1471
Site web

Re: [python] JKP - Bgucore && Hachoir



smilesmilesmilesmilesmile


L'Amour au Peuple !

Hors ligne

 

#4 2011-12-28 17:15:24 Re : [python] JKP - Bgucore && Hachoir

rep
modérateur
Lieu: Toulouse
Date d'inscription: 2008-02-27
Messages: 1444
Site web

Re: [python] JKP - Bgucore && Hachoir



Mais dis donc c'est très très très bien tout ça !

Hors ligne

 

#5 2012-01-25 15:56:33 Re : [python] JKP - Bgucore && Hachoir

Ars Robota
membre
Date d'inscription: 2008-03-23
Messages: 191

Re: [python] JKP - Bgucore && Hachoir



Je vais me faire pourrir... mais il n'y a pas de version sous Win?


myspace.com/arsrobota

Hors ligne

 

#6 2012-01-25 16:01:49 Re : [python] JKP - Bgucore && Hachoir

Hans Cenhalan
membre
Date d'inscription: 2011-12-16
Messages: 86

Re: [python] JKP - Bgucore && Hachoir



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

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024