iOS包重签名技术知识

Posted

tags:

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

参考技术A

利用Xcode的命令 security 和 codesign 重签ipa文件。重签名与Xcode里用build打包时进行的签名操作是一个原理,具体来说,先了解一下ios相关的证书类型。

证书类型:

证书作用:

注:

如果是团队开发,一般会生成p12证书提供给组员使用,这样更加好管理证书。

注:

关于证书类型说明:

添加设备UDID到证书:
iPhone手机轻松获取UDID的六种方式 -

1.添加p12证书

2.解压ipa包

3.修改内容
修改Payload/yourName.app中的icon图标、Info.plist文件的信息等,如有需要也可以更改比如版本号,应用名称等。

4.删除之前的签名 _CodeSignature

5.用包里的描述文件生成 entitlements.plist 文件

查看描述文件内容的命令:

上面命令会输出内容:

可以用管道命令 > 保存成 plist 文件:

如果只保留 Entitlements 属性内容,则可以使用 PlistBuddy 命令,我们重签只需要 Entitlements 属性:

注:本步骤的 Entitlements 属性内容非常重要,不能多字段,或者字段设置true或false错误,都会导致异常情况,否则重签是有效,但导致ipa包安装失败~

6.替换描述文件
把新的描述文件复制替换到解压后的目录中,这个需要看自己需要,旧包的描述权限与新证书的权限,是需要那些,上一步骤中 Entitlements 就是在重签时还可以在指定。

如果需要查看系统中已经保存的描述文件: ~/Library/MobileDevice/Provisioning\\ Profiles/

7.给 MachO 文件添加执行权限
解压ipa文件时,app里面的 MachO 文件可能没有执行权限,导致重签的包安装时提示失败。

注,如果Python脚本有对应的库可以查看 MachO,如果是 Shell 脚本,可以利用 Info.plist 文件中已经有 MachO 对应的文件名,可以通过下面命令读取:

当然,一般路径下app的名字与 MachO 一样 Payload/yourAppName.app/yourAppName 。具体方式大家自行选择~

8.获取证书内容
这一步需要读取钥匙串中的开发者证书,可以用以下命令查看下有哪些证书:

上面命令输出:

注意,下面的重签命令,需要使用上面的 "iPhone Developer: ihtcboy@htc.com (8RRC787ZH2)" 参数

9.重新签名

先重签名framework和dylib(不重签的话,就删除无法签名的插件文件: Framework 、 PlugIns 文件夹、 Watch 文件夹)

再签名.app:

注意:签名app需要添加参数 --entitlements entitlements.plist

重签成功后提示:

10.压缩Payload 生成最终 .ipa 文件
用 zip 文件压缩生成最终的重签后的ipa文件

11.验证签名有效性(可选)
macOS 10.11 后, codesign 命令增加了验证签名正确性,当然验证签名信息在真机上进行安装可安装就说明可以用。

验证签名正确性:

查看app的签名信息:

12.删除安装的p12证书(可选)
如果是公共设备环境,可能执行删除命令,删除步骤1中导入的证书。

13.其它可能使用到的命令(可选)

检查一下是否安装了AppleWWDRCA.cer:

查看 app 的 entitlements:

关于 iOS 重签名流程就这样简单和清晰的列出来了,但是有非常多的知识点可以深入,需要大家自行实践,还有很多坑点,这里只是简单提一下,深入的命令使用和证书知识、证书安全、命令的注意事项等,需要大家实践见真知!



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包重签名

信息安全导论知识点梳理

换个姿势为安装包重签名

PKI(公钥基础设施)基础知识笔记

【深度知识】区块链之加密原理图示(加密,签名)

数字签名基础知识