"bgrep"을 통해 LUKS 헤더의 위치를 ​​얻는 방법

"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일반적으로 잘 작동합니다.

관련 정보