web-dev-qa-db-fra.com

Outils pour aider à l'ingénierie inverse des formats de fichiers binaires

Quels sont les outils disponibles pour faciliter le décodage des formats de données binaires inconnus?

Je connais Hex Workshop et 010 Editor les deux structures de support. Celles-ci sont acceptables dans une mesure limitée pour un format fixe connu mais deviennent difficiles à utiliser avec quelque chose de plus compliqué, en particulier pour les formats inconnus. Je suppose que je regarde un module pour un langage de script ou un outil GUI scriptable.

Par exemple, j'aimerais pouvoir trouver une structure dans un bloc de données à partir d'informations limitées connues, peut-être un nombre magique. Une fois que j'ai trouvé une structure, suivez les mots de longueur et de décalage connus pour trouver d'autres structures. Répétez ensuite ceci récursivement et itérativement où cela a du sens.

Dans mes rêves, peut-être même identifier automatiquement les décalages et longueurs possibles en fonction de ce que j'ai déjà dit au système!

77
Mat

Voici quelques conseils qui vous viennent à l'esprit:

D'après mon expérience, les langages de script interactifs (j'utilise Python) peuvent être d'une grande aide. Vous pouvez écrire un cadre simple pour gérer les flux binaires et certains algorithmes simples. Ensuite, vous pouvez écrire des scripts qui prendront votre binaire et vérifieront diverses choses. Par exemple:

Faites une analyse statistique sur diverses parties. Des données aléatoires, par exemple, vous diront que cette partie est probablement compressée/cryptée. Des zéros peuvent signifier un rembourrage entre les pièces. Les zéros dispersés peuvent signifier des valeurs entières ou des chaînes Unicode et ainsi de suite. Essayez de repérer divers décalages. Essayez de convertir des parties du binaire en entiers de 2 ou 4 octets ou en flottants, imprimez-les et voyez si elles font sens. Écrivez quelques fonctions qui rechercheront des parties répétitives ou très similaires dans les données, de cette façon, vous pouvez facilement repérer les en-têtes.

Essayez de trouver autant de chaînes que possible, essayez différents encodages (chaînes c, chaînes Pascal, utf8/16, etc.). Il existe de bons outils pour cela (je pense que Hex Workshop a un tel outil). Les cordes peuvent vous en dire beaucoup.

Bonne chance!

21
Untrots

