ELF x86_64(기본적으로 실행 파일)가 있고 파일의 문자열 리터럴을 바꾸고 싶습니다(그러나 실행 파일을 손상시키지 않고)... Linux bash/sh 스크립트 작동을 사용하여 프로그래밍 방식으로 이 작업을 수행해야 합니까? .
어떤 방법이 가장 쉬운가요?
sed
일반 텍스트 파일과 같이 어딘가에서 사용할 수 있지만 새 문자열은 이전 문자열보다 길어서는 안 되며 0으로 끝나야 한다는 제한이 있다는 내용을 읽었습니다 . 더 긴 문자열 교체를 사용하시겠습니까?
감사해요.
답변1
이렇게 하면 더 짧은 대체 항목을 NUL로 채우고 더 긴 대체 항목을 잘라 실수로 파일이 손상되는 것을 방지할 수 있습니다.
만약 너라면진짜더 긴 문자열로 교체해야 하며, 다시 컴파일하는 것 외에는 다른 방법이 없습니다(또는 파일에서 또 다른 긴 문자열을 하이재킹하고 이전 문자열에 대한 모든 참조를 There를 가리키도록 변경하는 등 즉석에서 해킹 기술을 사용함). ELF 파일은 안드로이드 APK와 같은 아카이브가 아닙니다.
perl -0777 -pe 's/PATTERN/substr q{REPLACEMENT}."\0"x length$&,0,length$&/e or die "pattern not found"' -i file
필요한 모든 것을 변경 PATTERN
하고 변경하십시오. () 에서 NUL REPLACEMENT
과 일치하지 않도록 주의하세요 .\0
PATTERN
이것은 아마도 더 간단해질 수 있습니다.
예:
$ cp /bin/sh /tmp/sh
$ /tmp/sh -c 'exec 7</tmp/jeg'
/tmp/sh: 1: cannot open /tmp/jeg: No such file
$ perl -0777 -pe 's/No such file/substr q{BLA BLA WHATEVER}."\0"x length($&),0,length$&/e' -i /tmp/sh
$ /tmp/sh -c 'exec 7</tmp/jeg'
/tmp/sh: 1: cannot open /tmp/jeg: BLA BLA WHAT