您当前的位置:首页 > 电脑百科 > 程序开发 > 移动端 > IOS

iOS应用签名原理和流程,怎么用脚本实现重签名?

时间:2019-11-04 13:13:47  来源:  作者:

在苹果的日常开发中,真机测试与打包等很多流程都会牵扯到各种证书,CertificateSigningRequest,p12等。但是很多相应的开发者并不理解IOS App应用签名的原理和流程。今天着重讲解一下此内容。

思考

在苹果的iOS系统出来之前,以前的主流程mac OS/Window软件存在着安全隐患,盗版软件,病毒入侵等,苹果希望能解决类似的问题,保证每一个安装在苹果手机上的app都是经过苹果官方允许的,怎么保证呢?

一、iOS 应用签名原理

1 代码签名

要想回答上面“思考”的答案,首先我们讲解一个概念。代码签名:是对可执行脚本或者文件进行数字签名,用来保证软件在签名后未被损害或者修改的措施。

2 简单的代码签名

最简单的验证方式是通过苹果官方生成非对称加密的一对公私钥。私钥保存在Appstore的服务器,而公钥保存在iOS系统中,苹果后台用私钥来对App数据进行签名,iOS系统下载此APP后,用公钥来验证签名。若验证成功,说明该App未被更改,可以安装到手机中,反之,则不行。

上面的验证可以解决大部分App入驻手机中的场景,但是对于我们开发苹果应用的开发者而言,我们也可以直接通过真机测试进入到用户的手机,而且苹果也有企业用户渠道,所以如果想要全方面的安全的安装苹果App,就无法通过简单的代码签名做到,那么苹果又是通过怎样的方案呢?

3 双层签名

下面流程图

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

解释如下:

  1. 首先Mac电脑通过CSR文件申请证书(通过公钥M)
  2. 苹果服务器返回公钥M以及公钥M算出的哈希值(也就是签名)
  3. App包里包括可执行文件MachO,然后对MachO通过私钥M签名(App签名)并将证书放到App中
  4. 然后将App放入到iphone中。首先将App中的证书拿出来解析,谁能解析App的证书,因为App的证书是由苹果服务器拿着私钥A中进行加密的,也只有公钥A能解密出来,也就是iphone中保存的公钥A,通过验证查看App是否被修改;然后再去验证App的签名,怎么验证App的签名呢,(App签名是通过Mac 电脑的私钥M进行加密的,也只有证书中的公钥M进行解密)就这样经过了两层验证!

通过上面的讲解,是不是发现特别的安全了?其实不然,因为大部分的应用都是通过AppStore进行安装,如果通过上面的过程可以安装所有的苹果设备,那么还需要要Appstore干嘛,这时候苹果防止滥用App,就做了两条限制:

  1. 经过苹果服务器中注册过的设备
  2. 签名只能具体到某一个App进行签名(推送,授权等)

经过上面的讲解,也引出了另一个概念-描述文件。

4 描述文件

描述文件又称为Provisioning profile,一般包括了三样东西:

  1. 证书
  2. AppId
  3. 设备

当我们打包或者是真机运行的时候,通过证书来验证程序的安全性和合法性。

并且在App的使用中,苹果还想控制App里面的推送/iCloud及后台运行等这些的权限,苹果将这些权限开关统称为授权文件-Entitlements,并将文件放在了描述文件中。

在开发中,编译一个App后,会用本地的私钥M对App进行签名,同时从苹果服务器得到的描述文件打包进App里为embeded.mobileprovision,把App安装在手机中,最后系统进行来验证。

上面的图也会变为如下:流程就是将描述文件加入,解决上面的问题?

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

5 拓展

首先我们做一个demo讲解App包内容。

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

  • 首先看工程文件1-products文件,点击打开Demo.app,显示包内容,紧接着出现2-内容
  • 查看有_Codesignature,是资源文件签名;embedded.mobileprovision是上面说的描述文件;另外我们看下可执行代码,也就是MachO文件,放在了001--Demo中,也就是黑色的一个,通过MachOView中可以查看MachO文件。打开之后,代码签名放在MachO中如下:
