2012-03-15 4 views
15

Структура файла .mobileprovision выглядит примерно так:Что такое двоичные данные вокруг plist в файле профиля инициализации?

<!-- small binary data --> 

<?xml version="1.0" encoding="UTF-8"?> 
<!-- plist data --> 
</plist> 

<!-- large binary data --> 

У меня есть несколько вопросов вокруг этого:

  1. Что это двоичные данные?
  2. Полезно?
  3. Как извлечь plist из файла .mobileprovision без поиска границ XML?

В частности, я отвечу на этот вопрос в соответствии с ответом (и награду +100 баунти вместе с ним), когда отвечают как Q1, так и Q3.

ответ

23

Наконец-то я получил ответ от an answer to another question на SO.

В основном файл .mobileprovision является зашифрованным XML-файлом CMS. Это может быть расшифровано с помощью security на OS X:

security cms -D -i /path/to/profile.mobileprovision 
+0

Информацию, которую вы получаете от этого метода, также можно получить, просто открыв mobileprovision в текстовом редакторе. после XML существует блок дополнительных данных, которые с использованием 'security' не будут декодироваться. –

+1

Я знаю; именно поэтому я задал этот вопрос. То, что я хотел, было программируемым/доступным для сценариев способом получения только XML и ничего другого. –

1

Файл в основном является общедоступным ключом распространения + общедоступной цепочкой сертификатов Apple + разрешенными устройствами, на которые можно установить, до тех пор, пока файл IPA также подписан.

Ваш ключ закодирован в запись plist. и двоичные данные после PLIST являются ассоциированными общественные certficates: государственный сертификат Apple, Root (загружаемые из Apple и сертификации Apple, iPhone (загружаемые через ваш портал компании Apple)

[обновляется на основе комментариев]

. реальная цель состоит в том, чтобы разработать сертификат «общее имя» используется мой мобильный файл резерва, так что приложение может быть повторно подписал.

Внутри мобильного файла инициализации ApplicationIdentifierPrefix тег содержит идентификатор пользователя сертификата. Это число может используется для поиска сертификата в инструменте keychain.

Так вручную, шаги будут:

  1. Извлеките ApplicationIdentifierPrefix номер из файла .mobileprovision
  2. Откройте приложение брелка. Посмотрите через каждый логин/сертификат, чтобы найти один с соответствием UserId

автоматизировать процесс

  1. запустить некоторые фантазии команды Unix для извлечения ID
  2. запустить security find-certificate -a >a.out затем вычленить информацию идентификатора. Затем найдите общее имя из одной записи.
+0

В основном я хочу отменить приложение с другим файлом инициализации. Мне было интересно, если вместо того, чтобы явно указывать имя сертификата для выхода из приложения, мы могли бы извлечь информацию сертификата подписи из самого нового профиля обеспечения. Глядя на содержимое файла .mobileprovision, я подошел к этому. –

+0

Как извлечь информацию о plist из этого файла? –

+0

AFAIK вы не можете уйти в отставку - потому что вы также должны подписать двоичные файлы во время компиляции в XCode, а затем в окончательный IPA. Хотя позже может быть просто добавлен файл XX.mobileprovisiong в пакет приложения как embedded.mobileprovisioning. Итак, ваша ситуация заключается в том, что у вас есть бинарный IPA/APP, но не источник? – peterept

5

У меня нет ответа на ваш первоначальный вопрос, но я могу объяснить, как извлечь сертификат подписи из файла .mobileprovision:

  1. PLIST часть .mobileprovision имеет ключ «DeveloperCertificates», значение которого представляет собой массив NSData.
  2. Каждый NSData - это .cer-файл - сертификат подписи, который вы ищете.

У меня есть короткий сценарий оболочки для извлечения темы сертификата подписи непосредственно из.Файл mobileprovision здесь: https://gist.github.com/2147247 - скрипт работает только с одним сертификатом в упомянутом выше массиве, что должно быть обычным делом.

Как вы можете видеть в сценарии, у меня нет ответа на третий вопрос, я просто отсекаю первую строку и все после закрытия тега.

+0

Большое спасибо. Хотя, как вы сказали, он не отвечает на начальный вопрос, он по-прежнему очень полезен - я, наконец, узнал, что сертификат в ключе DeveloperCertificates является сертификатом x509, что я планировал спросить на SO ;-) Спасибо вы. –

2

использования

security cms -D -i /path/to/profile.mobileprovision 

если вы получите сообщение об ошибке security: SecPolicySetValue: One or more parameters passed to a function were not valid просто перенаправьте ошибку /dev/null

security cms -D -i /path/to/profile.mobileprovision 2> /dev/null 
1

Файл .mobileprovision является a DER encoded ASN.1,

Plist is одно из значений, сохраненных в этом сообщении ASN.1.

Смежные вопросы