美文网首页iOS基本功
iOS应用重签名

iOS应用重签名

作者: 眷卿三世 | 来源:发表于2018-12-09 22:52 被阅读0次

说到iOS重签,那么就应该了解iOS正常签名流程是什么,然后才能知道,我们重签名从哪几个地方入手。

iOS签名

代码签名:
什么是代码签名,很简单,代码签名就是对可执行文件或脚本进行数字签名(对加密的内容进行hash算法得到hash值,然后再用RSA)。用来确认软件在签名后未被修改或损坏的措施。和数字签名原理一样,只不过签名的数据是代码而已。
那为什么要用代码签名呢,因为在p时代早期,主流的操作系统(Mac/Windows)软件在哪里都可以下到,导致系统安全存在严重隐患,盗版软件,病毒,静默安装等等,因此苹果公司想解决这个问题,他们就想到了一办法,就是将即将安装到设备的软件通过苹果官方服务器进行认证,然后设备从苹果官方服务器下载软件,然后就可以安装到设备上了,这样就避免了那些安全隐患所带来的问题,那么苹果里面具体做了哪些事情呢。
大家都知道,苹果有应用商店,那里面有很多APP,然后苹果设备可以通过这个应用商店来下载软件,到手机或者电脑上,这个就是APP Store,也就是上面所提到的苹果官方服务器,在这个过程中,苹果服务器会用非对称加密算法进行应用程序签名(用服务器端的私钥),然后iOS设备或者Mac设备用本地的公钥来对应用程序进行验证,看看是否被在传输的过程篡改过,如果没有篡改过的,就直接安装成功到设备上 了,但这是远远不够的,因为,苹果除了不同用户,还有很多的开发者,开发者在开发的时候,需要调试,而且苹果还开放了企业级,这样一来,有很多app还是可以通过非appstore渠道,安装到设备上,因此苹果就设计出了更复杂的签名方式,双层签名。下面我们来看看双层签名的流程
如图:


双层签名流程图.png

开发者在开发的时候,会通过一个CSR文件到苹果服务器,去申请一个叫证书的东西,生成的证书里面包含Mac电脑的公钥和对公钥hash算法之后的hash值,然后将整个证书放到我们即将生成的APP中,在这个过程中,我们还有用Mac电脑端的私钥,对我们生成的APP的可执行文件进行加密,生成APP的签名,当我们的APP安装到iPhone上的时候,使用iPhone设备上苹果给我们准备好的公钥A,对证书进行解密,拿到里面的公钥和对应hash值,然后用hash对公钥进行验证,如果验证通过之后,在用验证过的公钥对APP的签名进行解密,如果能解密成功,可执行程序就解压成功,就可以安装到iPhone设备上,如果其中任何一步出错,都不会安装成功。
现在这个结构已经很好了,但是这样远远不够,因为每个app开发过程中,少不了要安装到设备上,那么不能让开发者无限制的安装到任何设备,要有一定的限制,还有除了设备数量之外,还有对设备的各个设备功能访问权限,还有你的开发者账号的校验,这些证书里面都没有,为了更加完善校验的功能,因此苹果公司有增加了一个设备描述文件,这个文件里面就是包含设备列表、AppleID、还有权限文件,这样APP安装到设备上之后,就会更加安全的保护设备,下图就是现在苹果公司正在使用的整个APP签名过程,如图:


image.png
这里,申请证书的时候,还会去给你一个对应的描述文件,我们在用xcode打包ipa的时候,证书放到描述文件中,然后将描述文件安装到APP中。
以上流程就是整个iOS签名的过程。通过对这个签名原理,我们就可以对其他程序进行重签,但是这个从APP Store上的ipa,是不可以进行重签的。下面我们来看iOS 重签名实现

ios重签名

重签名,其实原理很简单,根据上面签名的原理,重签名,就是把别人的app用我们的壳子来加密,从而,可以安装到设备上,下面来看看重签名的步骤
1、删除插件和带有插件的.app包(比如Watch)
2、对Frameworks里面的库进行重签名
3、给可执行文件+x权限
4、添加描述文件(分手动和自动,自动:新建工程,真机编译得到)
5、替换BundleID
6、通过授权文件(Entilements)重签.app包
以上是重签步骤,下面我们具体该怎么操作
手动:
下载任何越狱后的ipa,然后通过解压缩,找到Payload里面的app,然后显示包内容,在这个包里面可以找到PlugIns文件夹,因为插件不能被签名,所以,直接干掉,干掉完PlugIns这个文件夹后,有没有其他app包包含PlugIns这个文件夹的,一般都在Watch app里面,我们直接把Watch干掉。
好接下来就是Frameworks里面的Framework进行重签,使用的命令为:

