浅谈应用签名及重签名原理
作者:互联网
众所周知,iOS系统相对于安卓系统,具有更少的盗版软件和安全漏洞。为什么呢,因为iOS系统采用了一种签名的机制。
一、苹果系统的签名机制
1、苹果的需求:
- 安装包不需要上传到App Store,可以直接安装到手机上
- 苹果味了保证系统的安全性,必须对安装的APP有绝对的控制权
- 经过苹果允许才可以安装
- 不能被滥用导致非开发APP也能被安装
为了实现这些需求,iOS签名的复杂度就大大增加了,苹果给出的解决方案是双层签名:
双层签名原理:
(1)Mac电脑里存在的公钥M和私钥M,通过CSR文件向苹果服务器申请证书,苹果公司会针对公钥M进行加密,返回一个携带公钥M和HASH值的证书;
(2)电脑如何把APP安装到手机上,用电脑上的私钥M对应用进行签名,同时将证书一同放进APP内进行打包ipa(这些步骤都是xcode里完成);
(3)打包好的IPA包尝试往手机上安装的时候,苹果会用公钥A对其进行解密验证,得到公钥M,用公钥M查看这个APP包是否是苹果颁发的证书,如果都验证通过,则可以安装。
2、描述文件的产生
以上签名会导致一个问题的发生,就是所有的手机都可以进行安装,为了解决应用滥用的问题,苹果增加了两个限制:
- 第一限制是在苹果后台注册过的设备才可以进行安装。
- 第二限制是签名只能针对某一个具体的APP。
并且苹果还想控制APP里面的iCloud/push/后台运行/调试器附加这些权限,所以苹果把这些权限开关统一称为Entitlements(授权文件),并将这个文件放在了一个叫Provisioning Profile(描述文件)文件中。
描述文件查看位置:~/资源库/MobileDevice/Provisioning Profiles
二、应用重签名
下载重签名应用的IPA包,然后解压缩.
查看ipa包的签名信息:
$ codesign -vv -d WeChat.app
查看下载的IPA包是否是越狱包:
$ otool -l WeChat > ~/Desktop/123.txt
搜索criptid,如果值为0,则为越狱包,如果为1,则为正版包
列出钥匙串里可签名的证书:
$ security find -identity -v -p codesigning
强制替换签名:
$ Codesign -fs "证书名称" 文件名
给文件添加权限:
$ Chmod + x 可执行文件
重签步骤:
1、进入应用.app文件,删除Plugins、Watch插件
2、重签Frameworks
$ codesign -fs "证书名称" 文件名
3、新建一个工程,申请描述文件,build应用
4、拷贝描述文件到APP包里
5、更改info.plist里的bundle ID(必须与描述文件的bundle ID一致)
6、签名整个APP包
签名方法:$ security cms -DI 描述文件
拷贝<key>Entitlements</key>
<dict></dict>里的内容
在工程里新建一个plist文件,将上面的代码拷贝进去,然后将新建的plist文件拷贝出来,与app文件和描述文件放置在同一个目录内
7、签名
$ codesign -fs "证书名称" --no-strict --entitlements=plist文件名 APP名称
最后,将重签名的包安装到手机上!
标签:文件,浅谈,证书,APP,及重,苹果,安装,签名 来源: https://www.cnblogs.com/Jacksun11/p/11654762.html