Hachoir version 0.6

Posté par (page perso) . Modéré par j.
Tags :
0
29
oct.
2006
Python
Un an après la naissance du projet, Hachoir sort dans sa version 0.6. C'est une suite d'outils développés dans le langage Python ayant pour but de manipuler facilement un fichier binaire tel qu'un arbre de champs typés. Le projet a été éclaté en plusieurs composants dont les principaux sont : hachoir (c½ur du système), hachoir-parser (quarantaine de parseur des formats les plus courants), hachoir-metadata (extraction de méta-données) et hachoir-urwid (visualisation de fichier binaire).

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.
  • # Intéréssant

    Posté par . Évalué à 2.

    Ca commence à devenir drôlement intéressant, mais je vais peut être attendre la sortie de l'interface.
    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 (page perso) . Évalué à 3.

      Oui, c'est vrai que pour l'instant le seul moyen d'édition un fichier est d'attaquer l'API en Python. Il y a quelques exemples sur la page :
      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 . Évalué à 3.

        J'avais installé Hachoir 0.5 pour modifier une valeur dans un fichier jpeg. Bon finalement je l'avais pas fait car je crois que c'était pas possible avec cette version.

        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 (page perso) . Évalué à 3.

          J'avais installé Hachoir 0.5 pour modifier une valeur dans un fichier jpeg. Bon finalement je l'avais pas fait car je crois que c'était pas possible avec cette version.

          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 . Évalué à 1.

            Il faudrait que je trouve un algo de comparaison de fichiers binaires.

            Tu seras peut-être intéressé par ça :
            http://www.daemonology.net/bsdiff/
          • [^] # Re: Intéréssant

            Posté par . Évalué à 2.

            Je crois qu'il existe des algos de diff xml. L'idée me semble relativement semblable : si je me trompe pas, Hachoir manipule un arbre, comme XML.
            • [^] # Re: Intéréssant

              Posté par (page perso) . Évalué à 2.

              Hachoir ne développement jamais toutes les noeuds de l'arbre pour la simple et bonne raison que l'empreinte mémoire est au moins de 10x la taille du fichier. Alors pour faire un diff d'une image ISO par exemple, c'est pas trop possible :-) Il serait mieux d'avoir un diff binaire pour de localiser les modifications dans un des deux fichiers.

              Haypo
              • [^] # Re: Intéréssant

                Posté par . Évalué à 2.

                Je pense pas que ce type d'algo nécessite forcément de stocker tout l'arbre en mémoire, on doit pouvoir s'en sortir avec un parcours 'à la demande'.

                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 (page perso) . Évalué à 4.

      Comme à chaque annonce concernant Hachoir, j'en profite pour faire un peu de pub pour un autre outil de la même famille : DataWorkshop.
      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 (page perso) . Évalué à 2.

        Ben tiens justement ! J'avais essayé de le lancer, mais alors punaise... impossible de satisfaire ses dépendences. J'ai installé 4 ou 5 bibliothèques Java XML, mais j'ai pas trouvé la bonne.

        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 (page perso) . Évalué à 4.

    Est-il possible avec hachoir-metadata de savoir si un fichier multimédia ou bureautique est lesté d'un Dispositif de Contrôle de l'Usage (DCU) / Mesure Technique de Protection (MTP) / Digital Rights/Restrictions Management (DRM) ? Et si non, est-ce envisageable et/ou envisagé ?
    • [^] # Re: Détection de fichiers DRMisés

      Posté par (page perso) . Évalué à 2.

      Je n'ai jamais rencontré de tels formats. En même temps, j'achète des cds audios, je n'ai jamais acheté de musique en ligne à part sur allofmp3.com (qui vend de la musique sans DRM). Il faudrait écrire un parseur pour ces formats là.

      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 . Évalué à 1.

        D'un autre côté, comme c'est illégal de produire un outil de contournement des DRM, ça me parait tangeant de développer quelque chose qui va dans ce sens... même si c'est "juste pour regarder comment le fichier est fait M le juge"...
        • [^] # Re: Détection de fichiers DRMisés

          Posté par (page perso) . Évalué à 3.

          Hum, je pense que le coutournement d'un DRM demande des algos de déchiffrement. Je ne pense pas à ça, mais à montrer "tiens, ici y'a des trucs chiffrés", point. C'est légal en France ça.

          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 (page perso) . Évalué à 2.

            > Quels formats possèdent des DRM ? WM* et MOV ? Perso, je connais juste le flag "copyright" des MP3 :-)

            WM*, MOV, MPG4, bureautique MS Office, PDF (genre restriction sur l'impression, le copier-coller), etc.
  • # SWF

    Posté par (page perso) . Évalué à 1.

    je dispose d'un "gros" fichier de 11 Mo qui contient une série d'aplications flash à priori indépendantes.
    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.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.