デバイス全体で16進マジックナンバーを検索

デバイス全体で16進マジックナンバーを検索

現在、法医学文書検索教育の問題を解決しようとしています。

LUKSコンテナがあり、次のトレーニングの問題に進むには、LUKSヘッダーを見つける必要があることを示すメッセージが表示されます。

質問に記載されている情報によると、ヘッダーはマジックナンバー(16進数)4c554b53babeを使用して識別でき、現在私のデバイス全体でこの番号を検索しています。

このため、私は次から始めます。

xxd -g0 -c 32 /mnt/luksTraining/training001.dd | grep -C 1 4c554b53babe

しかし、これはタイトルが2行に分割されていない場合にのみ機能することに気づきました。たとえば、タイトルの最初の半分は行の末尾にあり、残りの半分は次の行にあります。

特定のファイルヘッダーを検索する「スマートな」方法はありますか?

答え1

特定のファイルヘッダーを検索する「スマートな」方法はありますか?

xxdデフォルトでは特定のバイト文字列を検索するため、出力ではなくバイナリデータを直接検索することをお勧めします。これは偽の肯定(および潜在的に偽の否定)を生成する可能性があります。例:

grep -oba "$(printf '\x4c\x55\x4b\x53\xba\xbe')" /mnt/luksTraining/training001.dd

上記は、指定されたバイト文字列を持つtraining001.ddにバイトオフセットを出力します。

バイト文字列をグレーピングする方法については、次を参照してください。このスタックオーバーフローの質問

答え2

いくつかの奇抜なアイデアはすぐに出てこないでしょう。

  • デバイスをバイナリファイルとして開き、正規表現を使用します(たとえば、Pythonを使用)。
  • xxdシェルループを使用して出力を繰り返し、-lenオプション-seekを使用して検索の開始点を各バイトに変更します。

関連情報