第一步:获取脱壳的ipa包
1、越狱手机导出
2、各类网站上下载的ipa。
3、各类助手上下载越狱版ipa包
第二步:命令行实现重签名
1、 将ipa解压缩后前往.app所在的目录,输入
1 | codesign -d -vv IpaDownloadTool.app |
然后输出可执行文件的签名信息
1 | Executable=/Users/tgkj/Downloads/Payload/IpaDownloadTool.app/IpaDownloadTool |
这里可以看到签名相关的信息
2、查看Mac本地的证书列表:
1 | security find-identity -v -p codesigning |
输出
1 | 57950B1A87C9A8E42F39B6E87EF37B34972FF4F4 "iPhone Distribution: Ji..... |
记下你要用来签名的证书双引号(包括双引号)中的字符串,一会儿会用到
3、确认ipa包是否已经脱壳,输入:
1 | cd IpaDownloadTool.app |
输出
1 | cryptoff 16384 |
cryptid为0即为已脱壳,为1为加密状态。这里有两组数据是因为这是个支持两种CPU架构的可执行文件。可输入file IpaDownloadTool
查看可执行文件支持的架构
输出
1 | IpaDownloadTool: Mach-O universal binary with 2 architectures: [arm_v7:Mach-O executable arm_v7] [arm64:Mach-O 64-bit executable arm64] |
4、删除无法签名的插件文件:PlugIns文件夹、Watch文件夹
note:没有这2个文件夹跳过这步
5、对.app文件夹内的Frameworks文件夹中的每一个framework强制重签名
1 | codesign -fs 步骤2中记下的证书信息 要签名的.framework |
note:这里Frameworks要签名的直接跳过这步
6、将自己的描述文件名改为embedded.mobileprovision,并拖入到.app中,再将.app中info.plist文件里的Bundle identifier改成我们自己的BundleID
7、在.app同级目录下新建一个entitlements.plist文件
1 | touch entitlements.plist |
在.app目录下查看描述文件内容:security cms -D -i embedded.mobileprovision
将Entitlements
节点下的
1 | <dict> |
复制粘贴到刚刚新建的entitlements.plist文件中
8、最后一步,对整个包签名,回到.app所在目录,输入
1 | codesign -fs 步骤2中记下的证书信息 --no-strict --entitlements=entitlements.plist WeChat.app |
9、打包
1 | zip -ry IpaDownloadTool.ipa Payload |
以上,就是通过命令行一步步的实现应用重签名。
用脚本实现签名
1、创建 appSign.sh 文件
1 | touch appSign.sh |
2、拷贝一下内容到 appSign.sh
文件中
1 | #${SRCROOT} 它是工程文件所在的目录 |
3、然后将 appSign.sh 直接丢到.xcodeproj同级目录中
4、Xcode –> Build Phases –> New Run Script Phase
5、Run
note:这里Xcode编译可能会报的错
1: appSign.sh: Permission denied
解决办法:在终端上直接运行命令: chmod 777 appSign.sh
2: Xcode Internal launch error: process launch failed: Unspecified
网上找的重启手机,或者重新连接Xcode都没用。后面再找找答案