Analyse de fichiers binaires avec Python
Comme un projet à part, je voudrais essayer d'analyser des fichiers binaires (Mach-O fichiers en particulier). Je sais que les outils existent déjà (otool) donc considérer cela comme un exercice d'apprentissage.
Le problème, je vais frapper, c'est que je ne comprends pas comment convertir les éléments binaires d'un python de la représentation. Par exemple, le Mach-O format de fichier commence par un en-tête qui est défini par un C Struct. Le premier élément est un uint_32 "nombre magique". Quand je fais
magic = f.read(4)
- Je obtenir
b'\xcf\xfa\xed\xfe'
C'est ce qui commence à faire sens pour moi. C'est littéralement un tableau d'octets 4 octets. Mais je tiens à le traiter comme un 4-byte int qui représente l'origine de nombre magique. Un autre exemple est la numberOfSections champ. Je veux juste le nombre représenté par 4 octets de terrain, pas un tableau de littéral octets.
Je suis peut-être penser à propos de cette erreur. Personne n'a travaillé sur quelque chose de semblable? Ai-je besoin d'écrire des fonctions à regarder ces 4 octets tableaux d'octets et de changement et de combiner leurs valeurs pour produire le nombre je veux? Est endienness aller à vis de moi ici? Tous les pointeurs serait le plus utile.
source d'informationauteur D.C.
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à la
struct
module:Il y a Kaitai Struct projet qui permet de résoudre exactement le problème. Tout d'abord, vous décrire un certain format de fichier à l'aide d'un .ksy spec, puis de compiler dans une bibliothèque Python (ou, en fait, une bibliothèque dans tout autre langage de programmation),
import
et, voilà, l'analyse se résume à:Ils ont un croissance référentiel de format de fichier specs. Il n'a pas Mach-O format de fichier spec (encore?), mais il existe des formats tels que Java
.class
ou de Microsoft PE exécutable qui y sont décrits, donc je suppose qu'il ne devrait pas être un problème majeur pour écrire des spécifications pour les Mach-O format en tant que bien.Il est en fait mieux que Construire ou Hachoirparce que c'est compilé (par opposition à interpréter), donc c'est plus rapide, et il comprend des tonnes d'autres outils utiles comme outil de visualisation ou de format de diagramme maker. Par exemple, c'est un générés explication diagramme de PE format de fichier exécutable:
Je sugest la Construire module. Il propose un très haut niveau de l'interface.
J'ai écrit un code de recette a tout à l'arrière, qui vise à simplifier cette syntaxe. Vérifier et voir si cela aide:
http://code.activestate.com/recipes/577610-decoding-binary-files/?in=user-4175703