iOS应用签名原理和流程,怎么用脚本实现重签名?

 

也就是Code Signature--代码签名。

但是我们是做逆向开发,所以我们要学会应用重命名!!!

二、iOS 应用重签名

在讲解重签名中,首先学下终端命令:

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

当我们从AppStore上下载App后,如果做了相应的更改,又怎么会在手机上运行起来呢?这就需要应用重签名,并且Xcode给我们提供了重签名技术-codesign技术。

拓展我们首先来讲解一下怎么获取应用的ipa包?

  1. 助手里面下载
  2. 越狱手机里面进行拷贝
  3. iTunes下载(12.6.3)

1 下面我们将以在iTunes 12.6.3 下载了两个版本的微信,一个为正版,一个为盗版的分别进行签名!

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

通过微信-6.7.3(越狱应用)显示包内容,看出对应的子目录,查看playload文件夹,发现WeChat.app

2然后通过终端命令,otool -l WeChat | grep crypt 查看筛选后的cryp,得到如下:

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

通过上面的发现cryptid = 0 代表是该App不是加密的,非0时代表是加密的。假如cryptid=1 代表是用1这种方式加密,不代表用1加密。

上面显示为什么有两个cryptid = 0 ,下面的输入命令解释了为何有两个:通过命令file WeChat

查看有Mach-O中有两种架构,Mach-O executable arm_v7和Mach-O 64bit executable arm64两个,arm_v7代表5s之前的手机,arm64代表的是5s手机之后

3 对越狱微信开始重签名,因为cryptid = 0

3.1 删除多余的越狱微信包内容

3.2 对Framework进行重签名:codesign -fs “自己的开发证书” framework

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

下面是通过终端命令的截图,完成对截图内的Framework进行重签名。

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

3.3 下面要对App包整个重签,也就需要对描述文件进行重签。首先将描述性文件放入到越狱微信包下(描述性文件必须要与boundId一致,infoPlist文件查看)

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

开始要权限plist文件,将entitlements.plist放到了weChat.app同等级目录中

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

我们看WeChat.app中,该删的已经删掉,framework重签,以及描述性文件加进去,下面用entitlements.plist对整个App包签名。

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

通过命令codesign -fs “自己证书” --no-strict --entitlements=entitlements.plist WeChat.app,对包签名

紧接着通过查看codesign -d -vv WeChat.app命令查看重签名成功没,上面的截图中,发现证书已经变为了自己的,说明重签名成功。

结合着xcode与描述性文件,就可以在手机上运行。

上面重签名的步骤,可能并不是很清晰,又准备了一个总结如下:

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

三、拓展

3.1 Shell脚本

Shell脚本为用户提供了启动程序,管理系统的文件以及运行在系统上进程的途径。Shell在开发中一般指命令行工具,它允许输入文本的命令,然后解释命令,最后在内核中执行。Shell脚本,也是用各类命令预先放入到文件中,方便一次性执行的脚本文件。

下面我们用demo方式讲解shell命令:

首先通过命令创建文件夹,并在文件夹下创建“国孩”文本

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

查看桌面内容如下:

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

如果想这些命令一次性的执行,可以尝试写一个脚本文件

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

然后进入到编辑页面,将内容输入进去

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

最后生成文件如下,也能完成目的

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

看到上面之后,使用到了bash,除了bash,还有zsh,Source等命令效果都是一样的,怎么查看mac支持哪些呢?

通过cd /private/etc,以及cat shells,

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

通过上面的都可以满足建立123.txt。

但是上面的各个指令也有一定的区别,如下:

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

3.2 用户、组、权限

也是以Demo的形式进入,在桌面上新建一个Demo文件夹。通过命令ls -l命令查看demo的文件权限

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

前面有一排-rw-r--r--等,大家可能不知道什么意思,下面我们来讲解:通过一幅图

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

上面就是文件类型与权限。

上面的权限可不可以更改呢,对于逆向开发的人员,不是没有东西是不可以更改的,下面我们来讲述下更改文件类型和权限。

