本文演示的安装包是网易云音乐,下载自PP助手,查看内容使用Sublime text这个软件
一些问题
1,如何验证一个App的合法性?
2,App签名过程是怎么样的?
3,如何控制App权限?例如推送(APNS)等
前言
一个App是一个ipa格式的文件,该文件是一个压缩包
可以将后缀名改为zip 解压试试
iTunesArtwork => App的图标,一张高分辨率jpg图片。
iTunesMetadata.plist => App信息。包括名称、厂商、类别、账户、购买日期,购买账号等
META-INF => App属性。包括安装包大小等信息
Payload/neteasemusic => App程序主体了,它是一个格式为.app的文件
文件很多,这里重点关注_CodeSignature这个文件夹,_CodeSignature包含一个名为CodeResources的文件,该文件存储了ipa包内所有的文件的签名信息(均是md5摘要签名),打开它
CodeResources内容近8万行,这里截取其中一段内容,其他的格式都一样
合法性验证
安装包大概分为两种来源AppStore和AdHoc
AppStore下载的ipa内文件数量少于AdHoc分发
AdHoc多了一个名为embedded.mobileprovision的描述文件,选中点击空格可查看
该文件包含如下内容
当一个App被安装到iOS设备上时(AppStore 下载)
- 解压该Ipa文件,读取CodeResources文件,对其中每一个资源签名进行验证(RSA)
- 验证通过,安装成功
当一个App被安装到iOS设备上时(Adhoc 分发)
- 解压该Ipa文件,读取CodeResources文件,验证embedded.mobileprovision的签名是否正确
- mobileprovision验证通过,读取embedded.mobileprovision内容,解析证书,得到证书
- 用证书的公钥验证CodeResources其他文件的签名是否证书
- 所以资源验证通过,检查设备的ID 是否在 PROVISIONED DEVICES 内包含
- 如包含,安装成功