在应用签名原理手动签名中,我们说到了手动签名的步骤以及手动签名需要用到的相关终端命令,这一篇文章中,我们就来图文说明一下手动签名的过程。
准备工作:
1.macOS 10.15.2
2.Xcode 11.3.1
3.手动签名的微信ipa包(Wechat7.0.2越狱版本)
4.这里我们使用个人的免费的开发者账号进行开发测试
微信ipa包(Wechat7.0.2越狱版本),密码:hyya
1. 拿到微信的越狱资源包
- 将资源包后缀ipa改成zip格式
- 解压zip文件
- 打开资源包->Payload->WeChat显示包内容
- cd 到 Payload 文件夹内
// 查看当前项目的可执行文件
codesign -d WeChat.app
// 查看签名信息
codesign -d -v WeChat.app
// 查看更详细的签名信息
codesign -d -v WeChat.app
2.查看自己证书
// 查找并列出钥匙串中可用于签名的证书 注意这里找自己的证书
security find-identity -v -p codesigning
3.查看WeChat文件
1.查看 Payload 文件夹内WeChat文件,选择显示包内容。
2.我们可以看到一个和WeChat同名的exec类型的可执行文件,我们重签名签的就是这个文件。
3.我们可以通过 otool -l WeChat 命令来查看WeChat的文件信息。
4.由于信息比较多,我们可以使用管道将内容重定向到文件中 otool -l WeChat > ~/Desktop/123.txt
5.在文件中我们查找cryptid
会发现 cryptid后面是0,说明WeChat文件没有加密,非0的数字代表的app的可执行文件是加密的,表示的是app的可执行文件使用的是某一种加密方式为1的方式进行的加密。
6.我们也可以用管道筛选 otool -l WeChat | grep crypt
此时可能得到2个cryptid,表明这个可执行文件有2种架构。通过file WeChat 查看
4.重签名
1.将Payload文件夹和我们自己的工程项目放到同同一级目录下。
2.删除WeChat中插件(Plugin)和带有插件的.app包(比如Watch)
3.对Frameworks里面的文件进行重签名。(每个都要重新签名)
codesign -fs "Apple Development: xxx@126.com (9FX3697KS2)" ConfSDK.framework
5.注意查看执行文件是否有可可执行权限,如果没有可执行权限也是签不成功的。chmod +x 可执行文件(给可执行文件添加可执行权限)
6.对整个app重新签名。
- 找刚创建的项目->Products->WeChat.app->show in finder ->显示包内容,将 embedded.mobileprovision 文件拷出,暂时先放在 Payload文件夹同级目录下。
- 将 embedded.mobileprovision 拷贝一份放在 Payload->WeChat中,替换掉之前的文件。
- 修改 Payload->WeChat 的build id 改成我们自己的。
- 查看刚才拷出来的embedded.mobileprovision文件,找到Entitlements, 使用命令
security cms -D -i embedded.mobileprovision
- 在Xcode中新建plist文件
entitlements.plist
,将刚才看的权限dict放到新的文件中。 - 将 entitlements 文件放在Payload文件夹中,和WeChat在同一级目录下。
- 对 Payload 文件夹下的文件进行签名。
codesign -fs "Apple Development: xxx@126.com (9FX3697KS2)" --no-strict --entitlements=entitllements.plist WeChat.app
- 此时,使用
codesign -d -vv WeChat.app
命令查看 签名信息会发现签名信息已改变。 - 删除 Payload 文件夹中的权限文件,退出到 Payload 的上一级文件夹中,将 Payload 打包成ipa包。
zip -ry WeChat.ipa Payload
- 打开Xcode,执行command+shift+2,选择刚才的ipa包,安装。
可能出现的问题:
- 第一次安装是没有描述文件的,需要先去信任个人开发账号。
- 打开可能会闪退,原因是描述文件不是Xcode安装的所以会闪退,此时使用Xcode先运行下空工程,再次安装app。
不清楚的地方,欢迎留言评论
应用重签名