浅谈应用签名及重签名原理

众所周知,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名称

最后,将重签名的包安装到手机上!

猜你喜欢

转载自www.cnblogs.com/Jacksun11/p/11654762.html