Grep, 그러나 바이너리 파일의 경우

Grep, 그러나 바이너리 파일의 경우

데이터 복구 소프트웨어로 생성된 이미지 파일 조각이 있습니다. 전체 원본이 내 홈 파일 서버 어딘가에 있을 것 같습니다.

텍스트 파일의 조각인 경우 고유해 보이는 조각을 가져와 실행 grep -r -l -F하고 몇 시간 후에 다시 돌아와서 답변을 얻을 수 있습니다. 하지만 바이너리 파일이기 때문에 마음에 들지 않는 것(예: null 바이트)이 모두 포함되어 있으며 , 이를 극복할 수 있더라도 잘못된 입력 UTF-8을 grep제공하는 방법을 모르겠습니다 .grep

가급적이면 나만의 검색 프로그램을 작성하지 않고 원본 텍스트를 검색하려면 어떻게 해야 합니까?

(중복이 아닙니다.이 문제: 제목이 어떻게 들리든 바이너리 파일에서 문자열을 찾는 내용인데, 저는 바이너리 파일에서 바이너리 데이터를 찾고 있습니다. )

답변1

나는 무엇을 할 것인가:

grep -a -r -l -F <fixed string> .

-a, --text
바이너리 파일을 텍스트인 것처럼 처리합니다. 이는 --binary-files=text 옵션과 동일합니다.

또는

find . -type f -exec sh -c '
    strings "$1" | grep -lF <fixed pattern>
' sh {} \;
 

strings - 파일에 인쇄 가능한 문자 시퀀스를 인쇄합니다.

답변2

당신은 할 수먼저 다음을 사용하여 바이너리를 덤프합니다.OD:

grep 효율성을 최대화하기 위해 -x 및 -w256 옵션을 사용하여 파일 크기와 행 수를 줄이는 것이 좋습니다. 불필요한 오프셋 주소를 제거하려면 -A n 옵션을 사용해야 합니다.

od -x -A n -w256 yourbinary_fragment > pattern.txt

또한 -j -N 및 -w 옵션을 적극적으로 사용하거나 Pattern.txt를 다시 편집하여 행 수를 최소한으로 줄일 수도 있습니다. (grep의 작업을 상당히 쉽게 하기 위해)

그 다음에패턴과 일치하는 파일 찾기버림받은 후

find . -type f -exec sh -c '
    od -x -A n -w256 "$1" | grep -lFf pattern.txt
' sh {} \;

컴퓨터를 다른 목적으로 사용하는 경우 SCHED_BATCH 프로세스를 권장합니다.

답변3

perlSys::Mmap 모듈을 사용하세요 ( libsys-mmap-perlDebian 패키지에 있음):

fragment=/path/to/your/fragment
size=$(( $(wc -c < "$fragment") - 1 ))
find . -type f -size "+${size}c" -print0 | 
  perl -MSys::Mmap -l -0sne '
    BEGIN {
      open N, "<", $needle or die "$ARGV[0]: $!\n";
      mmap($n, 0, PROT_READ, MAP_SHARED, N);
    }
    if (open H, "<", $_) {
      mmap($h, 0, PROT_READ, MAP_SHARED, H);
      print if index($h, $n) >=0;
    } else {
      warn "$_: $!\n";
    }' -- -needle="$fragment"

답변4

한 파일이 다른 파일의 첫 번째 부분이라고 의심되는 경우 두 파일에서 처음 몇 바이트를 가져와 비교할 수 있습니다.

# Omit or change the bytes arguments as needed, see `man head`
head --bytes=1032 file1.bin > /tmp/file1.head.bin
head --bytes=1032 file2.bin > /tmp/file2.head.bin
diff --text /tmp/file.head.*

를 사용하여 파일을 시각적으로 볼 수도 있습니다 xxd /tmp/fil1.head.bin. 마지막으로 Meld 또는 Beyond Compare와 같은 프로그램을 사용하면 파일을 시각적으로 나란히 비교할 수 있습니다.

관련 정보