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 。
但是上面的各个指令也有一定的区别,如下:


推荐阅读