응용 프로그램에 코드 서명이 있으면 .app 번들의 어떤 부분에서 서명이 적용됩니까?


13

Mountain Lion에서는 Mac App Store의 모든 응용 프로그램을 포함한 일부 응용 프로그램에 개발자가 디지털 서명을했기 때문에 수정하면 서명이 일치하지 않으며 모든 종류의 오류 (및 상황)가 발생합니다. 운영 체제의 다음 릴리스와 함께 확대됩니다 ...).

내 질문은 .app 번들의 어떤 부분이 서명을 다루고 있습니까? 경우 어떤 에서 Appname.app/Contents합니다 (대한 수정 한 날짜와 같은 메타 데이터를 포함하여 변경 Contents폴더), 그 틈 서명을합니까? 이진에만 Contents/MacOS있습니까? 서명에 .plists가 포함되어 있습니까? Resources? 최종 사용자로서 서명을 위반하지 않고 무엇을 해킹 할 수 있습니까?


테스트를 시작하고 알려주십시오!
Adam Davis

아무도 답을 모른다면 할 수는 있지만 이미 테스트 한 사람이라면 바퀴를 재발 명할 필요가 없습니다.
다니엘

1
그 휠 수 완전히 하지만, 몇 가지 개선 사항을 사용합니다. 크롬 스피너는 필수품이라고 생각합니다.
Adam Davis

답변:


14

TL; DR 서명 할 앱 조각을 선택하고 해당 조각을 무단으로 변경하여 앱을 시작할 때 어떤 작업을 수행할지 여부는 개발자에게 달려 있습니다. 앱별로이를 파악하려면 시행 착오를 사용해야합니다.

응용 프로그램 번들의 어떤 구성 요소가 응용 프로그램을 제공하기 전에 서명을 할 것인지를 결정하는 것은 개발자의 몫입니다. 해시 서명을 변경하지 않고 이러한 것들을 수정하는 것은 거의 불가능하기 때문에 봉인의 내용은 사실상 훼손되지 않습니다. 그러나 이것이 실제로 조작 할 수 없다는 것을 의미하지는 않습니다.

Apple 개발자 안내서 에는 서명해야 할 내용에 대해 설명되어 있습니다.

응용 프로그램, 도구, 숨겨진 도우미 도구, 유틸리티 등 제품의 모든 실행 파일에 서명해야합니다. 응용 프로그램 번들에 서명하면 해당 리소스는 다루지 만 도구 및 하위 번들과 같은 하위 구성 요소는 다루지 않습니다. 이들 각각은 독립적으로 서명해야합니다.

응용 프로그램이 사용자에게 단일 얼굴을 표시하려고하는 하나 이상의 작은 도우미 도구가 포함 된 큰 UI 부분으로 구성된 경우 동일한 코드 서명 식별자를 모두 제공하여 코드 서명과 구분할 수 없도록 만들 수 있습니다. (Info.plist에서 CFFundleIdentifier 값이 모두 같거나 codesign 명령에서 -i 옵션을 사용하여 동일한 식별자를 지정하면됩니다.)이 경우 모든 프로그램 구성 요소에 동일한 키 체인 항목에 액세스하고 동일한 프로그램으로 검증합니다. 관련된 프로그램이 실제로 구별없이 단일 엔티티를 형성하려는 경우에만이를 수행하십시오.

범용 바이너리 (번들 또는 도구)에는 각 아키텍처 구성 요소에 개별 서명이 자동으로 적용됩니다. 이들은 독립적이며 일반적으로 최종 사용자 시스템의 기본 아키텍처 만 확인됩니다.

설치 프로그램 패키지 (.pkg 및 .mpkg 번들)의 경우 페이로드가 포함 된 CPIO 아카이브, 설치 스크립트가 포함 된 CPIO 아카이브 및 BOM (Bill of Material)에는 각각 XAR에 해시가 기록됩니다. 헤더와 헤더가 차례로 서명됩니다. 따라서 패키지에 서명 한 후 설치 스크립트 (예 :)를 수정하면 서명이 유효하지 않습니다.

플러그인 및 라이브러리에 서명 할 수도 있습니다. 현재는 필요하지 않지만 앞으로는 이러한 구성 요소에 서명을하는 데 단점이 없습니다.

상황에 따라 codesign은 Mach-O 실행 파일에 추가하거나 확장 속성을 추가하거나 번들의 Contents 디렉토리에 새 파일을 생성 할 수 있습니다. 다른 파일은 수정되지 않았습니다.

또한 여기 에서 응용 프로그램에 잘못된 서명이 있다는 것이 응용 프로그램이 시작되지 않는다는 것을 의미하는 것은 아닙니다. 페이지는 말합니다 :

서명을 확인할지 여부와 결정하는 경우 해당 확인 결과를 평가하는 방법을 결정하는 것은 서명 된 코드를 시작하거나로드하는 시스템 또는 프로그램에 달려 있습니다.

응용 프로그램은 수정을 허용하도록 선택할 수 있습니다.

가장 좋은 방법은 수정하려는 응용 프로그램에 대한 시행 착오 접근법입니다. 작동 할 수도 있고 작동하지 않을 수도 있습니다. 항상 대답 할 수있는 것은 없습니다.

앱에 서명 한 경우 번들에서 Contents/CodeResources파일 또는 파일을 찾을 수 있습니다 Contents/_CodeSignature/CodeResources. 이 파일은 모든 서명 된 구성 요소와 예상되는 해시 값을 번들로 나열합니다. 개발자가 변경 사항을 감시하기에 충분히 중요하다고 생각되는 응용 프로그램을 이해하기 시작하는 것이 좋습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.