20

.mobileprovision 文件的结构如下所示:

<!-- small binary data -->

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

<!-- large binary data -->

我对此有几个问题:

  1. 这是什么二进制数据?
  2. 有用吗?
  3. 如何在不搜索 XML 边界的情况下从 .mobileprovision 文件中提取 plist?

具体来说,当上面的 Q1 和 Q3 都得到回答时,我会认为这个问题已经回答(并奖励 +100 赏金)。

4

5 回答 5

26

我终于从另一个关于 SO的问题的答案中得到了答案。

基本上 .mobileprovision 文件是一个CMS加密的 XML 文件。它可以security在 OS X 上使用解码:

security cms -D -i /path/to/profile.mobileprovision
于 2012-07-11T10:17:36.070 回答
7

我没有回答您最初的问题,但我可以解释如何从 .mobileprovision 文件中提取签名证书:

  1. .mobileprovision 的 plist 部分有一个键“DeveloperCertificates”,其值是一个 NSData 数组。
  2. 每个 NSData 都是一个 .cer 文件 - 您正在寻找的签名证书。

我有一个简短的 shell 脚本,用于直接从 .mobileprovision 文件中提取签名证书的主题:https ://gist.github.com/2147247 - 该脚本仅适用于前面提到的数组中的一个证书,应该是常见的情况。

正如您在脚本中看到的,我没有回答您的第三个问题,我只是删除了第一行和结束标记之后的所有内容。

于 2012-03-21T14:25:57.993 回答
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
于 2017-04-25T07:51:42.177 回答
2

.mobileprovision 文件是DER 编码的 ASN.1

plist 是存储在此 ASN.1 消息中的值之一。

于 2017-11-14T08:26:16.963 回答
1

该文件基本上是公共分发密钥 + Apple 公共证书链 + 可以安装到的允许设备 - 只要 IPA 文件同样经过签名。

您的密钥被编码到 plist 条目中。plist 之后的二进制数据是相关的公共证书:Apple Root 公共证书(可从Apple和 Apple iPhone 证书颁发机构下载(可通过 Apple 门户下载)。

[根据评论更新]

真正的目标是计算出使用我的移动配置文件的证书“通用名称”,以便可以重新签署应用程序。

移动配置文件ApplicationIdentifierPrefix标签内包含证书 UserID。此编号可用于在钥匙串工具中查找证书。

所以手动,步骤是:

  1. ApplicationIdentifierPrefix从 .mobileprovision 文件中提取号码
  2. 打开钥匙串应用程序。查看每个登录名/证书以找到具有匹配 UserId 的登录名/证书

使过程自动化

  1. 运行一些花哨的 unix 命令来提取 ID
  2. 然后运行security find-certificate -a >a.out​​grep 以获取 ID。然后从同一记录中找到通用名称。
于 2012-03-15T10:07:23.123 回答