2012-03-15 8 views
15

La estructura de un archivo .mobileprovision se ve algo como esto:¿Cuál es la información binaria alrededor del plist en un archivo de perfil de provisión?

<!-- small binary data --> 

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

<!-- large binary data --> 

Tengo algunas preguntas en torno a este:

  1. ¿qué es esto de datos binarios?
  2. ¿Es útil?
  3. ¿Cómo puedo extraer el plist de un archivo .mobileprovision sin buscar límites XML?

Específicamente, consideraré esta pregunta como respondida (y otorgaré la recompensa de +100 junto con ella) cuando se respondan las preguntas anteriores Q1 y Q3.

Respuesta

23

Finalmente obtuve la respuesta de an answer to another question en SO.

Básicamente, el archivo .mobileprovision es un archivo XML cifrado CMS. Puede ser decodificado usando security en OS X:

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

La información que obtienes de este método también se puede obtener simplemente abriendo la provisión móvil en un editor de texto. después del XML, hay un bloque de datos extra que no se descodificará usando 'security'. –

+1

Lo sé; esa es precisamente la razón por la que hice esta pregunta. Lo que quería era una forma programable/de secuencias de comandos para obtener solo el XML y nada más. –

1

El archivo es básicamente la clave de distribución pública + cadena de certificados públicos de Apple + dispositivos permitidos que se pueden instalar en, siempre que el archivo IPA también esté firmado.

Su clave está codificada en la entrada plist. y los datos binarios después de la plist son los certficates públicos asociados: el certificado público de Apple raíz (descargable desde Apple y la Autoridad de Certificación iPhone de Apple (descargable a través de su portal de Apple)

[actualizada basada en comentarios]

. el verdadero objetivo es trabajar a cabo el certificado "nombre común" usó mi el archivo prestación móvil para que la aplicación puede ser re-firmado.

Dentro del archivo de aprovisionamiento móvil ApplicationIdentifierPrefix etiqueta contiene el ID de usuario del certificado. Este número podría ser utilizado para encontrar el certificado en la herramienta de llavero.

lo tanto de forma manual, los pasos serían:

  1. extraer el número ApplicationIdentifierPrefix del archivo .mobileprovision
  2. Abra la aplicación llavero. Mira a través de cada inicio de sesión/certificado para encontrar el uno con el juego UserId

Para automatizar el proceso

  1. plazo algún comando de fantasía UNIX para extraer el ID de
  2. plazo security find-certificate -a >a.out continuación grep para la identificación. Luego encuentra el nombre común del mismo registro.
+0

Básicamente, quiero renunciar a una aplicación con un archivo de aprovisionamiento diferente. Me preguntaba si, en lugar de especificar explícitamente el nombre del certificado con el que se debe resignar la aplicación, podríamos extraer la información del certificado de firma del nuevo perfil de aprovisionamiento. Mirar el contenido de un archivo .mobileprovision me llevó a esto. –

+0

¿Cómo extraigo solo la información de plist de este archivo? –

+0

AFAIK no puede renunciar porque tiene que firmar los binarios también durante el tiempo de compilación en XCode y luego en el IPA final. Aunque el último puede estar agregando el archivo XX.mobileprovisiong en el paquete de la aplicación como embedded.mobileprovisioning. Entonces, ¿su situación es que tiene una IPA/APP binaria pero no la fuente? – peterept

5

no tengo una respuesta a su pregunta inicial, pero puedo explicar cómo extraer el certificado de firma del archivo .mobileprovision:

  1. La parte de la plist .mobileprovision tiene una clave 'DeveloperCertificates', cuyo valor es una matriz de NSData.
  2. Cada NSData es un archivo .cer, el certificado de firma que está buscando.

Tengo un breve script de shell para extraer el tema del certificado de firma directamente desde.archivo de MobileProvision aquí: https://gist.github.com/2147247 - la secuencia de comandos funciona con un solo certificado en la matriz mencionada anteriormente, que debería ser el caso común.

Como puede ver en el guión, no tengo respuesta a su tercera pregunta, solo estoy recortando la primera línea y todo después de la etiqueta de cierre.

+0

Muchas gracias. Mientras que, como dijiste, no responde la pregunta inicial, todavía era muy útil: finalmente me enteré de que el certificado en la clave 'DeveloperCertificates' es un certificado x509, algo que planeaba hacer en SO ;-) Gracias tú. –

2

uso

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

si recibe el mensaje de error security: SecPolicySetValue: One or more parameters passed to a function were not valid solo tubo el error a /dev/null

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

El archivo es .mobileprovision a DER encoded ASN.1,

El plist es uno de los valores almacenados en este mensaje ASN.1.

Cuestiones relacionadas