iOS APP签名原理

2020-12-29  本文已影响0人  Jey

苹果打包应用的时候需要证书才能安装,windows、安卓可以静默安装,苹果的证书机制保证了应用安装的安全性。

证书加密解密原理

  1. Mac电脑中生成公钥M和私钥M,苹果服务器中存有私钥A,iPhone手机终端中存公钥A。
  2. Mac电脑通过CSR申请证书,CSR就是公钥,把他发到开发者后台,私钥A对公钥M的一次HASH加密签名,生成了开发者中的证书。下载到电脑,双击安装,在钥匙串访问证书那里,找到当前证书展开,有个专用秘钥,就是私钥M。

查看CSR

# 查看base64值
cat /Users/xx/Desktop/CertificateSigningRequest.certSigningRequest

# 查看CSR中包含的信息
cd CSR当前文件目录
openssl asn1parse -i -in CertificateSigningRequest.certSigningRequest
  1. 电脑私钥M对App的二进制文件HASH加密签名,加上APP可执行文件,还有证书一起打包
  2. 手机取出App里面的证书,使用手机端的公钥A解密证书,验证HASH是否正确,得到公钥M,公钥M再解密App的签名,看APP签名是否被篡改。
截屏2020-12-30 上午10.09.48.png
  1. 这样下来只要有证书就可以在任意设备中安装了,显然不行,还是会烂装,这个时候就要讲描述文件的作用了。
    profile描述文件中包含设备ID,AppId,证书,App打包的时候就会再加上这个描述文件一起打包。
    打包后就在显示包内容就在xxx.app里面
cd 描述文件目录
security cms -D -I 描述文件

可以看出它是一个加密了的xml文件,可以复制到xcode使用plist查看,跟info.plist一目了然


重签名

看一些命令,先进入.app的目录

  1. 查看打包的APP的签名信息
codesign -vv -d xxx.app
  1. 查看本机所有证书
security find-identity -v -p codesigning
  1. 查看可执行文件的加密信息,简称砸壳
otool -l xxxapp名称 | grep crypt

里面有个cryptid,是0的话没有加密,可能是越狱应用,1是加密应用

手动重签名
  1. 下载一个App,找到Payload丢到桌面,里面的xxx.app
  2. 显示包内容,如果有PlugIns文件夹,删除,它是一些Extension插件文件,是存储一些免费账号的,这部分不能重签名,先干掉PlugIns。如果有Watch,里面也有,Watch也干掉
  3. 对frameworks目录下文件重签名
    借助当前xcode的证书
显示包内容
cd /frameworks
codesign -fs "证书" xxx.framework

注意证书要带双引号,提示xxx.framework: replacing existing signature表示成功

  1. 给可执行文件执行权限,比如微信
chmod +x WeChat
  1. 修改info.plist的bundle ID

  2. 生成en.plist权限文件,内容如下

  3. 重签名

codesign -fs "证书" --no-strict --entitlements=en.plist WeChat.app
  1. 使用命令打包成ipa
zip -ry WeChat.ipa /Payload

自动化重签名

上一篇下一篇

猜你喜欢

热点阅读