
逆 16 進ダンプを実行する方法を検索していたところ、xxd について言及されているのを見つけました。ただし、単純には機能しないようです:
xxd -r hexdumpfile > binaryfile
xxd infile
次に、との出力の違いを比較したところhexdump infile
、次の 3 つの違いが見つかりました。
- xxd出力にはアドレスの後にコロンが付きます
- xxd出力ではデータの位置が逆になります(例えば、
5a42
hexdump出力では425a
xxd出力になります) - 各行の後に余分な文字があります
サーバー上には特定のファイルの 16 進ダンプ バージョンしかありません。xxd を使用してバイナリ データを正しく取得するにはどうすればよいでしょうか?
答え1
私の知る限り、変換を実行する単一のコマンドはありませんが、いくつかのステップに簡単に分割できます。
hexdump
出力からアドレスを削除するには、sed
- バイナリに変換するには
xxd
- エンディアン変換(例えば、
5a42
は になる425a
)dd
完全なコマンドは次のとおりです。
sed 's/^[0-9]*//' hexdump | xxd -r -p | dd conv=swab of=binaryfile
答え2
この回答は、https://stackoverflow.com/a/52834021/6770384
変換は 1 つのコマンドで実行できます。アドレスの後に を追加し、エンディアン (に切り替える)を変更するだけsed
で十分です。:
ab12
12ab
sed -E 's/ /: /;s/ (..)(..)/ \2\1/g;$d' dump | xxd -r
既知のバグ(コメント欄参照)
- 元のファイルの長さが奇数の場合 (例: 1、3、5、7、... バイト長)、末尾に null バイトが追加されます。
- 元のファイルの繰り返しセクションは、
hexdump
を使用して編集され た場合、正しく復元されません*
。
答え3
を追加してみてください-p
。
xxd -r -p hexdumpfile > binaryfile
答え4
以下のものを簡単に使用できます
必要な形式で 16 進ダンプを取得する
hexdump -Cv <バイナリファイル.bin> > バイナリファイル.txt
-Cはデータをバイトごとに印刷します
-v は繰り返しコンテンツに * を使用しません
ここで、binary_file.txt の各行の最初と最後の数文字を削除する必要があります。ここでは sed コマンドを使用できます。
xxdコマンドを使用する
xxd -r -p バイナリファイル.txt > バイナリファイル.bin を回復する
両方のファイルのmd5sumをチェックすることができます。一致するはずです
md5sum バイナリファイル.bin
md5sum 回復バイナリファイル.bin