iOS APP签名原理
2020-12-29 本文已影响0人
Jey
苹果打包应用的时候需要证书才能安装,windows、安卓可以静默安装,苹果的证书机制保证了应用安装的安全性。
- 证书原理
- 手动重签名
- 自动化脚本重签名
证书加密解密原理
- Mac电脑中生成公钥M和私钥M,苹果服务器中存有私钥A,iPhone手机终端中存公钥A。
- Mac电脑通过CSR申请证书,CSR就是公钥,把他发到开发者后台,私钥A对公钥M的一次HASH加密签名,生成了开发者中的证书。下载到电脑,双击安装,在钥匙串访问证书那里,找到当前证书展开,有个专用秘钥,就是私钥M。
查看CSR
# 查看base64值
cat /Users/xx/Desktop/CertificateSigningRequest.certSigningRequest
# 查看CSR中包含的信息
cd CSR当前文件目录
openssl asn1parse -i -in CertificateSigningRequest.certSigningRequest
- 电脑私钥M对App的二进制文件HASH加密签名,加上APP可执行文件,还有证书一起打包
- 手机取出App里面的证书,使用手机端的公钥A解密证书,验证HASH是否正确,得到公钥M,公钥M再解密App的签名,看APP签名是否被篡改。
- 这样下来只要有证书就可以在任意设备中安装了,显然不行,还是会烂装,这个时候就要讲描述文件的作用了。
profile描述文件中包含设备ID,AppId,证书,App打包的时候就会再加上这个描述文件一起打包。
打包后就在显示包内容就在xxx.app里面
cd 描述文件目录
security cms -D -I 描述文件
可以看出它是一个加密了的xml文件,可以复制到xcode使用plist查看,跟info.plist一目了然
重签名
看一些命令,先进入.app的目录
- 查看打包的APP的签名信息
codesign -vv -d xxx.app
- 查看本机所有证书
security find-identity -v -p codesigning
- 查看可执行文件的加密信息,简称砸壳
otool -l xxxapp名称 | grep crypt
里面有个cryptid,是0的话没有加密,可能是越狱应用,1是加密应用
手动重签名
- 下载一个App,找到Payload丢到桌面,里面的xxx.app
- 显示包内容,如果有PlugIns文件夹,删除,它是一些Extension插件文件,是存储一些免费账号的,这部分不能重签名,先干掉PlugIns。如果有Watch,里面也有,Watch也干掉
- 对frameworks目录下文件重签名
借助当前xcode的证书
显示包内容
cd /frameworks
codesign -fs "证书" xxx.framework
注意证书要带双引号,提示xxx.framework: replacing existing signature表示成功
- 给可执行文件执行权限,比如微信
chmod +x WeChat
-
修改info.plist的bundle ID
-
生成en.plist权限文件,内容如下
-
重签名
codesign -fs "证书" --no-strict --entitlements=en.plist WeChat.app
- 使用命令打包成ipa
zip -ry WeChat.ipa /Payload