重签名3-new
作为一个iOS开发 者自然非常熟悉Applications的重要性,那么本篇文章讲解一下如果常规操作下对日常的Application进行重签名操作。
![图片] (ios/resources/0F067663E0A8B6739E56C4A2D2BA4BD4.gif)
接下来呢我们要讲的内容
1
分析Apple对Application加密的需求
2
什么是双层签名验证
3
手动对Application进行重签名
4
使用Shell脚本进行重签名
01
分析一下Apple对Application加密的需求
首先明确一点,对App加密肯定是用要非对称加密而不是对称加密!这我默认大家都懂了,应该不用解释。
如果所有的APP都是从App Store下载的那么,这就简单了,只需要对APP进行一层RSA加密就可以了,App Store持有私钥,我们iPhone持有公钥。那么问题就解决了。但事实上肯定不是这样,我们已知的渠道除了App Store就包括XCode打包,Ad-hoc证书分发,企业证书分发等等。为了解决这个问题,我们就得先了解Apple的具体需求是什么。
02
什么是双层签名验证
什么是「双层签名验证」,如图:
![图片] (resources/DD30C95D52845C53E1BF200185144822)
具体不细说了,说了也看不懂![图片] (ios/resources/BB764515951C7E67DD48AADFE3002D0C.png) ![[ios/resources/BB764515951C7E67DD48AADFE3002D0C.png]] (assets/ios/resources/BB764515951C7E67DD48AADFE3002D0C.png)
03
手动对Application进行重签名(如不看可跳至末尾总结)
注:对APP进行重新签名,前提是这个APP已经被砸壳了。下载已经砸壳成功的APP,以下用WeChat7.0.2(软件包在QQ群群文件中提取即可,回复公众号QQ群即可)为例子。
** **
一
进入应用目录
解压出 ipa,进入WeChat目录
// 进入WeChat的目录下载到桌面解压打开终端cd /Users/用户名/Desktop/iOS逆向-Application重签名-WeChat7.0.2/Payload
二
查看应用状态
codesign -d -vv「WeChat.app路径」
![图片] (resources/42047D7BB3FF51667CCF1417128795FC)
三
验证应用是否被加密
进入APP的包内容可以看到其中有一个WeChat的可执行文件,也就是是MachO文件,就是要查看这个MachO文件时候被加密
otool -l WeChat | grep cryp
其中cryptid为0代表已经砸壳,即解密,
如果是1或者2,则表示以第1类或者第2类加密方案加密。
四
查看本地证书,并记录
security find-identity -v -p codesigning
![图片] (resources/D1352CE841B1A3E614DC8373E04CDDA7)
五
删除应用内不可签名的插件(包括Watch文件夹中的插件)
由于本地存在一些插件,这些插件是不可被我们重签,并且这个过程我们用不着,所以我们索性就删掉。其中包括:整个目录PlugIns目录和整个Watch目录(因为Watch.app中也有个PlugIns)
六
Framework重签名
这一步就是比较繁琐的了,需要将Frameworks下的所有Framework进行重签名,运用到XCode提供的codesign指令,参数中的证书就是步骤四中的一个。具体使用哪个就看个人了
codesign –fs 「证书串」 「文件名」
![图片] (resources/7AE1AF22E20752A5C94A32E86944B49B)
七
给MachO添加可执行权限
由于MachO本身就有可执行权限,所以这一步跳过。
八
给Application重签名
一、新建一个WeChat工程(以下称NewVX);
二、Build NewVX工程,进入被编译出的WeChat.app目录,找到其中的embedded.mobileprovision文件,将其复制到WeChat.App(越狱微信)中
![图片] (resources/F600F290FCB6FD4D55C0FD0DF112F648)
![图片] (ios/resources/83C509B95BCBB74906568C283AB5420C.png) ![[ios/resources/83C509B95BCBB74906568C283AB5420C.png]] (assets/ios/resources/83C509B95BCBB74906568C283AB5420C.png)
![图片] (ios/resources/493B9FEFD2E52DE41632046FD0A74FF6.png) ![[ios/resources/493B9FEFD2E52DE41632046FD0A74FF6.png]] (assets/ios/resources/493B9FEFD2E52DE41632046FD0A74FF6.png)
在WeChat.App找到info.plist,并修改其中的BundleId为NewWeChat的BundleId
这里改了就是共存版,修改Bundle id,能基本共存市面上99%应用
查看embedded文件
security cms -D -i 「 embedded文件路径」
找到其中的entitlements字段,并且复制entitlements字段和其中的内容
![图片] (resources/11F8C3AB3E909F6D25DEC85F6487808B)
![图片] (resources/A0E5E402A4C8403FBFD468643EE5CF31)
在NewVX中新建entitlements.plist文件,
将上一步复制得到的「entitlements字段内容」
拷贝入新的entitlements.plist文件,
然后将entitlements.plist复制 到WeChat.app的同级目录下。
![图片] (resources/D72627950C0A28BEBEB6AA36668309B2)
![图片] (ios/resources/7DE2F9838B4924FE8193BE9A7E6700C5.png) ![[ios/resources/7DE2F9838B4924FE8193BE9A7E6700C5.png]] (assets/ios/resources/7DE2F9838B4924FE8193BE9A7E6700C5.png)
对APP重新签名 进入WeChat目录,
codesign -fs 「证书串」 --no-strict --entitlements=entitlements.plist
压缩Playload文件夹
zip –ry 「输出文件名」 「输入文件名」
九
安装新的ipa
用各种第三方助手安装即可,比如爱思助手,PP助手等。
如果想用LLDB调试微信,可以将重签后的WeChat.app替换NewVX Build后的WeChat.app,然后直接运行(Run)项目,就会发现我们可以用LLDB了
。
十
验证ipa是否真的重签成功
这一步其实是重复第三步
codesign -d -vv「WeChat.app路径