Ios 配置配置文件中plist周围的二进制数据是什么?

Ios 配置配置文件中plist周围的二进制数据是什么?,ios,xcode,cocoa-touch,plist,provisioning-profile,Ios,Xcode,Cocoa Touch,Plist,Provisioning Profile,.mobileprovision文件的结构如下所示: <!-- small binary data --> <?xml version="1.0" encoding="UTF-8"?> <!-- plist data --> </plist> <!-- large binary data --> 关于这一点,我有几个问题: 这个二进制数据是什么 它有用吗 如何从.mobileprovision文件中提取plist而不搜索XML

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

<!-- small binary data -->

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

<!-- large binary data -->

关于这一点,我有几个问题:

  • 这个二进制数据是什么
  • 它有用吗
  • 如何从.mobileprovision文件中提取plist而不搜索XML边界

  • 具体地说,当上述Q1和Q3都被回答时,我将考虑这个问题(并给予它+100的赏金)。

    < P>文件基本上是公共分发密钥+苹果公共证书链+允许安装的设备——只要IPA文件同样签名。p> 您的密钥被编码到plist条目中。plist后面的二进制数据是相关的公共证书:Apple根公共证书(可从和Apple iPhone证书颁发机构下载)(可通过Apple portal下载)

    [根据评论更新]

    真正的目标是计算出移动设备配置文件中使用的证书“common name”,以便可以重新签署应用程序。

    在移动配置文件
    ApplicationIdentifierPrefix
    中,标记包含证书用户ID。此数字可用于在密钥链工具中查找证书

    因此,手动执行以下步骤:

  • 从.mobileprovision文件中提取
    ApplicationIdentifierPrefix
    编号
  • 打开keychain应用程序。查看每个登录/证书以找到具有匹配用户ID的登录/证书
  • 使过程自动化

  • 运行一些奇特的unix命令来提取ID
  • 运行
    security find certificate-a>a.out
    然后grep查找ID。然后从同一记录中查找通用名称

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

  • .mobileprovision的plist部分有一个键“DeveloperCertificates”,其值是NSData数组
  • 每个NSData都是一个.cer文件—您正在寻找的签名证书
  • 我有一个简短的shell脚本,用于直接从.mobileprovision文件中提取签名证书的主题:-该脚本仅适用于前面提到的数组中的一个证书,这应该是常见的情况


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

    我终于从SO那里得到了答案

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

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

    如果收到错误消息
    security:SecPolicySetValue:传递给函数的一个或多个参数无效
    只需将错误传递到
    /dev/null

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

    .mobileprovision文件是一个


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

    基本上我想退出具有不同配置文件的应用程序。我想知道,我们是否可以从新配置文件本身提取签名证书信息,而不是显式指定退出应用程序的证书名。查看一个.mobileprovision文件让我想到了这一点。我如何从这个文件中提取plist信息?好吧,你不能辞职-因为你必须在XCode编译期间对二进制文件进行签名,然后是最终的IPA。虽然后者可能只是将XX.mobileprovising文件作为embedded.mobileprovising添加到应用程序包中。所以你的位置最重要的是你们有一个二进制IPA/应用程序,但并没有源代码?这对如何管理资源调配安全性进行了很好的分析。不,我并没有查看IPA中的plist文件。我们的部署过程是这样的——我们嵌入了一个带有临时资源调配配置文件的应用程序进行beta测试。若beta测试顺利,我们只需使用pp使用
    xcrun
    命令存储设置配置文件。现在,此命令的相关咒语要求我提供设置配置文件和签名证书名称。由于设置配置文件确实包含签名证书信息,我想知道我们是否可以避免编写此信息。非常感谢。但是,正如您所说aid,它没有回答最初的问题,它仍然非常有用——我终于了解到“DeveloperCertificates”密钥中的证书是x509证书,这是我打算问的;-)谢谢。通过这种方法获得的信息也可以通过在文本编辑器中打开mobileprovision获得。在XML之后,有一块额外的数据,使用
    security
    无法解码;这正是我提出这个问题的原因。我想要的是一种可编程/可编写脚本的方式,只获取XML而不获取其他内容。
    security cms -D -i /path/to/profile.mobileprovision 2> /dev/null