探究IPhone怎么验证App合法、开发怎么验证?

2018-05-10  本文已影响101人  struggle3g

引言

每开发完一个App,正规的途径想让大家都可以下载这个App,我们需要上架在AppStore,会不会想到一个问题,AppStore是怎么知道我们的App是不是正规的,也就是说怎么知道从AppStore中下载的?
根据上面的问题,研究一番以后

Apple的好处是:

  1. 所有的App如果想让所有的用户下载,必须通过AppStore
  2. 所有的IPhone都是Apple一家制造
  3. 硬件、服务、设计一家所有

综合上述条件Apple公司可以实现验证App的目的,如果只验证App是否合法,Apple公司可以这么搞:

需要的准备

验证步骤

  1. 先上架开发完成App到AppStore
  2. AppStore用自己的私钥对App签名(也就是对App标示的hash值进行私钥加密)
  3. IPhone安装App时,用IPhone中的公钥对App解密,然后验证App标示
  4. 验证通过?安装:不安装


如果开发者也是这个过程那么,开发者的开发时间成本也就太大了。

开发者调试App验证

需要的准备

步骤

  1. 用Mac电脑的CSR文件(也就是公钥)向AppleServer申请证书
  2. AppleServer生成一个证书Z,包含对1中的公钥进行加密(用ApplerServer的私钥B加密)的hash值,以及公钥A, 返回给本地电脑
  3. 我们安装的App不单单只有一个可执行文件,包含了:公钥A加密App的hash值的签名D、从AppleServer生成的证书,当然还有别的本文讲不到
    • 一个正常的可安装的App包含的内容:
      • 可执行文件
      • 公钥A对App的hash值的签名D(加密)
      • AppleServer生成的证书Z
  4. 手机取出App的证书Z,用公钥B对这个证书Z进行解密拿到公钥A,以及App的hash值 然后验证这个证书是否合法
  5. 用公钥A解密签名D拿到App的hash值,进行验证是否合法
  6. 通过4,5双重验证推送证明该App合法,可以正常调试、安装了

问题?

当然你可以在上述基础上面验证App的合法性,但是有问题,我只要申请一个证书,我就可以在任何的IPhone上面安装这个App,这样没有达到完成控制的目的,Apple肯定不乐意,理所应当的又弄了一个权限文件,也就是大家熟悉的描述文件provisionprofile文件

描述文件也是通过签名认证的所以也无法修改,so只能去AppleServer申请。

步骤就会变成酱紫

  1. 用Mac电脑的CSR文件(也就是公钥)向AppleServer申请证书
  2. AppleServer生成一个证书Z,包含对1中的公钥进行加密(用ApplerServer的私钥B加密)的hash值,以及公钥A, 返回给本地电脑
  3. 我们安装的App不单单只有一个可执行文件,包含了:公钥A加密App的hash值的签名D、从AppleServer生成的证书,当然还有别的本文讲不到
    • 一个正常的可安装的App包含的内容:
      • 可执行文件
      • 公钥A对App的hash值的签名D(加密)
      • AppleServer生成的证书Z
  4. Xcode拿到证书Z以及Mac本地的私钥对App进行签名
  5. 将证书Z、描述文件、签名D、MachO文件一起打包到手机
  6. 手机取出App的证书Z,用公钥B对这个证书Z进行解密拿到公钥A,以及App的hash值 然后验证这个证书是否合法
  7. 用公钥A解密签名D拿到App的hash值,进行验证是否合法
  8. 通过4,5双重验证推送证明该App合法,可以正常调试、安装了


验证结果

2.MachO可执行包里面

上一篇 下一篇

猜你喜欢

热点阅读