"bgrep"を介してLUKSヘッダーの位置を取得する方法

LUKSヘッダーの位置を取得しようとしています。

grep -a -b -P --only-matching 'LUKS\xba\xbe' /dev/sdb

すでにメモリが不足しています。

何人かの人々は「bgrep」を代わりに使用することを提案しましたが、それがどのように機能するのかわかりません。

bgrep -A 20 'LUKS\xba\xbe' /dev/sda
./bgrep: invalid 2-hex-digit byte value: 'LU'

では、これをどのように実行しますか?

ベストアンサー1

grepラインの最後まで読み取るためメモリが不足する傾向がありますが、バイナリデータでは長い間ラインの終わりが出ない場合があります。おおよそ次のように、メモリサイズより小さいチャンクに対してgrepを使用してgrepを使用できます。

# dd bs=1M iflag=fullblock if=/dev/sdb skip=X count=Y | grep ...

すべてのブロックについてすすぎ、繰り返します。データが正しくソートされているかどうかわからない場合は、ブロックをいくつかのオーバーラップさせます(次のX = X + Y-1)。

それとも、stringsそうです。おそらくメモリ消費セクションを避けてください(印刷可能な長いASCII行は発生しない可能性があります)。その後、確認するオフセットのリストがあります。その部分がstrings除外されたため、間違った一致になる可能性があります。\xba\xbe

# strings -t d -n 4 /dev/sdb | grep 'LUKS$'
11534336 LUKS
23068672 LUKS
34603008 LUKS
# losetup --find --show --offset=23068672 /dev/sdb
/dev/loop9
# cryptsetup luksDump /dev/loop9

testdiskまたは同じツールbinwalkカスタムマジックシグネチャー)はLUKSヘッダーをより効率的に見つけることができます。しかし、迅速なハッキングのためには、通常、うまくstrings動作します。

おすすめ記事