Ich habe ein kurzes AWK-Skript geschrieben, das hexdump -C
umkehrt Ausgabe zurück zu den Originaldaten. Verwenden Sie wie folgt:
reverse-hexdump.sh hex.txt > data
Behandelt '*'-Wiederholungsmarkierungen und generiert Originaldaten, auch wenn sie binär sind.hexdump -C
und reverse-hexdump.sh
Machen Sie ein Daten-Round-Trip-Paar. Es ist hier verfügbar:
- GitHub Reverse-Hexdump-Repository
- Direkt zu reverse-hexdump.sh
Stellen Sie file
wieder her , wenn nur die Ausgabe von hexdump file
gegeben ist
Wenn Sie nur die Ausgabe von hexdump file
haben und die Originaldatei wiederherstellen möchten, beachten Sie zunächst, dass die Standardausgabe von hexdump von der Endianness des Systems abhängt, auf dem Sie hexdump ausgeführt haben!
Wenn Sie Zugriff auf das System haben, das den Dump erstellt hat, können Sie dessen Endianness mit dem folgenden Befehl ermitteln:
[[ "$(printf '\01\03' | hexdump)" == *0103* ]] && echo big || echo little
Little-Endian-Hexdump umkehren
Dies ist der häufigste Fall. Alle x86/x64-Systeme sind Little-Endian. Wenn Sie die Endianness des Systems nicht kennen, auf dem hexdump file
lief , versuchen Sie dies.
sed 's/ \(..\)\(..\)/ \2\1/g;$d' dump | xxd -r
Die sed
Teil konvertiert hexdump
's Format in xxd
's Format, zumindest so weit, dass xxd -r
funktioniert.
Big-Endian-Hexdump umkehren
sed '$d' dump | xxd -r
Bekannte Fehler (siehe Kommentarbereich)
- Ein abschließendes Null-Byte wird hinzugefügt, wenn die Originaldatei eine ungerade Länge hatte (z. B. 1, 3, 5, 7, ..., Byte lang).
- Wiederkehrende Abschnitte der Originaldatei werden nicht korrekt wiederhergestellt, wenn sie
hexdump
waren ed mit einem*
.
Sie können Ihren Dump auf die oben genannten problematischen Fälle überprüfen, indem Sie den folgenden Befehl ausführen:
grep -qE '^\*|^[0-9a-f]*[13579bdf] *$' dump && echo bug || echo ok
Bessere Alternative, um überhaupt Hexdumps zu erstellen
Neben dem Nicht-Posix (und daher nicht so portierbar) xxd
dort ist od
(o ctal d ump), das auf allen Unix-ähnlichen Systemen verfügbar sein sollte, da es durch posix:
od -tx1 -An -v
Druckt ein Hexx adezimaler Dump, Gruppierung von Ziffern als einzelne Bytes (-tx1
), mit n o A Adresspräfixe (-An
, ähnlich wie xxd -p
) und ohne wiederholte Abschnitte als *
abzukürzen (-v
). Sie können einen solchen Dump mit xxd -r -p
rückgängig machen .
Es gibt ein ähnliches Tool namens xxd
. Wenn Sie xxd
ausführen mit nur einem Dateinamen gibt es die Daten in einem ziemlich standardmäßigen Hex-Dump-Format aus:
# xxd bdata
0000000: 0001 0203 0405
......
Wenn Sie nun die Ausgabe zurück zu xxd
leiten mit dem -r
Option und leiten Sie diese in eine neue Datei um, können Sie den Hex-Dump wieder in eine Binärdatei umwandeln:
# xxd bdata | xxd -r >bdata2
# cmp bdata bdata2
# xxd bdata2
0000000: 0001 0203 0405