Sie möchten die Struktur einer Binärdatei mit Python zurückentwickeln. Da Sie angegeben haben, dass die Datei binär ist, kann es sich als schwierig erweisen. Sie müssen den Inhalt der Datei untersuchen und Ihre beste Intuition verwenden, um zu versuchen, die Struktur abzuleiten. Das erste, was Sie wollen, ist eine Möglichkeit, jedes der Bytes der Datei auf eine Weise anzuzeigen, die Ihnen hilft, die Bedeutung zu verstehen.
Glücklicherweise hat jemand bereits ein Werkzeug dafür geschrieben, hexdump. Installieren Sie das Paket mit pip.
Die Funktion, die Sie von diesem Paket benötigen, ist Hexdump, also importieren wir es in das Paket und holen Sie sich Hilfe zur Funktion.
>>> import hexdump
>>> help(hexdump.hexdump)
Help on function hexdump in module hexdump:
hexdump(data, result='print')
Transform binary data to the hex dump text format:
00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
[x] data argument as a binary string
[x] data argument as a file like object
Returns result depending on the `result` argument:
'print' - prints line by line
'return' - returns single string
'generator' - returns generator that produces lines
Jetzt können Sie beginnen, den Inhalt Ihrer Datei zu erkunden. Verwenden Sie den Slice-Operator, um es in Blöcken zu tun. Zum Beispiel, um den Inhalt des ersten 1 KBS der Datei zu machen:
>>> hexdump.hexdump(buf[:1024])
00000000: C3 8E C2 8F 22 13 C2 AA 66 2A 22 47 C3 94 C3 AA ...."...f*"G....
00000010: C3 89 C3 A0 C3 B1 C3 91 6A C2 A4 C3 BF 3C C2 AA ........j....<..
00000020: C2 91 73 C3 85 46 57 47 C2 88 C3 99 C2 B6 3E 2D ..s..FWG......>-
00000030: C3 BA 69 10 C2 93 C3 94 38 C3 81 7A 6A 43 30 7C ..i.....8..zjC0|
00000040: C3 BB C2 AA 01 2D C2 97 C3 83 C3 88 64 14 C3 9C .....-......d...
00000050: C2 AB C2 AA C3 A2 74 C2 85 5D C3 97 4E 64 68 C3 ......t..]..Ndh.
...
000003C0: 42 C2 8F 06 7F 12 33 7F 79 1E 2C 2A 0F C3 92 36 B.....3.y.,*...6
000003D0: C3 A6 C2 96 C2 93 C2 8B 43 C2 9F 4C C2 95 48 24 ........C..L..H$
000003E0: C2 B3 C2 82 26 C3 88 C3 BD C3 96 12 1E 5E 18 2E ....&........^..
000003F0: 37 C3 A7 C2 87 C3 AE 00 4F 3F C2 9C C3 A8 1C C2 7.......O?......
Hexdump hat eine schöne Eigenschaft, die Byte-Position Rendering, den Hex-Code, und dann (wenn möglich), um die druckbare Form des Zeichens auf das Recht.
Ich hoffe, dass einige Ihrer Textwerte dort sichtbar sind und Ihnen Hinweise geben, wie Sie Ihre Datei zurückentwickeln können.
Sobald Sie begonnen haben zu bestimmen, wie Ihre Datei strukturiert ist, können Sie die verschiedenen String-Operatoren verwenden, um Ihre Daten zu bearbeiten. Zum Beispiel, wenn Sie feststellen, dass Ihre Datei in einzelnen Abschnitte durch den Null-Byte aufgeteilt wird (b'\x00'
), können Sie diese Abschnitte erhalten somit:
>>> sections = buf.split(b'\x00')
Es gibt eine Menge Dinge, die Sie wahrscheinlich müssen lernen, während Sie tiefer graben, wie Zeichenkodierungen, Zahlencodierungen (einschließlich Little-Endian für Ganzzahlen und Fließkomma-Codierung für Fließkommazahlen). Sie möchten einen Weg finden, Ihre Ergebnisse extern zu validieren.
Viel Glück.
Freut mich zu hören, dass Sie Python 3 verwenden. –