URL: https://linuxfr.org/users/vstinner/journaux/hachoir-version-2005年12月11日 Title: Hachoir version 2005年12月11日 Authors: Victor STINNER Date: 2005年12月11日T09:23:24+01:00 Tags: debian Score: 0 Après deux mois de développement, j'ai fini de coder mon idée d'outil permettant de lire n'importe quel flux binaire : le projet "Hachoir". C'est un programme Python offrant une interface GTK2. La liste des formats de fichier supportés est longue: images JPEG, GIF, XCF et PNG ; archive ZIP, GZIP, TAR, BZ2, Debian et Arch ; email ; document PDF ; etc. Il y a également de nombreux types de "flux" supportés : fichier, chaîne de caractère, décompression gzip / bz2 / deflate, décodeur base64, etc. Les formats sont écrits dans des plugins chargés au lancement (vive Python). Le type MIME du flux est détecté pour le choix du plugin. Là où ça devient intéressant, c'est que les fichiers contenus dans une archive / un email sont à leur tour analysés, etc. On peut donc extraire la miniature d'une image JPEG contenue dans une archive Tar compressée dans un fichier Gzip. Au fur et à mesure, j'apprend beaucoup de choses sur les formats binaires. Les archives .tar gaspillent beaucoup de place : chaque fichier (avec son entête TAR) est aligné sur 512, et l'archive se termine par un entête nul. Je viens de découvrir qu'une image JPEG embarque une autre image JPEG dans les informations EXIF. Cette image étant en fait une miniature. Le truc marrant est qu'elle n'est pas toujours à jour :-) Le format Arch (utilisé dans les .deb) est en fait un format texte qui embarque des données binaires (comme le PDF d'ailleurs). Le projet est encore très expérimental. Ne vous étonnez donc pas d'une assertion manquée avec un "backtrace" kilométrique. Il y a également des plugins en développement comme les parseurs RPM, ASN1, ELF et PE. Il est possible d'agir sur l'interprétation pour la modifier, mais c'est à manipuler avec précaution (au pire le programme plante mais jamais il ne touchera à vos fichiers). Évitez les gros fichiers car tout est chargé en mémoire, et lorsqu'on a une dizaine de niveau de profondeur, ça commence à faire du monde. Mais j'essaye petit à petit de modifier le programme pour faire une analyse "à la volée". Exemple : les données ne sont réellement lues dans le fichier que lorsqu'on y accède. Informations sur le projet avec lien pour le télécharger : [http://www.haypocalc.com/wiki/Hachoir](http://www.haypocalc.com/wiki/Hachoir) Ancien journal présentant le hachoir : [http://linuxfr.org/~haypo/19974.html](http://linuxfr.org/~haypo/19974.html) --- Le but du projet n'est pas de supporter tous les formats, mais plutôt de faciliter le support de nouveaux formats. J'ai essayé de créer des outils simplifiant au maximum la tâche du développeur. J'ai aussi noté pas mal d'idée sur le site web du Hachoir. Exemples : ajouter un désassembleur, supporter le déchiffrement, écrire une version pour FUSE, KIO, Gnome-VFS et/ou Hurd, etc. Haypo