web-dev-qa-db-fra.com

Comment analyser un fichier binaire?

J'ai un fichier binaire. Je ne sais pas comment il est formaté, je sais seulement qu'il provient 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 au format inconnu?

26
Ricibald

Essayez-les:

  1. Désérialiser les données : analysez comment il est compilé votre exe (essayez File Analyzer ). Essayez de désérialiser les données binaires avec le langage découvert. Ensuite, sérialisez-le dans un format xml (indépendant du langage) que chaque langage de programmation peut comprendre
  2. Analysez 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 casser un format de fichier binaire par Frans Faase )
  3. Reverse engineering de l'application : essayez d'obtenir du code en utilisant des outils de reverse engineering pour le langage de programmation utilisé pour construire l'application (trouvé avec File Analyzer =). Sinon, utilisez l'outil d'analyse du désassembleur comme IDA Pro Disassembler
22
Ricibald

Pour mon projet de loisir, j'ai dû inverser l'ingénierie de certains anciens fichiers de jeu. Mes approches étaient les suivantes:

  • Avoir un bon éditeur hexadécimal.
  • Recherchez des mots lisibles dans le fichier binaire. Notez comment est leur distribution. Si la distance entre eux est constante, vous savez que c'est une liste.
  • Recherchez 2-3 zéros conséquents. Peut indiquer une valeur int32.
  • Certains mots clés peuvent être des pointeurs dans le fichier.
  • Essayez d'identifier les modèles récurrents dans le fichier.
  • Voir beaucoup de C0-CF peut indiquer des données compressées RLE.
11
akarnokd

Reverse engineering d'un fichier binaire lorsque vous avez une idée de ce qu'il représente est un processus très long. Si vous ne savez pas ce que c'est, ce sera encore plus difficile.

C'est possible, mais vous devez avoir une assez bonne raison de 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 du texte anglais pour vous orienter dans la direction de ce que le fichier est même censé représenter. A partir de là, Google "Reverse binary files" de Google, il y a beaucoup plus de gens bien informés que moi qui ont écrit des guides à ce sujet.

8
colithium

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 que contient un fichier ou sur un programme.

5
Andreas Fugl

Si les données représentent des objets Delphi sérialisés, vous devriez commencer à lire sur le processus de sérialisation Delphi. Si tel est le cas, je pense que votre meilleur pari serait de le charger à l'aide de Delphi et de poursuivre votre analyse depuis 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 devez écrire un petit programme delphi qui le charge et "convertir" les données vous-même en quelque chose de neutre, comme xml. Si vous parvenez à le faire, vous devez vérifier et voir si delphi prend en charge la sérialisation en xml. Ensuite, vous pouvez accéder à ces objets depuis n'importe quelle langue.

5
Geo

J'ai développé Hexinator (Window & Linux) et Synalyze It! (macOS) exactement à cette fin. Ces applications vous permettent de voir les fichiers binaires comme dans d'autres éditeurs hexadécimaux, mais vous pouvez également créer une "grammaire" avec les spécificités d'un format de fichier binaire. La grammaire contient tous les blocs de construction et est utilisée pour analyser automatiquement le fichier.

Ainsi, vous pouvez conserver les connaissances acquises dans l'analyse et les appliquer simultanément à plusieurs fichiers. Vous pouvez également coder par couleur les bits et morceaux de formats de fichiers pour un aperçu rapide dans l'éditeur hexadécimal. Screen Shot of Synalyze It! Pro Les résultats de l'analyse sont affichés dans une arborescence où vous pouvez également modifier facilement les fichiers (en appliquant l'endianness et cetera).

5
pi3

La commande unix "file" est vraiment utile - je ne sais pas s'il y a quelque chose comme ça dans windows. Vous le lancez comme ceci:

file myfile.ext

Et il crache une description textuelle basée sur les nombres magiques et les données qu'ils contiennent.

Il est probablement contenu dans cygwin .

3
1800 INFORMATION

Si vous avez accès à l'application qui crée le fichier, vous pouvez appliquer des modifications à l'application, puis enregistrez le fichier et voyez les effets (Gardez à l'esprit que les nombres sont probablement stockés dans little endian ):

  • Créez d'abord le fichier à plusieurs reprises. Si les fichiers ne sont pas binaires égaux, la date/heure actuelle est probablement stockée dans la zone où se produisent les différences.
  • Peut-être que vous voulez répéter cela avec le logiciel fonctionnant sous différents environnements, pour voir si la version du système d'exploitation, etc. est stockée, mais c'est plutôt inhabituel.
  • Ensuite, vous pouvez essayer de modifier des variables uniques 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 les modifiez, mais que les fichiers créés sont identiques, ils ne sont pas stockés.

Afin de tester les hypothèses que vous avez élaborées avec les étapes ci-dessus, éditez l'un des fichiers et demandez à l'application de le lire.

Si vous n'avez pas accès à l'application elle-même, je vous suggère de l'oublier et de trouver un autre moyen de résoudre votre problème. Il y a une très forte probabilité que ce soit plus rapide ...

3
Treb

Si file ne donne pas de réponse significative, vous voudrez peut-être essayer TRiD par Marco Pontello pour déterminer si vos données sont stockées dans un format connu.

3
hillu

Connaissez-vous le programme qui l'utilise? Si c'est le cas, vous pouvez accrocher les programmes d'écriture dans la fonction de fichier et avoir une idée de quelles données leur écriture, la taille des données et où.

Plus d'informations: http://www.codeproject.com/KB/DLL/Win32APIHooking_Trouble.aspx

2
Lodle

Obtenez l'application Delphi et ouvrez-la dans version freeware IDA Pro , et trouvez où il écrit le fichier, et décodez comment il écrit le fichier de cette façon.

À moins que ce ne soit le texte du plan.

2
Simeon Pilgrim

Contrairement aux éditeurs hexadécimaux traditionnels qui affichent uniquement les octets hexadécimaux bruts d'un fichier, l'éditeur 010 peut également analyser un fichier dans une structure hiérarchique à l'aide d'un modèle binaire. Les résultats de l'exécution d'un modèle binaire sont beaucoup plus faciles à comprendre et à modifier que d'utiliser uniquement les octets hexadécimaux bruts.

http://www.sweetscape.com/010editor/

1
Ray Hulha

Essayez de l'ouvrir dans un éditeur hexadécimal et analysez.

0
Alan Haggai Alavi