美文网首页
iOS应用包签名原理

iOS应用包签名原理

作者: yuanfeiyang | 来源:发表于2020-11-02 14:53 被阅读0次

应用签名我们从三个方面来进行讲解

1. 代码签名

2. 双层代码签名

3. 描述文件

一 代码签名

代码签名是对可执行文件或脚本进行数字签名,用来确认软件在签名后未被修改或损坏的措施。和数字签名原理一样,只不过签名的数据是代码而已。

我们先假设一下:苹果官方希望保证每一个安装到iOS上的APP都是经过他们允许的,他们会这样做,苹果官方生成一对非对称的公私钥,在iOS系统中内置一个公钥,私钥保留在苹果后台,我们传APP到AppStore时,苹果后台用私钥对APP数据进行签名,iOS下载这个APP时用公钥进行解密,验证签名,弱解密成功,这个肯定就是由苹果后台认证的,并且没有被修改过,也就达到了苹果的需求,每一个APP都是经过苹果官方允许的。可是

此种简单的代码签名方式,如果苹果的软件下载只有一个appStore渠道下载,那么代码签名就能保证应用安全了,可是唯一下载渠道是不可能的。就比如对于我们开发者iOSER而言,我们需要在开发APP时进行真机调试,而且苹果还开放了企业内部分发的渠道,企业证书签名的APP也是需要顺利安装的,这就导致简单的代码签名是无法满足要求的。

我们再来分析一下苹果的需求

1安装包不需要上传到AppStore,可以直接安装到手机上

2 苹果为了保证系统的安全性,又必须对安装的APP有绝对的控制权(经过苹果允许的才能安装,不能被滥用导致非开发APP也能被安装)

为了实现这些需求,iOS签名的复杂度就开始增加了,苹果在这里给的方案是双层代码签名。

二 双层代码签名

首先我们来看一张图

这张图可以看到双层代码签名的整个过程,下面我们来分析一下这张图

Mac电脑 :我们自己开发用的电脑

苹果服务器: 苹果开发者中心

iPhone : 我们开发用的手机

1 首先我们的开发用的电脑mac系统中生成非对称加密算法的一对公钥/私钥(我们的Xcode帮忙办了),在图上我们成为公钥M和私钥M

2 苹果自己有固定的一对公司钥,上文已经说过了,私钥在苹果后台,公钥在iOS系统的手机上,在这里我们在苹果服务器上的成为私钥A,iPhone手机上成为公钥A。

3 把公钥M以及一些你的开发者信息传到苹果后台(我们申请的CSR文件),苹果后台用私钥A去签名公钥M以及其他开发者数据,这样得到了一份数据包含了公钥M以及其签名,这份数据我们称为开发证书。

4 在开发时,编译完一个APP后,用本地的私钥M(也就是我们常说的P12文件)对这个APP进行签名,同时将前面得到的开发证书一起打包进APP里,安装到手机上。

5 在安装时,iOS系统取到这个开发证书,通过内置的公钥A来解密验证数字签名是否正确。

6 验证证书后确保了私钥M是苹果认证的,再用开发证书中解密后获取到的公钥M去解密验证APP签名,这样就间接的验证了安装行为是否是经过苹果官方允许的(这里只验证了安装行为,不验证APP是否被改动,是因为在开发阶段,APP代码内容是不断被更改的)。

上面的过程,已经可以保证开发者的认证和程序的安全性了,但是,细心的朋友会发现,这样的过程进行下去的话,会出现只要有了开发证书,那就能安装到所有的iPhone手机上了。不着急,接着看上图中的描述文件,上面的过程我们还没有提到过,现在我们来说下这个描述文件。

三 描述文件

描述文件(Provisioning profile)一般包括三样东西:证书、App ID、设备。当我们在真机运行或者打包一个项目的时候,证书用来证明我们程序的安全性和合法性。AppID和设备证明这个APP是可以安装在这台iPhone设备上的。

苹果为了解决应用滥用的问题,所以苹果又加了两个限制.

第一限制在苹果后台注册过的设备才可以安装.

第二限制签名只能针对某一个具体的APP.

并且苹果还想控制App里面的iCloud/PUSH/后台运行/调试器附加这些权限,所以苹果把这些权限开关统一称为Entitlements(授权文件).并将这个文件放在了一个叫做Provisioning Profile(描述文件)文件中.

描述文件是在AppleDevelop网站创建的(在Xcode中填上AppleID它会代办创建),Xcode运行时会打包进入APP内.所以我们使用CSR申请证书时,我们还要申请一个东西!! 就是描述文件!

在开发时,编译完一个 APP 后,用本地的私����钥M对这个APP进行签名,同时把从苹果服务器得到的 Provisioning Profile 文件打包进APP里,文件名为embedded.mobileprovision,把 APP 安装到手机上.最后系统进行验证。通过描述文件里的信息就可以判断这个APP是否可以安装在这台iPhone设备上。

总结:结合上面所描述的,我们现在就可以明确在开发时申请的一系列正书到底是什么,有什么作用,理解后我们就可以装逼啦,下篇文章我们讲解应用的重签名。我们就可以安装我们想要的APP咯。

相关文章

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

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

  • iOS应用包签名原理

    应用签名我们从三个方面来进行讲解 1.代码签名 2.双层代码签名 3.描述文件 一代码签名 代码签名是对可执行文件...

  • iOS签名机制

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

  • iOS包签名原理

    目的 先来看看苹果的签名机制是为了做什么。在 iOS 出来之前,在主流操作系统(Mac/Windows/Linux...

  • iOS应用签名原理

    前言 iOS真机调试、App打包等过程涉及到各种证书,CertificateSigningRequest、p12、...

  • iOS 应用签名原理

    本文将讲解苹果的应用签名原理,旨在理解了应用签名后可以对非自己的应用进行重签名。 下面将从三个方面去讲解应用的签名...

  • iOS应用签名原理

    一、代码签名 代码签名是对可执行文件或脚本进行数字签名,用来确认软件在签名后未被修改或损坏的措施。和 数字签名原理...

  • iOS 应用签名原理

    一. 代码签名 代码签名是对可执行文件或脚本进行数字签名.用来确认软件在签名后未被修改或损坏的措施。和数字签名原理...

  • iOS 应用签名原理

    欢迎访问我的博客原文 不少果粉对 Apple 钟情,与它的纯净、安全有很大关系,我们发现在苹果的设备上下载应用时,...

  • iOS应用签名原理

    1. 应用签名原理 以前操作系统上是不需要签名的,软件下载下来就能用,盗版横行。苹果希望解决这样的问题,保证每一个...

网友评论

      本文标题:iOS应用包签名原理

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