2009-07-17 4 views
0

내 iPhone 응용 프로그램에 plist 파일을 포함하고 있습니다. 이진 형식입니다 (plutil을 사용하여 xml에서 이진으로 변환). 런타임에 MD5 체크섬 (또는 SHA-1)을 실행하여 내용이 예상 한 내용인지 확인하려고합니다. 불행히도, 나는 항상 원래 포함 된 것과 다른 체크섬을 얻습니다. MD5 합계를 잘못 계산했다고 가정하고 한시간이 지난 후에 테스트를 실행하고 그 바이트가 실제로 동일한 지 확인했습니다. 그들은 그렇지 않습니다. 파일 크기는 동일하지만 바이트 30에서 시작하여 파일 전체에서 (마지막 32 바이트 제외) 파일 내용은 완전히 다릅니다. 아이디 앱에 포함되기 전에 속성 목록 파일에 서명이되어 있거나 다른 바이너리 형식으로 "컴파일"되어있는 사람은 누구입니까? 그렇다면 프로세스에 대한 자세한 내용을 제공 할 수 있습니까?plist (속성 목록) 파일 md5sum이 iPhone 응용 프로그램에 컴파일 될 때 변경됩니다.

미리 감사드립니다.

답변

1

기본적으로 스트레이트 카피를 수행하는 대신 Xcode는 작은 스크립트를 사용하여 plist 파일을 처리하고 복사합니다 표적을 만들 때. Xcode에서 대상에 대한 정보 창을 가져 와서 "규칙"탭을 선택하면 text.plist 소스 파일을 처리하기 위해 CopyPlistFile이라는 자체 도구가 사용됩니다. plist가 유효한지 확인하기 위해 몇 가지 기본 검사를 수행하고, 기본적으로 변환이 수행되지는 않지만 표시기를 다른 형식으로 선택적으로 변환 할 수 있습니다.

이것이 plist 파일의 변경을 일으키는 지 알 수 없지만 원하는 경우 프로젝트의 plist 파일 자체에 대한 정보를 얻고 파일 유형을 "text.plist"에서 " "본문". Xcode는 속성 목록 파일이 아닌 일반 텍스트 파일로 처리해야하며 CopyPlistFile 도구를 통해 실행하는 대신 직선 복사본을 만듭니다.

+0

정말 도움이되었습니다. 팁 고마워. plutil을 통해 이진 속성 목록으로 전환했지만 여전히 Xcode에 text.plist.xml 유형이 있습니다. 주위를 둘러 보니 다음 논리적 선택이 file.bplist 인 것처럼 보입니다. 그걸 바꿨고 파일이 더 이상 수정되지 않았습니다. 이상하게도 (또는 아님), 수정되기 전에 바이너리 형식을 유지하면서 올바른 내용을 가지고 있었고, 다른 md5 체크섬을 사용했습니다. – Aaron

0

왜이 질문에 스택을 게시할까요? 나는 당신의 질문에 대한 답을 모른다. 그러나 나는 왜 당신이 그것에 시간을 보내는 지 궁금하다.

앱에 디지털 서명이되어 있기 때문에 PList의 무결성에 대해 우려하는 이유는 무엇입니까? 누군가 수정 한 경우 디지털 서명이 더 이상 유효하지 않기 때문에 앱이 설치되지 않습니다.

다른 이유는 해킹당한 앱에 대해 우려하는 것일 수 있습니다. 완벽하게 합리적이지만 누군가가 앱을 해킹 할 수 있다면 PList를 수정하고 코드에서 체크섬을 변경하여 여전히 실행되도록 할 수 있습니다. 실제로 콘텐츠를 타사 (예 : 서버)에서 가져 오지 않고 콘텐츠의 무결성을 보장 할 수있는 방법이 없습니다.

+0

매우 합법적 인 질문입니다. MD5 합계의 이유는 내 서버로 보내 속성 목록 파일의 업데이트가 있는지 확인할 수 있기 때문입니다. 합계가 서버에있는 것과 일치하면 서버는 그 내용을 유지합니다. 그렇지 않으면 서버가 새 사본을 보내고 합계를 사용하여 전체 파일이 올바르게 수신되었는지 확인합니다. 그래서 나는 누군가가 그것을 수정했는지에 대해 너무 신경 쓰지 않고 오히려 업데이트를 가져 오는 기초로 삼는다. 번들링 중이던 버전이 앱에서 끝난 버전이 아니기 때문에 내 혼란이있었습니다. – Aaron

+1

이것은 정확히 알아 내려고하는 기능입니다. 파일에서 md5를 가져 오는 방법에 대한 몇 가지 코드를 남겼 으면 좋겠다. –