codesign -fs "iPhone Developer: xxx@xxx.com (xxx)" xxx.framework/

通过上述命令将ipa中的frameworks文件中的每个framework进行重签。重签之后
对MachO文件进行权限设置

chmod +x 可执行文件路径

给完权限之后,去新建一个工程,用你的appid开发者账号,然后编译,在Products文件夹下,有个我们自己的app,然后show in finder,显示包内容,将里面的描述文件拷贝出来,拷贝到第三方的app包里面去,就直接显示包内容,copy进去就可以了,接下来将自己的BundleID修改进第三方info.plist中
,接下就是利用Entitlements来重签第三方ipa了,在新建的工程中,新建一个entitlemenst的plist文件,然后将拷贝进第三方app包里面的描述文件用过终端命令打开

security cms -D -i xxxx.mobileprovision

在终端中找到Entitlements这个字段,将下面的字典value全部拷贝,拷贝到entitlements.plist中,然后再将entitlements这个plist文件拷贝到第三方app文件夹中去,好一起都准备就绪,使用命令,对可执行文件进行签名

codesign -fs "iPhone Developer: xxx@xxx.com (xxx)" --no-strict --entitlements=entitlements.plilst xxx.app

这样就签名成功,成功之后,再对签名后的app进行打包,打包成ipa,命令为:

zip -ry xxx.ipa Payload

这样执行完,ipa也就成功了,直接安装到手机上就可以运行了。这是手动操作,那自动又是怎么回事呢,自动代表的意思就是利用xcode帮我进行描述文件的生成,怎么做呢,很简单,将步骤1~3 还有第5个步骤,编写成shell,然后在这个地方:


设置.png

点击New Run Script Phase,添加一个脚本:


脚本.png
这样在程序一编译的时候,就会运行这个脚本。自动重签就完成了,很简单,因为描述文件的流程xcode都已经帮我做了,所以我们不用管描述文件的操作。

相关文章

  • iOS开发逆向之应用重签名(上)

    本文主要介绍重签名的几种方式,以及如何对应用进行重签名, 应用重签名 从之前《iOS逆向应用签名》中可知,签名是指...

  • 通过Shell脚本对应用重签名

    通过上两篇文章(iOS 应用重签名|使用Xcode简化应用重签名)对操作应用的重签名有了一定的认识,但是好像每次都...

  • iOS应用重签名

    网上关于签名的脚本有很多,我找了个本人觉得比较好用的脚步iOS_resign_scripts,下载脚步里面有三个脚...

  • iOS应用重签名

    代码重签名 签名机制 iOS签名需要用到codesign这个命令,了解这个命令的用法可以增加我们对签名机制的了解 ...

  • iOS 应用重签名

    本文我们将重签名一个App,实现将他人的App安装到自己手机上,然后进行部分的调试工作。 需要准备的资料: 1、安...

  • iOS应用重签名

    一、越狱版应用重签名(正版的需要砸壳,这个以后介绍) 应用重签名需要以下几个步骤: 删除插件和带有插件的.app包...

  • iOS应用重签名

    说到iOS重签,那么就应该了解iOS正常签名流程是什么,然后才能知道,我们重签名从哪几个地方入手。 iOS签名 代...

  • iOS应用重签名

    codesign Xocde提供了签名工具,codesign,我们通过几个命令就可以完成重签名 •$securit...

  • iOS 应用 重签名

    前言 在逆向过程中,当我们对IPA包发生改动时,就需要对IPA包进行重新签名,才可以重新安装到我们的iOS设备中。...

  • iOS应用重签名

    知识点准备 MacOS用户组 文件权限Unix Linux 属于多用户、多任务 我们关注第一列(权限):eg:dr...

网友评论

    本文标题:iOS应用重签名

    本文链接:https://www.haomeiwen.com/subject/nfpncqtx.html