GNU/Linux >> Belajar Linux >  >> Linux

Perintah terbalik Hexdump

Saya telah menulis skrip AWK pendek yang membalikkan hexdump -C output kembali ke data asli. Gunakan seperti ini:

reverse-hexdump.sh hex.txt > data

Menangani penanda berulang '*' dan menghasilkan data asli meskipun biner.hexdump -C dan reverse-hexdump.sh membuat pasangan bolak-balik data. Ini tersedia di sini:

  • repo reverse-hexdump GitHub
  • Langsung ke reverse-hexdump.sh

Pulihkan file , hanya diberikan output dari hexdump file

Jika Anda hanya memiliki output hexdump file dan ingin memulihkan file asli, pertama-tama perhatikan bahwa output default hexdump tergantung pada endianness sistem tempat Anda menjalankan hexdump!

Jika Anda memiliki akses ke sistem yang membuat dump, Anda dapat menentukan endianness-nya menggunakan perintah di bawah ini:

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

Membalik hexdump little-endian

Ini adalah kasus yang paling umum. Semua sistem x86/x64 adalah little-endian. Jika Anda tidak mengetahui keberakhiran sistem yang menjalankan hexdump file , coba ini.

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

sed bagian mengonversi hexdump format menjadi xxd formatnya, setidaknya sejauh xxd -r berfungsi.

Membalik hexdump big-endian

sed '$d' dump | xxd -r

Bug yang Dikenal (lihat bagian komentar)

  • Byte null tambahan ditambahkan jika file aslinya memiliki panjang ganjil (mis. 1, 3, 5, 7, ..., panjang byte).
  • Bagian berulang dari file asli tidak dipulihkan dengan benar jika berupa hexdump diedit menggunakan * .

Anda dapat memeriksa dump Anda untuk kasus bermasalah di atas dengan menjalankan perintah di bawah ini:

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

Alternatif yang lebih baik untuk membuat hexdumps

Selain non-posix (dan karenanya tidak begitu portabel) xxd ada od (o ctal d ump) yang harus tersedia di semua sistem mirip unix seperti yang ditentukan oleh posix:

od -tx1 -An -v

Akan mencetak hex dump adesimal, mengelompokkan digit sebagai byte tunggal (-tx1 ), dengan n o A awalan alamat (-An , mirip dengan xxd -p ) dan tanpa menyingkat bagian berulang sebagai * (-v ). Anda dapat membalikkan dump tersebut menggunakan xxd -r -p .


Ada alat serupa yang disebut xxd . Jika Anda menjalankan xxd hanya dengan nama file, ia membuang data dalam format hex dump yang cukup standar:

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

Sekarang jika Anda menyalurkan output kembali ke xxd dengan -r opsi dan mengarahkannya ke file baru, Anda dapat mengonversi hex dump kembali ke biner:

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

Linux
  1. Cara kerja Hexdump

  2. Cara Menggunakan Perintah Hexdump Linux dengan Contoh Praktis

  3. Perintah mv Linux

  1. Linux du perintah

  2. Perintah ip Linux

  3. Perintah cd Linux

  1. Alat Rekayasa Terbalik di Linux – string, nm, ltrace, strace, LD_PRELOAD

  2. perintah xxd – Dinyatakan dalam bentuk heksadesimal

  3. Apa utilitas baris perintah DNS terbalik?