通过一幅图来讲解文件更改的基本内容和指令:

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

再以Demo的方式进行讲解:

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

更改guohai.sh文件权限,取消所有权限(非读非写非执行)

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

再将user,group以及其他设置为可读,执行如下:

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

还有其他很多命令,大家可以根据上图自己尝试。

四、脚本重签名

学了上面的脚本,就是为了下面所讲的内容-脚本重签名服务的,利用脚本进行重签名。

首先打开项目工程-->build phases -->选择如下:创建一个script脚本

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

创建之后

iOS应用签名原理和流程,怎么用脚本实现重签名?

 

然后我们按照如下步骤进行脚本签名

以上就是在项目中使用脚本进行重签名,代码程序也是上面的重签步骤。

今天的iOS应用程序签名以及应用重签名的基本内容和操作,希望对大家有所帮助,谢谢阅读!!!



Tags:iOS   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
应用锁一直是苹果用户的痛点,毕竟这功能隔壁安卓早就有了。 为什么苹果一直不给上应用锁的功能呢?之前记者也有提问过苹果的前设计师(首席声优)艾维,他说在苹果的逻辑里,手机密码...【详细内容】
2021-12-23  Tags: iOS  点击:(27)  评论:(0)  加入收藏
众所周知,由于今年iOS 15系统的更新幅度不大,导致不少果粉的升级欲望大大降低,iOS 15系统的安装率也远低于去年的iOS 14系列,今年的iOS 15这么拉跨,那么明年的iOS 16呢? 目前关于i...【详细内容】
2021-12-22  Tags: iOS  点击:(9)  评论:(0)  加入收藏
IT之家 12 月 20 日消息,百度网盘青春版 iOS 客户端今日晚间率先开启内测,安卓客户端将在稍后内测。使用苹果 iPhone 的IT之家小伙伴可以点此下载内测版,需要先下载 TestFlight...【详细内容】
2021-12-21  Tags: iOS  点击:(10)  评论:(0)  加入收藏
相信很多小伙伴都遇到过这种情况,一台iPhone放太久了,当初设置的锁屏密码是什么都自己忘了。 这时候我们只能通过连接电脑进入恢复模式再进行刷机或者用另一台iPhone(登录的是...【详细内容】
2021-12-21  Tags: iOS  点击:(16)  评论:(0)  加入收藏
近日苹果发布 iOS 15.2/iPadOS 15.2 正式版的更新,整合了此前测试版中所有新功能,因此更新内容不少,也有一些值得了解的实用功能。有没有必要更新 iOS 15.2 正式版?看完如下功能...【详细内容】
2021-12-17  Tags: iOS  点击:(24)  评论:(0)  加入收藏
虽然手机圈每隔几天就会有新机登场,但依旧有小伙伴表示内心毫无波澜—— 「你发任你发,我的小米 6 还能再战两年。」 就算是电池损耗了,按键不灵了,屏幕摔碎了,修一修...【详细内容】
2021-12-16  Tags: iOS  点击:(7)  评论:(0)  加入收藏
苹果昨日向 iPhone 和 iPad 用户推送了 iOS 15.2 / iPadOS 15.2 正式版更新,带来了多项新功能。据 9To5Mac 报道,iOS 15.2 / iPadOS 15.2 还有一项新功能,允许用户不借助 Mac...【详细内容】
2021-12-16  Tags: iOS  点击:(30)  评论:(0)  加入收藏
今天发了几个关于iOS15.2正式版的微头条,没想到引发了大家不小的讨论,看来大家对于新版本还是有不少期待的,不少人今天早上睡醒之后就选择了升级,还有一些小伙伴一直在纠结要不...【详细内容】
2021-12-15  Tags: iOS  点击:(21)  评论:(0)  加入收藏
在今天凌晨,苹果正式上线了 iOS 15.2 正式版 以及 watchOS 8.3 的新版本,这个正式版其实我是一直比较期待的,因为在此前的开发者测试版本中,就一直在内测APP 隐私报告,数字遗产以...【详细内容】
2021-12-15  Tags: iOS  点击:(22)  评论:(0)  加入收藏
【手机中国新闻】随着互联网进一步深入到我们的生活,我们已经与数字化脱不开关系了,同时在网络上拥有很多对于我们而言有价值的事物。因此,有不少网友在思考,自己故去以后,网络上...【详细内容】
2021-12-14  Tags: iOS  点击:(9)  评论:(0)  加入收藏
▌简易百科推荐
前言最近对 WebRTC iOS 端源码进行了下载和编译,网上针对 WebRTC iOS 端的编译文章基本都是几年前的,有些地方已经不适用于最新版的 WebRTC 的编译,简单记录下载&编译的过程,以...【详细内容】
2021-11-10  anyRTC云平台    Tags:WebRTC iOS   点击:(38)  评论:(0)  加入收藏
IT之家 10 月 20 日消息,据 9to5 Mac 报道,继 iOS 15.1 RC、macOS Monterey RC 和其他更新发布后,苹果也向开发者提供了 Xcode 13.1 RC(候选版)。最新版本的 Xcode 现在可以在苹...【详细内容】
2021-10-20    IT之家  Tags:Xcode   点击:(88)  评论:(0)  加入收藏
IT之家 8 月 12 日消 苹果今日发布了一款新的开发者工具,旨在强制那些运行 iOS 15 和 iPadOS 15 的设备在使用不安全的 WiFi 网络或 WiFi 速度较慢时优先使用 5G 连接而不是...【详细内容】
2021-08-12    IT之家  Tags: iOS   点击:(151)  评论:(0)  加入收藏
IT之家4月7日消息 去年底,苹果公司要求应用商店所有第三方软件都必须增加 “隐私标签”以进一步保护消费者隐私安全。之后,谷歌旗下大量 iOS 软件长时间停止更新。而到了今年...【详细内容】
2021-04-07    IT之家  Tags:苹果隐私标签   点击:(309)  评论:(0)  加入收藏
你们好,这里是Seek思科,为你寻找苹果最新资讯、苹果隐藏技巧、苹果良心APP以及苹果优质配件。如果你需要这些,不妨点个关注。苹果已经官宣今年全球开发者大会将在北京时间6月8...【详细内容】
2021-04-02  Seek思科  今日头条  Tags:iOS15系统   点击:(370)  评论:(0)  加入收藏
Sideloadly安装unc0ver越狱 今天推荐比Altstore更简单的安装工具,Sideloadly 在QQ群文件下载最新版本安装, 然后直接打开,演示是Mac版本 Win是一模一样的, 不会出现报错2或...【详细内容】
2021-03-30  CydiaInstaller  今日头条  Tags:iOS自签名   点击:(1280)  评论:(0)  加入收藏
就在昨日,苹果对《App Store 审核指南》进行了2021年的首次重大更新。而此次更新主要是为了方便开发者为即将发布的OS版本中的新功能提供支持,更好地保护用户,并帮助开发者的Ap...【详细内容】
2021-02-03      Tags:App Store   点击:(205)  评论:(0)  加入收藏
不用不上架、不越狱、不要企业证书、永不掉签 只需一个h5网站地址 就能创建属于您自己的苹果IOS APP_多啦咪资源网无需越狱 无需企业证书 不用上架appStore 界面全屏 无广告...【详细内容】
2020-12-11      Tags:APP   点击:(177)  评论:(0)  加入收藏
iOS14支持把小组件添加到桌面,不过我们之前推荐的都是一些工具类的或者是桌面美化类的小组件,今天我们来看看目前有哪些我们常用的App已经支持把小组件添加到桌面了。 网易云...【详细内容】
2020-11-26      Tags:iOS   点击:(185)  评论:(0)  加入收藏
简介: 在平时的面试中,经常问到的高频面试题大概做了一个总结,希望能帮到你!一、如何绘制UIView?绘制一个UIView最灵活的方法就是由它自己完成绘制。实际上你不是绘制一个UIView...【详细内容】
2020-11-13      Tags:iOS   点击:(146)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条