iOS 包签名及重签名

iOS 包签名及重签名,第1张

签名相关的命令:

•$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签名机制详解

利用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: [email protected] (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 重签名流程就这样简单和清晰的列出来了,但是有非常多的知识点可以深入,需要大家自行实践,还有很多坑点,这里只是简单提一下,深入的命令使用和证书知识、证书安全、命令的注意事项等,需要大家实践见真知!


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12214845.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存