iOS系统签名机制及权限控制

本文演示的安装包是网易云音乐,下载自PP助手,查看内容使用Sublime text这个软件

一些问题

1,如何验证一个App的合法性?
2,App签名过程是怎么样的?
3,如何控制App权限?例如推送(APNS)等

前言

一个App是一个ipa格式的文件,该文件是一个压缩包
可以将后缀名改为zip 解压试试

iOS系统签名机制及权限控制_第1张图片
ipa压缩包内部
iTunesArtwork =>  App的图标,一张高分辨率jpg图片。
iTunesMetadata.plist =>  App信息。包括名称、厂商、类别、账户、购买日期,购买账号等
META-INF => App属性。包括安装包大小等信息
Payload/neteasemusic => App程序主体了,它是一个格式为.app的文件
iOS系统签名机制及权限控制_第2张图片
显示包内容
iOS系统签名机制及权限控制_第3张图片
neteasemusic.app内部文件

文件很多,这里重点关注_CodeSignature这个文件夹,_CodeSignature包含一个名为CodeResources的文件,该文件存储了ipa包内所有的文件的签名信息(均是md5摘要签名),打开它

CodeResources内容近8万行,这里截取其中一段内容,其他的格式都一样


iOS系统签名机制及权限控制_第4张图片
CodeResources内容

合法性验证

安装包大概分为两种来源AppStore和AdHoc
AppStore下载的ipa内文件数量少于AdHoc分发
AdHoc多了一个名为embedded.mobileprovision的描述文件,选中点击空格可查看
该文件包含如下内容


iOS系统签名机制及权限控制_第5张图片
屏幕快照 2019-08-19 下午4.52.28.png

当一个App被安装到iOS设备上时(AppStore 下载)

  1. 解压该Ipa文件,读取CodeResources文件,对其中每一个资源签名进行验证(RSA)
  2. 验证通过,安装成功

当一个App被安装到iOS设备上时(Adhoc 分发)

  1. 解压该Ipa文件,读取CodeResources文件,验证embedded.mobileprovision的签名是否正确
  2. mobileprovision验证通过,读取embedded.mobileprovision内容,解析证书,得到证书
  3. 用证书的公钥验证CodeResources其他文件的签名是否证书
  4. 所以资源验证通过,检查设备的ID 是否在 PROVISIONED DEVICES 内包含
  5. 如包含,安装成功

你可能感兴趣的:(iOS系统签名机制及权限控制)