GNU/Linux >> Znalost Linux >  >> Linux

Hexdump zpětný příkaz

Napsal jsem krátký skript AWK, který obrátí hexdump -C výstup zpět do původních dat. Použijte takto:

reverse-hexdump.sh hex.txt > data

Zvládá značky opakování '*' a generuje původní data, i když jsou binární.hexdump -C a reverse-hexdump.sh vytvořit datový okružní pár. Je k dispozici zde:

  • Reverzní hexdump úložiště GitHub
  • Přímo na reverse-hexdump.sh

Obnovit file , daný pouze výstupem hexdump file

Pokud máte pouze výstup hexdump file a chcete obnovit původní soubor, nejprve si všimněte, že výchozí výstup hexdumpu závisí na endianness systému, na kterém jste hexdump spustili!

Pokud máte přístup k systému, který vytvořil výpis, můžete určit jeho endianitu pomocí níže uvedeného příkazu:

[[ "$(printf '\01\03' | hexdump)" == *0103* ]] && echo big || echo little

Vrácení hexdumpu little-endian

Toto je nejčastější případ. Všechny systémy x86/x64 jsou little-endian. Pokud neznáte endianitu systému, který běžel hexdump file , zkuste to.

sed 's/ \(..\)\(..\)/ \2\1/g;$d' dump | xxd -r

sed část převede hexdump do xxd 's, alespoň tak daleko, že xxd -r funguje.

Změna hexdumpu big-endian

sed '$d' dump | xxd -r

Známé chyby (viz sekce komentářů)

  • Pokud měl původní soubor lichou délku (např. 1, 3, 5, 7, ..., dlouhý bajt), přidá se koncový prázdný bajt.
  • Opakující se části původního souboru se neobnoví správně, pokud byly hexdump ed pomocí * .

Můžete zkontrolovat svůj výpis pro výše uvedené problematické případy spuštěním příkazu níže:

grep -qE '^\*|^[0-9a-f]*[13579bdf] *$' dump && echo bug || echo ok

Lepší alternativa k vytváření hexdumpů

Kromě non-posix (a proto není tak přenosný) xxd existuje od (o ctal d ump), který by měl být dostupný na všech unixových systémech, jak je specifikováno v posix:

od -tx1 -An -v

Vytiskne hex desítkový výpis, seskupení číslic do jednotlivých bajtů (-tx1 ), s n o A předpony adres (-An , podobně jako xxd -p ) a bez zkrácení opakovaných sekcí jako * (-v ). Takový výpis můžete vrátit pomocí xxd -r -p .


Existuje podobný nástroj s názvem xxd . Pokud spustíte xxd s pouhým názvem souboru vypíše data v poměrně standardním hexadecimálním formátu:

# xxd bdata
0000000: 0001 0203 0405
......

Nyní, když výstup převedete zpět na xxd pomocí -r a přesměrujte jej do nového souboru, můžete převést hexadecimální výpis zpět na binární:

# xxd bdata | xxd -r >bdata2
# cmp bdata bdata2
# xxd bdata2
0000000: 0001 0203 0405

Linux
  1. Jak Hexdump funguje

  2. Jak používat Linux Hexdump Command s praktickými příklady

  3. Co je nástroj příkazového řádku reverzního DNS?

  1. Linuxový příkaz mv

  2. Linux du command

  3. Linuxový ip příkaz

  1. Linux cd příkaz

  2. Nástroje zpětného inženýrství v Linuxu – řetězce, nm, ltrace, strace, LD_PRELOAD

  3. Příkaz xxd – Vyjádřený v hexadecimálním tvaru