Journal Projet Hachoir

Posté par  (site web personnel) .
Étiquettes : aucune
0
15
nov.
2005
J'ai écrit un p'tit programme en Python permettant de découper un flux binaire en rondelles, d'où son nom : le hachoir. Le projet est très jeune, sûrement bogué et peu intéressant pour l'instant. Mais je souhaite quand même communiquer dessus :
http://www.haypocalc.com/wiki/Hachoir

Il peut servir à tout et n'importe quoi. Perso, je m'en sers pour voir comment sont constitués les fichiers que je manipule tous les jours. Là je m'en sers pour analyser un PDF, voir comment il est organisé. Il m'a aidé à comprendre pourquoi deux CV avec le même texte mais des polices différentes ont des tailles très différentes : en fait, le PDF emporte TOUTE la police TTF, pas juste les glyphes utiles.

À terme, le programme sera capable de reconstituer des données qui sont stockées à divers endroits (ex: paquets réseaux ou archive zip/rar). Et le programme sera capable de se promener dans un fichier qui contient un fichier qui contient un fichier qui (...). Exemple : on écoute le réseau => (moulinette qui extrait les données de TCP) => fichier zip => (deflate) => image => (...)

On peut déjà entrer faire un truc du genre : gzip => tar => fichier (décompression à la volée, code cracra pour l'instant : tout est mis en mémoire). Reste à créer le menu pour rendre ça dynamique (car actuellement il faut spécifier le "filtre" en dur dans le code).

Il y a différents outils pour découper un flux. Déjà, un niveau est appelé un "filtre". Chaque filtre est découpé en N "chunks". Un chunk peut ensuite contenir un filtre, la boucle est boulée ;-) On peut créer son propre filtre à la souris : ajouter/modification/suppression de chunk, ajout de filtre fils, ajoute d'une chaîne de caractère, etc. On peut alors sauver son filtre utilisateur dans un fichier XML, puis le recharger plus tard. On peut également exporter son filtre en un script Python (pour écrire son filtre un peu plus évolué par la suite).

Enfin, le tout est extrénement scriptable vu que le code est écrit en Python ...

---

Un truc sympa serait d'écrire un désassembleur/décompilateur avec ça :-) (pour C, Python, Flash ou autre)

Contactez moi si le projet vous intéresse (ou laissez un commentaire ici).

Haypo
  • # analyseur de flux mpeg/DVB

    Posté par  . Évalué à 2.

    Ca me semble sympa comme base.

    Je me demande combien de boulot il serait necessaire pour le transformer en un bon analyseur de stream DVB.

    Faudrait que je regarde ca si j'ai un peu de temps, parce que je connais aucun outils libre qui permet de faire des analyse sympa de stream.
    • [^] # Re: analyseur de flux mpeg/DVB

      Posté par  . Évalué à 4.

      Pas beacoup, parce que je l'ai déjà fait :) (OK, « un bon analyseur » est subjectif, mais ça répond à mes besoins).

      http://www.mit.jyu.fi/mweber/leffakone/software/parsempegts/

      Très basique, il détecte les différents flux (video, audio et sous-titres) et affiche les données brutes pour l'audio (du PES courant), le type d'image pour la video (première image du PES). Le but étant de trouver à quel endroit couper le flux pour l'éditer (en relisant le code, je viens de me rendre compte que cette version ne lit qu'un seul PID, qu'il faut spécifier en ligne de commande. Je mets la nouvelle version, qui fait ce que je décris, en ligne dès que j'y pense).

      J'ai écrit un deuxième outil basé sur celui-là, qui prend en entrée un TS et une « edit list » de MPlayer, et coupe le TS en tronçons qui correspondent à l'edit list. Ensuite je convertis les tronçons en XviD avec mencoder et je les rassemble avec avimerge au besoin. Tout ça n'est pas sur le Web, mais je l'y ajoute dès que j'y pense.
      • [^] # Re: analyseur de flux mpeg/DVB

        Posté par  . Évalué à 2.

        Ca semble sympa. Mais je recherche plutot des parseurs pour les sections, et que ce soit "ajustable"

        Le grand interet que je vois au project hachoir c'est de rajouter simplement, avec un fichier xml ou 3 lignes de python, un parsing correct d'une nouvelle table, même pour des sections privés (si on a la spec).

        Parce que des parseurs de PAT et PMT on en trouve des libres (ces tables permettent de trouver où est une video avec son audio et sa synchro), mais si on veut parser un EIT rempli de partie privé, (ce qui donne le programme courant, sa description, les autres programmes des autres chaines, etc.) ou la SDT (qui décrit l'ensemble des chaines), la je ne voit rien de existant et d'assez modulable.

        Enfin on peut toujours regarder les sections en hexa et on compte les octets, ça ça marche toujours.
        Mais il reste la difficulté de créer des sections de test sans erreurs...
      • [^] # Re: analyseur de flux mpeg/DVB

        Posté par  (site web personnel) . Évalué à 1.

        Je ne sais pas combien de temps il faudrait pour analyser ce genre de fichier. Le mieux est de faire ça pas à pas bien sûr : d'abord savoir découper un AVI/MPEG, puis savoir analyser tel ou tel chunk (genre entête d'un format donné), etc. C'est ce que j'ai fait pour le format PNG: d'abord j'ai appris à découper grossièrement le fichier (1er niveau), puis à lire certains types de chunks (entête, gamma, etc.). Resterait d'ailleurs à savoir décompresser les données, mais ce n'est pas ma priorité.

        L'idéal serait de savoir utiliser de bibliothèques externes, mais je ne sais pas si c'est possible. J'ai par exemple vu que le module gzip de Python n'accepte pas juste les données compressés, il veut absolument le fichier dans son intégralité.

        Haypo
        • [^] # Re: analyseur de flux mpeg/DVB

          Posté par  . Évalué à 2.

          Utilise le module zlib, il est fait pour toi :)

          Le module gzip est bien si tu as un fichier. Le module zlib te permet d'accéder à des fonctionnalités plus utiles (genre compresser une chaîne de caractères. C'est tout bête, mais gzip ne le permet pas)

          http://www.python.org/doc/lib/module-zlib.html

          Après, il faudrait voir comment marche le format gzip pour voir si on peut "découper" un gzip et le désarchiver par tranches
  • # tcpflow

    Posté par  (site web personnel) . Évalué à 2.

    on écoute le réseau => (moulinette qui extrait les données de TCP) => fichier zip => (deflate) => image => (...)
    Comme ça ?
    $ tcpdump -C | gunzip

    pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

  • # ...

    Posté par  . Évalué à 2.

    À terme, le programme sera capable de reconstituer des données qui sont stockées à divers endroits (ex: archive zip/rar).

    comme par (http://www.par2.net/) ?
  • # Il suffit !!!

    Posté par  . Évalué à 2.

    Oui! Il suffit, Victor, de nous faire plein de logiciels tout-plein-conviviaux !
    Y'en a marre ! :)

Suivre le flux des commentaires

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