阅读 243

iOS应用签名与重签

  • 代码签名

    • 代码签名是对可执行文件或脚本进行数字签名,用来确认软件在签名后未被修改或损坏的措施。和数字签名原理一样,只不过签名的数据是代码而已。
  • 双层签名

    • 为了实现以下需求,苹果采用双层签名机制:
    • 安装包不需要上传到App Store,可以直接安装到手机上
    • 为了保证系统安全性,必须对APP有绝对控制权
    • 经过苹果允许才能安装
    • 不能被滥用导致非开发APP也能被安装
    • 双层签名原理及流程如下图:
      • 2021030201.jpg
  • 描述文件

    • 描述文件(Provisioning Profile)一般包括三样东西:
      • 证书
      • APPID
      • 设备
    • 当我们在真机运行或者打包一个项目的时候,证书用来证明我们程序的安全性和合法性。
    • security cms -Di embedded.mobileprovision 在终端查看描述文件
    • 带有描述文件双层签名机制,可以实现控制安装设备,设备权限,安装数量等等限制,具体原理及签名流程如下图:
      • 2021030202.jpg

利用codesign进行重签名

  • 重签步骤

    • 删除插件(Plugin)和带有插件的.app包(比如Apple Watch)
    • Frameworks里面的库进行重签名
    • 对可执行文件进行+x(可执行)权限
    • 添加描述文件(新建工程,真机编译得到)
    • 修改plist文件中的BundleID
    • 通过授权文件(Eltilements)重签.app
  • 相关命令

    • codesign -vv -d xxx.app 查看ipa包的信息
    • security find-identity -v -p codesigning 查看本机的证书信息
    • otool -l xxx > ~/Downloads/macho.txt 将MachO文件内容重定向到指定位置
    • MachO文件中的cryptid字段,0代表未加密,1代表加密
    • codesign -fs "Apple Development: xxx@163.com (xxx)" xxx.framework 对framework进行覆盖签名
    • chmod +x xxx 给可执行文件添加执行权限
    • security cms -Di embedded.mobileprovision 查看描述文件
    • codesign -fs security "Apple Development: 18686886570@163.com (G998TYF5HA)" --no-strict --entitlements=xxx.plist xxx.app 对.app进行重签

利用Xcode进行重签名

  • 新建项目并真机运行(将自己的证书安装到设备上)
  • 删除插件(Plugin)和带有插件的.app包(比如Apple Watch)
  • Frameworks里面的库进行重签名
  • 用需要重签名的包(.app)替换掉刚刚真机运行编译的包
  • Xcode Run!
文章分类
iOS
文章标签