Question:
Quels outils existent pour extraire des structures de données à partir de fichiers binaires plats?
gal
2014-01-20 10:45:41 UTC
view on stackexchange narkive permalink

Énoncé du problème

J'ai un fichier composé entièrement de structures de données; J'ai essayé de trouver un outil qui me permettrait d'ouvrir ce fichier et de déclarer (peut-être) un type et un décalage tels que je puisse travailler individuellement avec le type de données primitif présumé.

par exemple Je déclare que les 4 octets situés à l'offset 0x04 sont un entier non signé de 32 bits, et je voudrais inspecter la valeur à cet emplacement (lu peut-être comme big-endian), puis travailler avec cet entier individuellement (peut-être voir à quoi il ressemble encodé comme une chaîne ascii de 4 octets et essayez de le lire, etc.)

Détails

J'ai un fichier de 4096 octets contenant des structures C avec des éléments membres sous forme d'entiers allant de 16 -64 bits de longueur; voici un exemple:

  struct my_struct {uint_32 magic} // sizeof (my_struct) == 0x04  

Dans ce cas, magic = 'ball ', et donc quand le fichier est ouvert dans un éditeur de texte, il se lit comme' llab ... ', et peut évidemment aussi être représenté comme un entier 32 bits

Question

Existe-t-il un outil qui permet l'analyse statique de fichiers de structure de données plats?

Ce que j'ai considéré jusqu'à présent comme une solution

J'ai envisagé d'écrire un outil de ligne de commande en Python pour faites-le, mais si quelque chose existe déjà, je préférerais gagner du temps et peut-être en apprendre davantage sur ce sujet en utilisant un outil conçu par quelqu'un de plus expérimenté. S'il vous semble que je vais mal à propos de cela (c'est ma première exploration sérieuse de ce genre de retournement), veuillez guider ma compréhension, merci.

Où j'ai déjà recherché

Googlé 'outils d'ingénierie inverse' et parcouru les liens

J'ai vérifié les pages d'ingénierie inverse de wikipedia

J'ai essayé quelques premiers principes de raisonnement

J'ai vérifié pypi

Résultats

Il y a trois réponses complètement valides et correctes, mais j'ai marqué la plus détaillée et la moins chère d'entre elles comme étant correctes, car c'est la plus accessible aux membres de la communauté qui examinent cette question.

Je suppose que vous avez déjà essayé IDA. Vérifiez [ce lien] (http://www.devttys0.com/2012/03/writing-a-bflt-loader-for-ida/), je ne suis pas sûr que ce soit ce dont vous avez besoin.
probablement lié: http://stackoverflow.com/questions/492751/tools-to-help-reverse-engineer-binary-file-formats
Cinq réponses:
Jason Geffner
2014-01-20 20:13:28 UTC
view on stackexchange narkive permalink
La fonctionnalité

010 Editor's Binary Templates est idéale pour ce type de travail. Il prend non seulement en charge les définitions statiques de struct , mais permet également les champs struct de taille dynamique et prend en charge un langage de script puissant.

Example Template

Editing the Template Results

Polynomial
2014-01-20 16:14:57 UTC
view on stackexchange narkive permalink

J'utilise Hex Workshop pour cela. Il a un tas de fonctionnalités utiles d'inversion de fichier plat, mais mon préféré est qu'il vous permet de déclarer des structures dans une syntaxe de style C et de les charger par-dessus un fichier. Ce n'est pas gratuit, mais cela vaut plus que le prix de 90 $.

Fonctionnalités que je trouve les plus utiles:

  • Syntaxe de structure de style C, prenant en charge divers tableaux, types de chaînes, chaînes de bits, vérifications de validité, etc.
  • Inspecteur de données personnalisable (utile si vous ne souhaitez voir les données que sous forme de quelques types)
  • Diffing
  • Affichage décalé (affiche décalages d'adresse, taille de la sélection, etc.)
  • Mise en évidence de la séquence (comme "tout mettre en évidence" à la recherche)
  • Opérations au niveau du bit, sommes de contrôle, etc.
Igor Skochinsky
2014-01-20 18:25:43 UTC
view on stackexchange narkive permalink

IDA peut être utilisé pour travailler avec des fichiers contenant uniquement des données. Vous pouvez convertir des octets en éléments de données (octets / mots / dwords / qwords / floats / strings etc.), les regrouper en structures ou tableaux (ou tableaux de structures), représenter des entiers comme des décalages, ajouter des noms et des commentaires, etc. / p>

Voici un exemple de fichier BMP aléatoire représenté dans IDA:

  0000 BmHeader db 'BM'; Signature0002 jj 146h; Size0006 dw 00008 dw 0000A dd offset pixel_array; décalage par rapport aux données d'image 000E; En-tête DIB 000E dd 40; taille de cet en-tête 0012 dd 33; largeur du bitmap 0016 dd 33; bitmap height001A dw 1; nombre de plans de couleur001C dw 1; bits par pixel001E dd 0; compression: aucun 0022 dd 108h; taille des données d'image 0026 dd 4724; résolution horizontale (pixels par mètre) 002A dd 4724; résolution verticale (pixels par mètre) 002E dd 0; couleurs dans la palette 0032 dd 0; nombre de couleurs importantes0036; Table des couleurs 0036 jj 0, 0FFFFFFh003E; données de pixels 003E pixel_array db 1, 73h, 13h, 6, 80h, 3 dup (0), 7Dh, 4Bh, 0E0h, 56h  
Thomas Weller
2016-07-07 11:48:39 UTC
view on stackexchange narkive permalink

Hexinator

  • a une fonctionnalité similaire aux modèles binaires de 010 Editor que l'on appelle une "grammaire". Il permet d'insérer des nombres, des chaînes, des structures et des blobs binaires. Si cela ne suffit pas, il a des capacités de script en Python et Lua

  • les valeurs peuvent alors être bien éditées (par exemple en décimal au lieu de hex). La zone hexadécimale peut être mise en évidence.

Inconvénients:

au moment de la rédaction, il semble y avoir des problèmes avec plus d'une grammaire ouverte + une ouverte fichier. Lors de l'ouverture d'un deuxième fichier pour le même grammeur, il plantait. Enregistrez tôt et enregistrez souvent.

Capture d'écran d'un fichier partiellement analysé:

Screenshot

c'est la seule structure de support gratuite! Mais je n'ai pas encore compris comment les installer: l'élément de menu "télécharger" ne fonctionne pas, et je ne vois aucune option pour charger une grammaire à partir du disque. Mais si je double-clique sur un fichier .grammar, il semble qu'il soit "installé" ...
@jumpjack: avez-vous un tel menu: https://i.stack.imgur.com/3x39O.png? A part ça, ce n'est pas vraiment gratuit. De nombreuses fonctionnalités nécessitent une licence après l'expiration de la période d'essai.
Une grammaire n'apparaît dans la liste déroulante que si je double-clique sur un fichier .grammar dans l'explorateur; sinon je n'ai que la possibilité de CRÉER une grammaire.
Andy Key
2014-12-11 18:03:15 UTC
view on stackexchange narkive permalink

J'utilise mon éditeur binaire pour ce type de tâche http://www.nyangau.org/be/be.htm



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...