Comment analyser un fichier binaire?
j'ai un fichier binaire. Je ne sais pas comment c'est formaté, je sais seulement que ça vient d'un code delphi.
Existe-t-il un moyen d'analyser un fichier binaire?
Existe-t-il un "modèle" pour analyser et désérialiser le contenu binaire d'un fichier de format inconnu?
13 réponses
Essayez ces:
- Désérialiser les données: analysez comment il a compilé votre exe (essayez Analyseur De Fichiers). Essayez de desérialiser les données binaires avec le langage découvert. Alors sérialisez-le dans un format xml (language-indipendent) que chaque langage de programmation peut comprendre
- Analyser les données binaires: essayez de sauvegarder différentes versions du fichier avec peu de variation et utilisez un programme diff pour analyser la signification de chaque bit avec un éditeur hexadécimal. Utilisez-le en conjonction avec des techniques de piratage binaire (comme Comment faire craquer un Format de Fichier Binaire par Frans Faase)
- Inverser la demande: essayez d'obtenir du code en utilisant des outils d'ingénierie inverse pour le langage de programmation utilisé pour construire l'application (trouvé avec Analyseur De Fichiers). Sinon, utilisez un outil d'analyse de démontage comme IDA Pro Disassembler
pour mon projet de passe-temps, j'ai dû faire de l'ingénierie inverse de vieux fichiers de jeu. Mes démarches ont été:
- Avoir un bon éditeur hexadécimal.
- recherchez les mots lisibles dans le fichier binaire. Notez comment leur distribution est. Si la distance entre eux est constante, vous savez que c'est une liste.
- cherchez 2-3 zéros conséquents. Ça pourrait indiquer une valeur int32.
- certains dwords peuvent être des pointeurs dans le fichier.
- Essayez d'identifier les motifs récurrents dans le fichier.
- voir beaucoup de C0-CF pourrait indiquer des données compressées RLE.
rétroingénierie un fichier binaire lorsque vous avez une idée de ce qu'il représente est un processus qui prend beaucoup de temps. Si vous n'avez aucune idée de ce que c'est, alors il sera encore plus difficile.
C'est possible cependant, mais vous devez avoir une assez bonne raison pour le faire.
La première étape serait de l'ouvrir dans un éditeur hexadécimal de votre choix et de voir si vous pouvez trouver n'importe quel texte en anglais pour vous diriger dans la direction de ce que le fichier est même censé représenter. À partir de là, Google "Reverse Engineering fichiers binaires", il ya beaucoup plus de gens bien informés que moi qui ont écrit des guides à ce sujet.
le programme" strings " de GNU binutils est très utile. Il imprimera les chaînes de caractères imprimables dans un fichier, donnant souvent un indice sur ce qu'un fichier contient ou un programme fait.
si les données représentent des objets Delphi sérialisés, vous devriez commencer à lire sur le processus de sérialisation Delphi. Si c'est le cas, je pense que votre meilleur pari serait de le charger en utilisant Delphi et de continuer votre analyse à partir de L'IDE. Quelques informations sur la sérialisation Delphi peuvent être trouvées ici.
EDIT: si le fichier contient des objets Delphi sérialisés, alors vous devriez écrire un petit programme delphi qui le charge, et "convertir" les données vous-même à quelque chose de neutre, comme le xml. Si vous parvenez à le faire, vous devriez vérifier et voir si delphi supporte la sérialisation vers xml. Ensuite, vous pouvez accéder à ces objets de n'importe quelle langue.
la commande unix "file" est vraiment utile - Je ne sais pas s'il y a quelque chose comme ça dans windows. Vous l'exécuter comme ceci:
file myfile.ext
et il crache une description textuelle basée sur les nombres magiques et les données qu'ils contiennent.
Probablement, il est contenu dans cygwin.
Si vous avez accès à l'application qui crée le fichier, vous pouvez appliquer des modifications à l'application, puis enregistrez le fichier et de voir les effets (Gardez à l'esprit que les chiffres sont probablement stocké dans little endian):
- d'Abord créer le fichier à plusieurs reprises. Si les fichiers ne sont pas binaires égaux, la date/heure actuelle est probablement stocké dans la zone où les différences hte se produisent.
- peut-être voulez-vous répéter cela avec le logiciel tournant sous différents les environnements, pour voir si la version OS etc sont stockés, mais c'est assez inhabituel.
- ensuite, vous pouvez essayer de changer des variables simples et créer plusieurs fichiers qui ne diffèrent que par la valeur de cette variable. Cela vous aide à identifier où cette variable est stockée.
- de Cette façon, vous pouvez également exclure des variables qui ne sont pas stockées dans le fichier: Si vous changer, mais les fichiers créés sont identiques, ils ne sont pas stockés.
afin de tester les hypothèses que vous travaillez avec les étapes ci-dessus, éditez un des fichiers et demandez à l'application de le lire.
Si vous n'avez pas accès à l'application elle-même, je vous conseille de l'oublier et de trouver une autre façon de résoudre votre problème. Il y a une très forte probabilité qu'il sera plus rapide...
j'ai développé Hexinator (windows Et Linux) et Synalyze It! (macOS) exactement dans ce but. Ces applications vous permettent de voir les fichiers binaires comme dans d'autres éditeurs hexadécimaux mais en plus, vous pouvez créer une "grammaire" avec les spécificités d'un format de fichier binaire. La grammaire contient tous les éléments constitutifs et est utilisée pour analyser le fichier automatiquement.
Donc vous pouvez garder les connaissances que vous aurez acquises dans l'analyse et l'appliquer à plusieurs fichiers simultanément. Vous pouvez également colorer les morceaux de formats de fichier pour un aperçu rapide dans l'éditeur hexadécimal. Les résultats de l'analyse sont affichés dans une vue arborescente où vous pouvez aussi modifier les fichiers facilement (en appliquant endianness et cetera).
connaissez-vous le programme qui l'utilise? Si c'est le cas, vous pouvez accrocher que les programmes écrivent à la fonction de dossier et obtiennent une idée de quelles Données son écriture, la taille des données et où.
Plus D'Info: http://www.codeproject.com/KB/DLL/Win32APIHooking_Trouble.aspx
Obtenir le Delphi application et l'ouvrir dans IDA Pro freeware version, et trouver où il écrit le fichier, et décoder comment il écrit le fichier de cette façon.
à moins que ce soit le texte du plan.
Contrairement aux éditeurs hexadécimaux traditionnels qui n'affichent que les octets hexadécimaux bruts d'un fichier, 010 Editeur peut aussi analyser un fichier dans une structure hiérarchique en utilisant un modèle binaire. Les résultats de l'exécution d'un modèle binaire sont beaucoup plus faciles à comprendre et à éditer qu'en utilisant seulement les octets hexadécimaux bruts.
Essayez de l'ouvrir dans un éditeur hexadécimal et à analyser.