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
hexdumpdiedit 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