iOS 包签名及重签名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 包签名及重签名相关的知识,希望对你有一定的参考价值。

参考技术A

签名相关的命令:
•$security find-identity -v -p codesigning -- 列出钥匙串里可签名的证书

•$security cms -D -i embedded.mobileprovision -- 查看描述文件

•$codesign–fs “证书串” 文件名 -- 强制替换签名

重签步骤:
1.删除插件和带有插件的.app包(比如Watch)
2.对Frameworks里面的库进行重签名
3.给可执行文件 +x(可执行)权限
4.替换描述文件
5.替换BundleID
6.通过授权文件(Entilements)重签.app包

实际操作:
获取破壳的ipa包
获取第三方ipa包
查看ipa包是否已经破壳 》 非上架的都没加壳,无需关注
解压ipa包,进入playload文件夹,找到MachO文件

在终端使用命令otool -l DingTalk | grep crypt,0是已脱壳,大于0是未脱壳(一
般为1)

终端查看本地有效证书
$security find-identity -v -p codesigning

删除无法签名的插件文件
删除Plugins文件夹和Watch文件夹

对.app文件夹内的Frameworks文件夹中的每一个framework强制重签名
命令:$ codesign -fs "iPhone Developer: xxx " xxx.framework
找到framework文件夹下所有.framework,分别使用上面的命令对其签名。

建议通过脚本命令执行:

将要签名的描述文件该成 embedded.mobileprovision 替换 来的 embedded.mobileprovision

