Hachoir supporte maintenant l'édition de fichier : il est possible de modifier la valeur d'un champ, de supprimer un champ ou encore d'en insérer. hachoir-strip est un programme d'exemple exploitant cette possibilité : il va supprimer tous les champs qu'il juge inutile, c'est-à-dire les méta-données, les octets de bourrage, index pour les vidéos, etc. Il peut être utilisé pour rendre un fichier anonyme ou en réduire légèrement sa taille.
Autre amélioration notable : la possibilité d'ouvrir des fichiers corrompus et/ou tronqués. Dans la mesure du possible, le parseur va tenter de corriger l'erreur puis de continuer son travail. Cette version apporte également la possibilité d'utiliser Hachoir sur un pipe, ce qui permet de parser un flux de données au fur et à mesure (par ex. : un flux réseau).
Pour stocker le texte, Hachoir utilise maintenant uniquement Unicode, ce qui évite d'avoir à se soucier du jeu de caractères. Cette version fonctionne également sur toutes les implémentations de Python (CPython, Stackless, pypy, IronPython, Jython), même si des retouches mineures sont parfois nécessaires. Pour finir, une interface graphique basée sur wxPython est en cours de développement. Liste complète des programmes basés sur Hachoir :
- hachoir-console : visualisation en mode console ou exportation au format XML
- hachoir-grep : rechercher une sous-chaîne dans des fichiers binaires, et ce indépendamment du jeu de caractères
- hachoir-metadata : extraction de méta-données
- hachoir-strip : suppression des données inutiles dans un fichier pour le rendre anonyme et en réduire la taille
- hachoir-urwid : visualisation de fichier binaire
- hachoir-wx : interface graphique de visualisation
hachoir-wx permettra d'aider un parseur à la souris en corrigeant le type et la taille des champs. Ce programme sera donc très utile pour la rétro-ingénierie de format de fichier.
Il devrait, à terme, permettre également de modifier un fichier pour, par exemple, de corriger une faute d'orthographe dans un commentaire d'une archive zip/gzip ou simplement le supprimer.
Aller plus loin
- Hachoir.org (60 clics)
- Page de hachoir-parser (29 clics)
- Page de hachoir-metadata (15 clics)
- Page de hachoir-urwid (11 clics)
# Intéréssant
Posté par Florian.J . Évalué à 2.
Non pas que je sois anti-console, mais dans ce genre de manipulations, ça doit être bien plus souple.
Est ce que ça peut, par exemple modifier les chaînes de caractères dans un binaire ?
[^] # Re: Intéréssant
Posté par Victor STINNER (site web personnel) . Évalué à 3.
http://hachoir.org/wiki/HachoirEditor
Est ce que ça peut, par exemple modifier les chaînes de caractères dans un binaire ?
Il faut avoir un parseur pour le format que tu veux éditer. Mais une fois que le parseur est écrit, on manipule des objets Python qui vont s'occuper de convertir les données dasn le bon format. Pour une chaîne de caractère, Hachoir s'occupe d'ajouter le préfixe ou le suffixe (pour une chaîne C : ajoute "\0" à la fin, pour une chaîne Pascal : ajoute la longueur en préfixe) et je crois qu'il s'occupe aussi des charsets (ou si ce n'est pas le cas, il le fera très vite :-)). Pour les nombres, il va sérialiser les nombres selon la taille du champ et l'endian. Une liste incomplète et pas à jour des types peut se trouver là :
http://hachoir.org/wiki/WriteYourParser
Haypo
[^] # Re: Intéréssant
Posté par cosmocat . Évalué à 3.
Mais j'ai remarqué que ce logiciel, c'est du très bon!! J'en avais profité pour parser plein d'autres fichiers. Vraiment Genial!
Merci pour tout ce que tu fais...
[^] # Re: Intéréssant
Posté par Victor STINNER (site web personnel) . Évalué à 3.
Non, j'ai tardé très longtemps pour développer la partie édition. En fait, nous avons d'abord terminé la partie "lecture". Ensuite, j'ai réfléchi très fort pour trouver un algo potable qui fonctionnerait avec Hachoir. Les contraintes sont assez lourdes : il faut pouvoir éditer un fichier qui est chargé partiellement en mémoire... J'avais tenté une première implémentation il y a quelques mois, mais elle était loin d'être concluante.
Pour l'édition d'un fichier dans Hachoir 0.6, seules les modifications sont stockées : nouvelles valeurs, champs ajoutés et champs supprimés. La lecture d'un fichier est donc plus "lente" (bon, ça reste du O(1), sauf pour la lecture de l'adresse qui est en O(n) <= à vérifier tout ça), mais par contre c'est plus flexible et plus rapide finalement à mon avis. L'empreinte mémoire est assez faible... ce qui déjà rend l'édition de gros fichier (1 Go ou plus) possible... et permettra à court terme d'implémenter un historique pour permettre d'annuler des modifications (comme l'historique Gimp).
Autre idée que j'ai eu récement : implémenter un hachoir-diff qui va comparer deux fichiers et noter les champs ajoutés / supprimés / édités. Il faudrait que je trouve un algo de comparaison de fichiers binaires.
Haypo
[^] # Re: Intéréssant
Posté par benoar . Évalué à 1.
Tu seras peut-être intéressé par ça :
http://www.daemonology.net/bsdiff/
[^] # Re: Intéréssant
Posté par Thomas Douillard . Évalué à 2.
[^] # Re: Intéréssant
Posté par Victor STINNER (site web personnel) . Évalué à 2.
Haypo
[^] # Re: Intéréssant
Posté par Thomas Douillard . Évalué à 2.
En tout cas, un algo de diff binaire générique est "à plat" à priori. Il doit tenter d'aligner au mieux les sous-séquences communes sources et cibles) et ne tient pas du tout compte de la structure arborescente de ton fichier. Dans ce cas, pas besoin de hachoir.
[^] # Re: Intéréssant
Posté par Bonnefille Guilhem (site web personnel) . Évalué à 4.
Cet outil, contrairement à Hachoir, est en Java et dispose d'une interface graphique. La description d'un format ("structure" dans le vocabulaire de DataWorkshop) se fait à la souris.
Je manque un peu de temps pour faire les évolutions que j'ai en tête, mais je promet d'être hyper réactif concernant l'intégration de toute contribution.
Vous êtes tous les bienvenus.
Page du projet : https://gna.org/projects/dataworkshop
[^] # Re: Intéréssant
Posté par Victor STINNER (site web personnel) . Évalué à 2.
J'aimerai beaucoup travailler avec pyConstruct (projet très similaire à Hachoir) et DataWorkshop, en particulier, il faudrait partager du code. Pourrais-tu me contacter par Jabber ? http://www.haypocalc.com/wiki/Victor_Stinner pour toutes mes coordonnées.
L'objectif à long terme, si c'est réalisable, serait de fédérer nos efforts pour définir une syntaxe commune pour les parseurs. Le but étant de pouvoir à partir de ça générer des structures C, du code Java, Python, etc. J'ai tout noté ici :
http://hachoir.org/ticket/32
Haypo
# Détection de fichiers DRMisés
Posté par Benoît Sibaud (site web personnel) . Évalué à 4.
[^] # Re: Détection de fichiers DRMisés
Posté par Victor STINNER (site web personnel) . Évalué à 2.
Mais d'une manière générale, Hachoir expose simplement les informations contenues dans un fichier, et il les expose toutes (enfin, il faut un bon parseur pour ça, et écrire un bon parseur nécessite de la bonne documentation). Donc, je pense que très certainement si DRM il y a, Hachoir le verra :-)
Haypo
[^] # Re: Détection de fichiers DRMisés
Posté par arnaudus . Évalué à 1.
[^] # Re: Détection de fichiers DRMisés
Posté par Victor STINNER (site web personnel) . Évalué à 3.
Quels formats possèdent des DRM ? WM* et MOV ? Perso, je connais juste le flag "copyright" des MP3 :-)
Haypo
[^] # Re: Détection de fichiers DRMisés
Posté par Benoît Sibaud (site web personnel) . Évalué à 2.
WM*, MOV, MPG4, bureautique MS Office, PDF (genre restriction sur l'impression, le copier-coller), etc.
# SWF
Posté par Cyber Kobold (site web personnel) . Évalué à 1.
Grosso modo ça resemble à un sommaire en flash qui renvoie vers des appli en flash le tout en un seul fichier.
Hachoir est-il capable de "hacher" le fichier et de séparer les différentes applis flash.
Le but étant de faire plein de petits swf lisibles ensuite depuis n'importe quel navigateur.
[^] # Re: SWF
Posté par Victor STINNER (site web personnel) . Évalué à 2.
Hachoir 0.6 n'a pas de parseur SWF, mais j'en ai développé un très récement dans la version trunk de hachoir-parser. Voir mes journaux :
http://linuxfr.org/~haypo/23051.html
http://linuxfr.org/~haypo/23039.html
Contacte la liste de diffusion (ou contacte moi directement) si tu veux plus d'infos. http://hachoir.org/wiki/Contact
Haypo
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.