바이너리를 패치할 때 dd 프로그램이 예상대로 작동하지 않는 이유는 무엇입니까?

바이너리를 패치할 때 dd 프로그램이 예상대로 작동하지 않는 이유는 무엇입니까?

다음에 제공된 지침을 사용하여 바이너리를 패치하려고 합니다.이 답변.

기본 설정:

wget https://f000.backblazeb2.com/file/altstore/altserver/1_4_1.zip
unzip 1_4_1.zip

이 프로그램은 기본적으로 ipa 파일을 다운로드하고 서명한 후 내 iPhone에 푸시합니다. 내 주요 목표는 이 프로그램을 변경하여 동일한 베타를 로드하는 것이므로 다음과 같이 합니다.

strings -o -t d ~/Desktop/AltServer.app/Contents/MacOS/AltServer | grep ipa

나는 얻다:

450486 Unzipping .ipa...
455808 https://f000.backblazeb2.com/file/altstore/altstore.ipa
455872 Failed to remove downloaded .ipa.

분명히 ipa 파일을 다운로드할 수 있는 URL은 오프셋 455808에 있습니다. 위에서 언급한 Stackoverflow 답변에서 제공하는 지침을 사용하여 패치를 시도했습니다.

printf "https://f000.backblazeb2.com/file/altstore/altstore-beta.ipa" > tmp
dd if=tmp of=~/Desktop/AltServer.app/Contents/MacOS/AltServer obs=1 seek=455808 conv=notrunc

출력을 이진 코드로 작성합니다.

0+1 records in
60+0 records out
60 bytes transferred in 0.001586 secs (37832 bytes/sec)

그러나 문자열을 다시 실행하면 URL이 다른 곳에 설정됩니다. 예를 들면 다음과 같습니다.

$ strings -o -t d ~/Desktop/AltServer.app/Contents/MacOS/AltServer | grep ipa
439424 https://f000.backblazeb2.com/file/altstore/altstore-beta.ipa
450486 Unzipping .ipa...
455808 https://f000.backblazeb2.com/file/altstore/altstore.ipa
455872 Failed to remove downloaded .ipa.
459568 Failed to remove .ipa.

문자열은 분명히 잘못 작성되었으며 오프셋은 455808과 비교하여 439424입니다. 왜 이런거야? 어떻게 해결할 수 있나요?

참고: 문자열이 더 클 수 있으므로 쓰기가 불가능할 수 있다고 생각했으며 로컬 컴퓨터에서 더 짧은 URL로 바이너리를 자체 호스팅해 보았습니다.

http://192.168.0.108:4000/altstore.ipa

(다운로드한 altstore-beta.ipa의 이름을 altstore.ipa로 바꾸었지만 그래도 작동하지 않았고 잘못된 오프셋을 쓰는 동일한 문제가 발생했습니다.

관련 정보