Pour Mac OS X, il existe un nouvel outil génial qui est encore meilleur que mon iBored: Synaliyze It! ( http://www.synalysis.net/ )

Par rapport à iBored , il est mieux adapté aux fichiers non bloqués, tout en donnant un contrôle total sur les structures, y compris la scriptabilité (avec Lua). Et il visualise également mieux les structures.

15
Thomas Tempelmann

Tupni ; à ma connaissance, pas directement disponible sur Microsoft Research, mais il existe un article sur cet outil qui peut intéresser quelqu'un qui souhaite écrire un programme similaire (peut-être open source):

Tupni: rétroconception automatique des formats d'entrée ( @ bibliothèque numérique ACM )

Résumé

Des travaux récents ont établi l'importance de la rétro-ingénierie automatique des spécifications de protocole ou de format de fichier. Cependant, les formats rétro-conçus par les outils précédents ont manqué des informations importantes qui sont essentielles pour les applications de sécurité. Dans cet article, nous présentons Tupni, un outil qui peut inverser l'ingénierie d'un format d'entrée avec un riche ensemble d'informations, y compris des séquences d'enregistrement, des types d'enregistrement et des contraintes d'entrée. Tupni peut généraliser la spécification de format sur plusieurs entrées. Nous avons implémenté un prototype de Tupni et l'avons évalué sur 10 formats différents: cinq formats de fichiers (WMF, BMP, JPG, PNG et TIF) et cinq protocoles réseau (DNS, RPC, TFTP, HTTP et FTP). Tupni a identifié toutes les séquences d'enregistrement dans les entrées de test. Nous montrons également qu'en agrégeant plusieurs fichiers WMF, Tupni peut dériver une spécification de format plus complète pour WMF. De plus, nous démontrons l'utilité de Tupni en utilisant les informations riches qu'il fournit pour la génération de signature de vulnérabilité zeroday, ce qui n'était pas possible avec les outils d'ingénierie inverse précédents.

10
MaD70

Mon propre outil "iBored", que j'ai publié récemment, peut en faire partie. J'ai écrit l'outil pour visualiser et déboguer les formats de système de fichiers (UDF, HFS, ISO9660, FAT, etc.), et implémenté la recherche, la copie et même la prise en charge de la structure et des modèles. Le support de structure est assez simple, et les modèles sont un moyen d'identifier dynamiquement les structures.

Le tout est programmable dans un dialecte Visual BASIC, vous permettant de tester des valeurs, de lire des blocs spécifiques, et tout.

L'outil est gratuit, fonctionne sur toutes les plateformes (Win, Mac, Linux), mais comme c'est un outil personnel que je viens de rendre public pour le partager, ce n'est pas très documenté.

Cependant, si vous voulez l'essayer et que vous souhaitez donner votre avis, je pourrais ajouter des fonctionnalités plus utiles.

Je l'ouvrirais même, mais comme il est écrit en REALbasic , je doute que beaucoup de gens rejoignent un tel projet.

Lien: page d'accueil iBored

7
Thomas Tempelmann

J'utilise encore occasionnellement un ancien éditeur hexadécimal appelé A.X.E., Advanced Hex Editor. Il semble avoir largement disparu d'Internet maintenant, bien que Google devrait toujours être en mesure de le trouver pour vous. La dernière version que je connaisse était la version 3.4, mais je n'ai vraiment utilisé que la version 2.1 gratuite pour usage personnel.

Sa fonctionnalité la plus intéressante, et celle que j'ai utilisée le plus pour déchiffrer divers formats de jeux et de graphiques, est son mode d'affichage graphique. Cela vous montre simplement le fichier avec chaque octet transformé en pixel à code couleur. Et aussi simple que cela puisse paraître, cela a parfois rendu mes tentatives de rétro-ingénierie beaucoup plus faciles.

Je suppose que le faire à l'œil nu est tout à fait le contraire de l'analyse automatique, et le mode graphique ne sera pas très utile pour trouver et suivre les décalages ...

La dernière version a quelques fonctionnalités qui semblent pouvoir répondre à vos besoins (scripts, Finder de régularité, générateur de grammaire), mais je n'ai aucune idée de leur qualité.

6
mercator

Il y a Hachoir qui est une bibliothèque Python pour analyser n'importe quel format binaire dans des champs, puis parcourir les champs. Il a beaucoup d'analyseurs pour les formats courants, mais vous pouvez écrivez également vos propres analyseurs pour vos fichiers (par exemple, lorsque vous travaillez avec du code qui lit ou écrit des fichiers binaires, j'écris habituellement un analyseur Hachoir d'abord pour avoir une aide au débogage).

3
oliver

Mon projet icebuddha.com prend en charge cela en utilisant python pour décrire le format dans le navigateur.

1
0xdabbad00

Un cut'n'paste de ma réponse à une question similaire:

Un outil est WinOLS , qui est conçu pour interpréter et éditer des images binaires informatiques de gestion de moteur de véhicule (principalement les données numériques dans leurs tableaux de recherche). Il prend en charge divers formats endiens (mais pas PDP, je pense) et affiche des données à différentes largeurs et décalages, définit des zones de tableau (cartes) et les visualise en 2D ou 3D avec toutes sortes d'options de mise à l'échelle et de décalage. Il dispose également d'un Finder automatique heuristique/statistique, qui pourrait fonctionner pour vous.

C'est un outil commercial, mais la démo gratuite vous permettra de tout faire mais d'enregistrer les modifications du binaire et d'utiliser les fonctionnalités de gestion du moteur dont vous n'avez pas besoin.

0
blueshift