APP的签名
其实对于签名这块我了解的也比较少,但是通过这段时间的学习,我发现ipa的签名主要分两个部分也就_CodeSignature这个文件夹和embedded.mobileprovision**这个文件
- _CodeSignature文件夹中包含了一系列的验证信息
- embedded.mobileprovision,证书配置文件中可以找到我们appID等等的相关信息
工具介绍
- 查看mobileprovision里面有啥信息可以使用一个第三方工具叫做mobileprovision-read
- 测试某个APP是否能够成功安装mobiledevice
- 注入dylib到一个文件中yololib
背景
有时候我们会有这种情况,打包好的ipa说要改一个图片,但是我们懒得重新Archive的时候我们就可以用上这个方法。
实践
我这里说只需要ipa((╯‵□′)╯︵┻━┻但是我没有写好测程序),好吧我这里准备了一个程序GBA4iOS自然这个不是我开发的APP,虽然是开源的可是我怎么编译都通不过…那我们就下载这个GBA4iOS进行实践吧
1、先解压ipa
解压很简单通过归档文件解压,解压后我们会获得下面这样的目录
目录就不用我详细介绍了吧
2、找到.app文件显示包内容就会是下面这样的文件夹
这里我们可以看到箭头中的两个文件是我们需要修改的
3、删除签名文件
删除_CodeSignature和embedded.mobileprovision文件
如果是自己的APP
修改完.app中的资源文件后
执行下面的操作冲签名 由于是自己的APP 所以秘钥对啥的都已经有了
/usr/bin/codesign -f -s “钥匙串中的签名证书的名字(iPhone Distribution:xxxx)” –entitlements “entitlements.plist” “Payload/.app文件的文件名.app”
然后压缩成ipa
zip -qr “$NEW_IPA.ipa” Payload entitlements.plist
如果是其他人的APP
由于bundleID是不能重复的,而且我们没有对方的证书和配置文件~
所以我们最简单的方法就是重新申请一个appID然后修改.app中的info.plist。将plist中的bundleID修改成我们新申请的appID。
let’s do it
1、申请APPID 和 mobileprovision 并且下载下来放到文件夹根目录
2、这里我们需要用到一个文件Plist文件entitlements.plist 关于这个的使用其实我还摸得不是特别清楚。
经过实践我发现entitlements中的数据其实都是来源于mobileprovision的所以我们就需要用到工具篇中的mobileprovision-read,读取里面的数据了。
那么生成的方法有两种
- 创建Plist然后从mobileprovision中拷贝下面这个键值对中的内容(这是一种比较麻烦的方法)
- 通过命令行创建 执行一下命令行
/usr/libexec/PlistBuddy -x -c “print :Entitlements “ /dev/stdin <<<
$(security cms -D -i “你的mobileprovision文件路径”) >
entitlements.plist
命令执行完毕后自然会生成一个plist文件 你可以按照其他资料资料中的数据进行局部修改
3、重新打包
先cd到Payload的同级目录 将entitlements.plist也拷贝到这个目录
- 将新的mobileprovision拷贝到.app的根目录
cp “你的mobileprovision文件路径” “Payload/$APPNAME.app/embedded.mobileprovision”
- 重新执行签名
/usr/bin/codesign -f -s “钥匙串中的签名证书的名字(iPhone Distribution:xxxx)” –entitlements “entitlements.plist” “Payload/.app文件的文件名.app”
等待执行完毕后 选择.app 显示内容 你就会看到新的_CodeSignature文件夹
- 压缩成ipa
zip -qr “$NEW_IPA.ipa” Payload entitlements.plist
测试ipa是否可以安装
可以使用工具中提到的 mobiledevice install_app xxx.ipa
或者直接找一台机器装装看就好了
最后
上面都是用自带的命令的 现在也有一个工具叫iResign原理就是上面我说的差不多学会了之后可以使用这个工具就好了~ 我们不重复造轮子 可是我们必须知道轮子的构造~ 这个工具可以去github搜索就找到了