iOS应用签名(下)

作者: 请叫我Hank | 来源:发表于2018-10-11 17:10 被阅读373次
image.png

描述文件

前面的文章我们已经介绍了简单的应用签名但是这种签名方式并不能解决应用滥用的问题,所以苹果又加了两个限制.第一限制在苹果后台注册过的设备才可以安装.第二限制签名只能针对某一个具体的APP.并且苹果还想控制App里面的iCloud/PUSH/后台运行/调试器附加这些权限,所以苹果把这些权限开关统一称为Entitlements(授权文件).并将这个文件放在了一个叫做Provisioning Profile(描述文件)文件中.描述文件是在AppleDevelop网站创建的(在Xcode中填上AppleID它会代办创建),Xcode运行时会打包进入APP内.
所以我们使用CSR申请证书时,我们还要申请一个东西!! 就是描述文件!!流程如下

image.png
这个描述文件里面就是 可以安装的设备有哪些.. APP的ID是什么.. 权限是些什么!
在开发时,编译完一个 APP 后,用本地的私钥M对这个APP进行签名,同时把从苹果服务器得到的 Provisioning Profile 文件打包进APP里,文件名为embedded.mobileprovision,把 APP 安装到手机上.
image.png
我们可以利用$security cms -D -i embedded.mobileprovision命令查看Provisioning profile内容,这些Xcode创建的Profile文件都存放在~/Library/MobileDevice/Provisioning Profiles/目录下
image.png
注意! 每次我们新建项目其实会生成一个描述文件!选择运行到手机上!! 我们只需要编译一下!在APP包里面就可以看到.
image.png
那么为了便于我们查看信息! 我们可以通过Xcode来查看!!
image.png
当然,Provisioning profile本身也是通过签名认证的,所以别想着你可以更改里面的东西来达到扩充权限\设备的目的.只有老老实实的去网站向Apple申请一份权限更多\设备更多的profile。

整体的流程

首先我们总结一下刚才的一些名词

  • 证书:内容是公钥或者私钥,由认证机构对其签名组成的数据包!我们开发可以使用钥匙串访问看到
    image.png
  • P12:就是本地私钥,可以导入到其他电脑
  • Entitlements:权限文件,包含了APP一些权限的plist文件
  • CertificateSigningRequest:CSR文件包含了本地公钥的数据文件
  • Provisioning Profile:描述文件,包含了证书/Entitlements等数据,并由苹果后台私钥签名的数据包.

流程如下:

  • 第 1 步对应的是 keychain 里的 “从证书颁发机构请求证书”,这里就本地生成了一对公私钥,保存的 CertificateSigningRequest 里面就包含公钥,私钥保存在本地电脑里.
  • 第 2 步向苹果申请对应把 CSR 传到苹果后台生成证书.
  • 第 3 步证书下载到本地.这时本地有两个证书.一个是第 1 步生成的私钥,一个是这里下载回来的证书,keychain 会把这两个证书关联起来,因为他们公私钥是对应的,在XCode选择下载回来的证书时,实际上会找到 keychain 里对应的私钥去签名.这里私钥只有生成它的这台 Mac 有,如果别的 Mac 也要编译签名这个 App 怎么办?答案是把私钥导出给其他 Mac 用,在 keychain 里导出私钥,就会存成 .p12 文件,其他 Mac 打开后就导入了这个私钥.


    image.png
  • 第 4 步都是在苹果网站上操作,配置 AppID / 权限 / 设备等,最后下载 Provisioning Profile 文件。
  • 第 5 步 XCode 会通过第 3 步下载回来的证书(存着公钥),在本地找到对应的私钥(第一步生成的),用本地私钥去签名 App,并把 Provisioning Profile 文件命名为 embedded.mobileprovision 一起打包进去。所以任何本地调试的APP,都会有一个embedded.mobileprovision(描述文件)从App Store下载的没有.

APP签名的数据

这里对 App 的签名数据保存分两部分

  • 1.Mach-O 可执行文件会把签名直接写入文件里


    MachOView查看
  • 2.其他资源文件则会保存在 _CodeSignature 目录下在APP包里。


    image.png

至此关于iOS应用签名的原理就介绍完了.下篇文章将介绍iOS应用重签名技术.
由于知识水平有限如有错误及不足,欢迎大家留言区评论指正.

相关文章

  • IOS 逆向开发(四)App重签名

    1. 应用签名 应用签名原理回顾 上一篇博客“IOS 逆向开发(三)应用签名”中详细讲解了IOS 应用签名,证书的...

  • iOS应用签名(下)

    描述文件 前面的文章我们已经介绍了简单的应用签名但是这种签名方式并不能解决应用滥用的问题,所以苹果又加了两个限制....

  • iOS应用签名(下)

    描述文件 前面的文章我们已经介绍了简单的应用签名但是这种签名方式并不能解决应用滥用的问题,所以苹果又加了两个限制....

  • 10 - 应用签名原理和重签名实操

    iOS应用签名 什么是iOS应用签名? 在iOS出来之前,主流的操作系统(MacOS/Windows)软件随便从哪...

  • iOS开发逆向之应用重签名(上)

    本文主要介绍重签名的几种方式,以及如何对应用进行重签名, 应用重签名 从之前《iOS逆向应用签名》中可知,签名是指...

  • iOS签名机制

    应用签名的原理iOS APP签名机制详解iOS逆向之旅(基础篇) — App的签名机制【Xcode是如何将App安...

  • iOS应用签名(上)

    关于iOS应用签名我想一起探讨一下它的原理.首先我们需要了解一个东西,叫做数字签名 数字签名(digitally ...

  • iOS应用签名(上)

    关于iOS应用签名我想一起探讨一下它的原理.首先我们需要了解一个东西,叫做数字签名 数字签名(digitally ...

  • IOS 逆向开发(三)应用签名

    @[TOC](IOS 逆向开发(三)应用签名) 1. 数字签名 什么是数字签名? 数字签名(digitally s...

  • iOS 测试包

    若想测试iOS开发完成的应用需先给应用进行签名,进行签名则先要申请证书,不同的测试方式需要不同的证书。 测试iOS...

网友评论

  • NightWish_cf55:保存的 CertificateSigningRequest 里面就包含公钥,私钥保存在本地电脑里?那私钥到底存在哪里呢?怎么找到存私钥的位置?
    请叫我Hank:CSR文件会拉回来一个证书,这个证书里面就包含了公钥和认证信息。那么与这个证书里面公钥对应的私钥在电脑里。你打开钥匙串访问-->我的证书-->找到你拉回来的证书展开。你会看到一个”专用密钥“。这个密钥就是与证书对应的私钥。也是你导出给别人的p12文件。

本文标题:iOS应用签名(下)

本文链接:https://www.haomeiwen.com/subject/gsnpaftx.html