四:App重签名
- 目的:把越狱的软件安装到非越狱的手机上(没有砸壳的APP 不行)
- 原理:先创建一个新的应用,新应用(新的AppID)的描述文件包含你的手机UUID,这样新的App可以安装到你的手机上,然后越狱App使用新App的AppID,使得越狱App可以安装(使用新的描述文件,重新打包目标app,使其目标app成为你自己的应用)
一:使用codesign (终端命令行)工具来实现
-
先查看App是否越狱(查看MachO文件),如果crytpid 为0越狱,非0,就是没有越狱(例如1,就是以 “1” 这种方式加密的)
[注]:为什么cryptid 有2个?说明2个框架(arm64,arm),当前文件是一个胖二进制文件。
-
删除App包里边的 PlugIns 和 Watch 文件夹,里边库文件重签不了。
-
重新签名Frameworks里边的三方库(使用钥匙串里边你能用的证书)
3.1查看钥匙串里边所有的证书:
3.2 使用证书自己的证书重签名库全部的库文件
3.3 查看App 包里边同名的执行文件是否有执行的权限(一般情况下是有的,如果没有,请修改文件的权限)
-
创建一个新的工程(或者使用一个老的工程)拿到你重签framework时候使用的证书对应的描述文件,并拷贝进入app包里边(显示原文件里边)
-
修改info.plist 文件的budle ID(因为描述文件和目标APP的ID不统一,想要重签,只能修改目标文件的budle ID)
-
创建权限文件
6.1使用终端命令查看描述文件($security cms -D -i +描述文件)
6.2找到权限文件(Entitlements 段落)
6.3拷贝整个内容,新建一个plist文件(文件名字必须是entitlements.plist,否则后果自负)
-
把entitlements.plist 和 重签好的目标APP放到同一级目录下,重新签名整个APP(上边只是重签库文件)
-
到目前为止重签已经完成,把目标文件(App文件)打包成ipa文件,就可以安装了
【注】codesign这种方法比较繁琐,易错,不推荐这么实现,但恰恰是重签的原理,后边的方法都是用的这种原理,只不过好多步骤都代办了。
二:使用xcode
前边的“3步”和codesign都是一样,不重复写了,直接第4步开干
-
新建一个空的工程,工程的名字和目标APP的名字相同,运行一次,保证新工程可以运行到你的手机上(新建的工程的描述文件写入的你的手机)
-
找到新建工程的包的地址
-
把修改好的目标APP.app 包直接覆盖新工程里边,再次运行就可以了
【注】1. xcode代办了使用描述文件生成权限文件,再通过权限文件重签目标App
- 这种方法比较方便推荐使用
三:使用shell脚本
-
在工程文件路径里边新建APP文件夹,把目标api 包放入到APP文件夹里边里边
-
将写好的shell 脚本文件,也放到工程目录里边
可以在我的另一篇文章中了解shell脚本的知识(https://www.jianshu.com/p/8063f6c9ea0a)
-
引用脚本文件(signApp.sh)
-
直接运行
【注】1. 这种方法也比较推荐,但是脚本文件必须写的“健壮”,不一定适合所有的app(比如有的app文件路径写的和普通的不一样,这样脚本的处理路径必须修改)
- 脚本文件里边的内容其实就是使用shell 语句去实现方法1中的步骤
- 运行的时候有可能会出现signApp.sh 文件没有执行权限,请添加执行权限
- 可以在我的另一篇文章中查看文件权限的内容(https://www.jianshu.com/p/456e2ee978c0)