GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Hexdump-Umkehrbefehl

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:

spezifiziert ist
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

Linux
  1. Verwendung des Linux-Hexdump-Befehls mit praktischen Beispielen

  2. Linux-mv-Befehl

  3. Linux-Du-Befehl

  4. Reverse-Engineering-Tools unter Linux – Strings, nm, ltrace, strace, LD_PRELOAD

  5. Was ist das Reverse-DNS-Befehlszeilendienstprogramm?

Linux Watch-Befehl

Xargs-Befehl unter Linux

W-Befehl unter Linux

Bei Befehl unter Linux

Linux xxd Command Tutorial für Anfänger (mit Beispielen)

ifconfig-Befehl