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