创建entitlements.plist文件
查看描述文件内容,使用命令security cms -D -I embedded.mobileprovision,找到Entitlements节点,接着创建entitlements.plist文件,内容拷贝过去,最后把entitlements.plist文件拷贝到playload文件夹内(与xx.app同级)。
!]( https://upload-images.jianshu.io/upload_images/1502585-e1694c8e1e77a197.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )

修改xx.app包里面的info.plist中的bundleId为上面项目的bundleId

对xx.app开始签名
使用的命令: zip –ry 输出文件 输入文件 命令。也可以手动压缩。

将上述操作 通过shell命令 写个脚本文件。然后一键操作。
shell脚本语言命令

地址: https://github.com/InjoyDeng/ResignTool

蒲公英平台重签名

本文章主要介绍ios 版本发布的两个相关功能。

一 : iOS 开发出的版本发布安装 用两种方式 :

软件环境
Mac: v10.12.6 (16G29)
ruby: v2.3.4
rvm: v1.29.3
sigh: v2.71.1
Xcode: v9.2

使用sigh脚本
使用之前先安装一下脚本环境

应用场景:
主要解决因重复打包导致测试同学回归测试的包和上传App Store的包不一致的问题。以及 合作方之间 证书不一致,需要重新签名问题。

App开发测试流程

对回归测试通过的ipa包进行重新签名,然后上传 App Store

输入的 Signing Identity 如果和 .mobileprovision文件 不一致,那么终端上仍会提示resign成功,但是,安装时会报错!

codesign -vv -d xxx.app

本文主要讲述sigh命令的安装和使用。

首先确保你安装了Xcode的命令行工具。

然后通过gem安装sigh,gem的安装请自行谷歌。

在终端执行

依次执行下列步骤:

关于更多sigh用法请访问 sigh使用

签名成功的应用就可以顺利在我们的设备中安装了并使用了,用这个方法可以进行非越狱平台安装在正版基础移植的越狱应用。

工具: https://github.com/InjoyDeng/ResignTool
借鉴: https://www.jianshu.com/p/d68924e1af25

https://www.jianshu.com/p/d68924e1af25
https://www.cnblogs.com/guohai-stronger/p/11781249.html

iOS APP签名机制详解

iOS逆向重签名:IPA包重签名

目录:

1. iOS逆向重签名(一):签名原理
2. iOS逆向重签名(二):IPA重签名
3. iOS逆向重签名(三):微信重签名

一、准备工作

1、解压ipa包

首先我们先从appstore下载一个ipa包,然后把这个包上传到蒲公英分发平台上,可以看出这是一个上架appstore的包。我们就用这个包来进行重签名实验,用另外一套证书进行重签名,生成一个adhoc的包。

在这里插入图片描述

选中ipa包,右键 -> 打开方式 -> 解压,如下图所示:

在这里插入图片描述

解压之后,会得到一个Payload的文件夹,里面包含一个xxx.app的文件,右键可以用"显示包含内容"的方式打开。

在这里插入图片描述

2、替换 embedded.mobileprovision文件

我们需要将自己打包中的embedded.mobileprovision文件替换掉目标ipa中的embedded.mobileprovision。

进入到目标ipa的文件目录下面,我们可以看到有一个embedded.mobileprovision文件,如下图所示:

在这里插入图片描述

找一个我们自己打包的ipa包,然后进行解压,进入到ipa的文件目录下,我们同样可以发现一个embedded.mobileprovision文件,如下图所示:

在这里插入图片描述

然后将我们自己的embedded.mobileprovision文件替换掉目标ipa文件中的embedded.mobileprovision。

3、生成授权文件(entitlements.plist)

1、将上一步的embedded.mobileprovision文件拷贝一份到Payload文件里面。如下图所示:

在这里插入图片描述

2、然后通过embedded.mobileprovision文件用命令行操作生成embedded_full.plist文件。

首先cd到Payload目录下面,通过“security”命令,从mobileprovision文件中生成一个完整的plist文件。

YuanCan:Payload ahdms$ security cms -D -i embedded.mobileprovision > entitlements_full.plist

在这里插入图片描述

3、然后通过embedded_full.plist文件用命令行操作生成embedded.plist文件。

YuanCan:Payload ahdms$ /usr/libexec/PlistBuddy -x -c 'Print:Entitlements'  entitlements_full.plist > entitlements.plist

在这里插入图片描述

二、重签名

需要进行重签名的主要包括两部分,整个的app文件和app文件里面的Framework。Framework文件夹下面的动态库都要进行重签名,否则安装之后会闪退。

1、动态库重签名

打开.app文件目录,文件里面有一个Framework的文件夹,里面包含了项目引用的所有动态库,(如果项目中没有使用任何动态库,当然就不会有这个文件夹,可以忽略此步骤),如下图所示:

在这里插入图片描述

重签名命令:$ codesign -f -s “Apple Developer: xxx (xxx)” xxx.framework

//首先要先cd到Frameworks的目录下面,然后在执行如下命令

YuanCan:Frameworks ahdms$ codesign -f -s "Apple Distribution: Changsha xxx Information and Technology Co., Ltd. (xxx)" Hyphenate.framework

Hyphenate.framework: replacing existing signature //执行重签名命令之后,会给出这句提示,代表重签名成功

2、.app文件重签名

下面我们要进行app文件重签名,与动态库重签名不同的是,app文件重签名还需要加上授权文件。

重签名命令:$ codesign -f -s “Apple Developer: xxx (xxx)” --no-strict --entitlements=entitlements.plist xxx.app

//首先要先cd到Poyload的目录下面,然后在执行如下命令

YuanCan:Payload ahdms$ codesign -f -s "Apple Distribution: Changsha xxx Information and Technology Co., Ltd. (xxx)" --no-strict --entitlements=entitlements.plist HelloWorld.app

HelloWorld.app: replacing existing signature  //执行重签名命令之后,会给出这句提示,代表重签名成功

3、重新打包

重签名成功之后,我们需要将.app文件重新打包。进入Payload文件夹里面,把下面这三个文件删除掉。

在这里插入图片描述

将Payload文件压缩成zip的压缩包,然后将.zip改成.ipa,就重新生成了一个新的ipa包了。

在这里插入图片描述

我们来验证一下,是否真的重签名成功了。把Payloda.ipa包上传到蒲公英分发平台上,如下图所示:

在这里插入图片描述

现在变成了内存版本了,然后也可以直接安装到手机上。

如果你觉得本篇文章对你有用,请给小编一点鼓励,点赞或打赏,感谢。

以上是关于iOS 包签名及重签名的主要内容,如果未能解决你的问题,请参考以下文章

iOS逆向重签名:IPA包重签名

您的应用程序包的签名包含 iOS 不支持的代码签名权利

iOS:代码签名无效/缺少必需的代码签名

iOS ipa包进行重新签名

iOS包签名原理文章

iOS包重签名技术知识