Fq - Pour extraire des données structurées à partir de fichiers binaires

Image illustrant l'article : Fq - Pour extraire des données structurées à partir de fichiers binaires

Fq - Pour extraire des données structurées à partir de fichiers binaires

par Korben -

Vous vous souvenez de Jq qui permet de sortir de la data de n’importe quel output de logiciel et de formater ça en JSON ?

Et bien voici le même concept, à savoir disposer de données formatées en JSON, mais cette fois extraites d’un fichier binaire. Fq peut ainsi afficher les données sous leur forme hexa, mais également les “transformer” en json, ce qui est vraiment pratique pour sortir de la donnée de médias comme des MP3, MP4, FLAC, JPEG…etc. ou encore lister les valeurs et fonctions inscrites dans un programme.

Par exemple, pour sortir le header d’un MP3, c’est jouable avec la commande :

fq '.frames[1].header | tovalue' fichier.mp3

Schéma de la structure d’un fichier binaire

On peut également pourquoi pas, extraire la première image JPEG rencontrée dans le binaire :

fq 'first(.. | select(format=="jpeg")) | tobytes' file > file.jpeg

Ça permet comme ça d’alimenter des bases de données ou des sites web en extrayant de la data de fichiers binaires ou de captures de paquets réseaux…etc.

Par exemple pour les trames réseaux, on peut récupérer les trames TCP qui ont des têtes de GET HTTP comme ceci (à partir d’un fichier PCAP) :

fq '.tcp_connections | grep("GET /.* HTTP/1.?")' file.pcap

…etc., etc.

Bref, un outil à mi-chemin en entre Jq et gdb (le débugger).

Si ça vous intéresse, toute la doc se trouve ici.