On m'a demandé de traiter des fichiers sérialisés comme des objets binaires (pas de texte/JSON malheureusement) Thrift, mais je n'ai pas accès au programme ou au programmeur qui a créé les fichiers, donc je n'ai aucune idée de leur structure, Ordre des champs, etc. Est-il possible d'utiliser les bibliothèques Thrift pour ouvrir un fichier binaire et l'analyser, obtenir une liste des types de champs, des valeurs, des imbrications, etc.?Comment pouvez-vous effectuer l'ingénierie inverse d'un fichier d'épargne binaire?
Répondre
Malheureusement, il semble que le protocole binaire de Thrift n'effectue pas beaucoup de balisage de données; Pour décoder, il semble supposer que vous avez le fichier .thrift en main, donc vous savez, disons, que les 4 octets suivants sont censés être des entiers, et ne sont pas en fait la première moitié d'un float. Donc, il semble que vous êtes bloqué avec, fondamentalement, en regardant les fichiers dans un éditeur hexadécimal (ou équivalent) et en essayant de déduire des champs en fonction des modèles exacts que vous voyez.
Il y a très peu de bits utiles:
Chaque fichier commence par une version, chaîne d'identification de protocole, et le numéro de séquence. Les cartes commencent par 6 octets qui identifient les types de clé et de valeur (les deux premiers octets, en tant que codes entiers) plus le nombre d'éléments sous la forme d'un entier de 4 octets. Les codes de type semblent être standard (l'emplacement canonique de leurs définitions semble être TProtocol.h dans les sources Thrift, par exemple une valeur booléenne est spécifiée par le type code 2, UTF-8 chaîne par le type code 16, et ainsi de suite) . Les chaînes sont préfixées par un champ de longueur entière de 4 octets, et les listes sont préfixées par le type (1 octet) et une longueur de 4 octets. Il semble que tous les champs entiers soient enregistrés en big-endian, et les points flottants sont sauvegardés au format IEEE (ce qui devrait rendre les doubles relativement faciles à trouver, au moins).
Les fichiers TBinaryProtocol * dans Thrift contiennent d'autres informations utiles; Sur le plan positif, il existe un certain nombre d'implémentations différentes afin que vous puissiez lire celles qui sont implémentées dans la langue avec laquelle vous êtes le plus à l'aise.
Désolé, je sais que ce n'est probablement pas très utile, mais il semble vraiment que ce soit toutes les informations que le format binaire Thrift fournit; Il est clair que le format binaire a été conçu avec l'intention que vous connaissiez toujours la spécification exacte du protocole, et que le but était de minimiser l'espace de câblage, plutôt que de le rendre facilement décodable à l'aveugle.
- 1. Pourquoi BinaryReader.ReadUInt32() inverse le modèle binaire?
- 2. Effectuer une recherche de géolocalisation inverse
- 3. fichier .dat binaire
- 4. Taille du fichier binaire
- 5. Écrire fichier binaire
- 6. Mercurial effectuer la comparaison binaire pour certains types de fichiers
- 7. comment calculer tan inverse?
- 8. Analyse d'un fichier binaire dans Ruby
- 9. Supprimer le caractère du fichier binaire
- 10. Comment effectuer le calcul sur un fichier journal
- 11. VB - Comment lire et écrire un fichier binaire?
- 12. comment puis-je lire un fichier binaire en utilisant VBA?
- 13. Comment fonctionne le fichier DAT binaire de Maxmind?
- 14. Comment puis-je créer un fichier binaire en Perl?
- 15. Compilation d'un fichier XML dans un fichier binaire
- 16. comment faire l'index inverse dans VBA
- 17. Achèvement du nom de fichier dans l'ordre inverse
- 18. ne peut pas ececute fichier binaire
- 19. Exécution d'un fichier binaire plat sous Linux
- 20. Meilleur moyen de télécharger un fichier binaire?
- 21. Problèmes d'E/S de fichier binaire
- 22. DataGridView à partir du fichier binaire
- 23. Envoi d'un fichier binaire au port série
- 24. valeurs entières d'écriture dans le fichier binaire
- 25. Lecture générique d'un fichier binaire bien formé
- 26. Recherche d'un bloc binaire dans un fichier
- 27. Référence de disposition de fichier binaire
- 28. Inverse DataTrigger?
- 29. comment itérer en sens inverse sur une carte en C++
- 30. Comment faire rechercher/remplacer dans un fichier « binaire » de la ligne de commande
Je suppose que vous parlez de http://incubator.apache.org/thrift/ - vous voudrez peut-être publier/marquer la langue que vous utilisez. – TrueWill