终端命令(相关的一些指令)
•$security find-identity -v -p codesigning列出钥匙串里可签名的证书
•$Codesign–fs“证书串”文件名 强制替换签名
•$Chmod+x可执行文件 给文件添加权限
•$security cms -D -i ../embedded.mobileprovision 查看描述文件
•$codesign -fs “证书串” --no-strict --entitlements=权限文件.plistAPP包
•$Zip –ry输出文件 输入文件 将输入文件压缩为输出文件
用户权限
重签步骤
1.删除插件和带有插件的.app包(比如Watch)
2.对Frameworks里面的库进行重签名
3.给可执行文件 +x(可执行)权限
4.添加描述文件(新建工程,真机编译得到)
5.替换BundleID
6.通过授权文件(Entilements)重签.app包
实操一波
一、手动签名
1、准备
1.1、获取一个破壳的 ipa 包。
可以通过PP助手下载越狱应用
1.2、查看ipa包是否已经脱壳
1.2.1、解压ipa包,进入playload文件夹,找到MachO文件
1.2.2、在终端使用命令otool -l DingTalk | grep crypt,0是已脱壳,大于0是未脱壳(一般为1)
1.3、Apple Developer 开发者证书
1.3.1、通过本地 CSR 从Apple Developer 网站申请开发者证书,安装到钥匙串。
1.3.2、终端查看本地有效证书
命令:$security find-identity -v -p codesigning
2、删除插件
删除Plugins文件夹和Watch文件夹
3、对所有.framework重新签名
3.1、使用的命令
$ codesign -fs "iPhone Developer: xxx " xxx.framework
3.2、找到framework文件夹下所有.framework,分别使用上面的命令对其签名。
4、描述文件(Provisioning Profile)
描述文件包含了证书信息,App ID,具备调试、测试权限的设备,以及应用的一些功能信息等等,后缀名mobileprovision。
4.1、使用XCode新建一个项目,选择需要使用证书。
4.2、生成描述文件
然后build项目,在生成的.app中点击show in finder,接着显示包内容,找到生成的描述文件,放到ipa包->playload->xx.app包里面(MachO文件同级)
4.3、创建entitlements.plist文件
查看描述文件内容,使用命令security cms -D -I embedded.mobileprovision,找到Entitlements节点,接着创建entitlements.plist文件,内容拷贝过去,最后把entitlements.plist文件拷贝到playload文件夹内(与xx.app同级)。
5、修改xx.app包里面的info.plist中的bundleId为上面项目的bundleId
6、对xx.app开始签名
6.1、使用的命令
$ codesign -fs "iPhone Developer: xx" --no-strict --entitlements=entitlements.plist xx.app
7、生成ipa包
7.1、使用的命令
$zip –ry 输出文件 输入文件
7.2、使用xcode或者助手安装
如果闪退,删除应用,先运行一遍上面创建的项目,然后在手机设置 通用 信任一下描述文件,再安装生成的ipa包。如果还闪退,请尝试下面使用xcode重签名方法。
二、使用xcode重签名
1、重复上述1、2、3步骤,并修改info.plist
修改info.plist中的BundleId为下面新建项目的BundleId,拷贝经过上述步骤xx.app备用
2、使用xcode创建同名项目
3、编译项目及替换xx.app
使用步骤1中拷贝出来的xx.app替换上图中的xx.app
4、运行项目,重签名成功。
5、生成ipa包
成功运行项目到手机上后,一定要成功运行后,再次show in finder找到xx.app,拷贝xx.app。创建一个Payload文件夹,把xx.app放进去。
5.1、使用的命令
$zip –ry 输出文件 输入文件(Payload)
5.2、使用xcode或者助手安装
三、使用脚本+xcode实现自动化重签名
1、编写脚本sh
2、配置xcode运行脚本
3、放置目标ipa
把脚本放到项目同级目录下,以及创建targetApp文件夹。最后把需要重签名的IPA放到targetApp文件夹中。
4、编译运行
至此已完成重签名,🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺!
PS:此文章是一篇严肃的学术探讨类文章,仅仅用于学习研究,也请读者不要用于商业或其它非法途径上,笔者一概不负责哟~~