重签名原理
对原始数据进行一次HASH,然后用自己的p12进行一次签名
想获得app的原始数据就需要用越狱手机对app进行砸壳
codesign
Xocde提供了签名工具,codesign,我们通过几个命令就可以完成重签名
-
$security find-identity -v -p codesigning 列出钥匙串里可签名的证书
-
$Codesign –fs “证书串” 文件名
强制替换签名 -
$Chmod +x 可执行文件
给文件添加权限 -
$security cms -D -i ../embedded.mobileprovision
查看描述文件 -
$codesign -fs “证书串” --no-strict --entitlements=权限文件.plist APP包
-
$Zip –ry 输出文件 输入文件
将输入文件压缩为输出文件
重签名步骤
-
删除插件和带有插件的.app包(比如Watch)
-
对Frameworks里面的库进行重签名
-
给可执行文件 +x(可执行)权限
-
添加描述文件(新建工程,真机编译得到,而且要运行,将描述文件安装到手机)
-
替换BundleID(info.plist 文件。 BundleID要和描述文件中的ID保持一致)
-
通过授权文件(Entilements)重签.app包、
- 查看描述文件$security cms -D -i embedded.mobileprovision
- 将描述文件中Entilements 拷贝出来,生成plist文件。(文件名称entitlements.plist )
- 用权限文件签名APP包 $ codesign -fs "Apple Development: XX(XX)" --no-strict --entitlements=entitlements.plist WeChat.app
- 最后通过Xcode安装
SHELL脚本
shell是一种特殊的交互式工具,它为用户提供了启动程序、管理文件系统中文件以及运行在系统上的进程的途径。Shell一般是指命令行工具。它允许你输入文本命令,然后解释命令,并在内核中执行。
Shell脚本,也就是用各类命令预先放入到一个文本文件中,方便一次性执行的一个脚本文件。
相关命令
-
$source FileName
- 含义:在当前shell环境中读取并执行FileName中的命令
- 特点:
命令可以强行让一个脚本去立即影响当前的环境(一般用于加载配置文件)。
命令会强制执行脚本中的全部命令,而忽略文件的权限。
-
$bash FileName 、 $zsh FileName
含义:重新建立一个子shell,在子shell中执行脚本里面的句子。 -
$./FileName
含义:读取并执行文件中的命令。但有一个前提,脚本文件需要有可执行权限。
终端命令重签名
查看签名信息

查看自己的证书

重签framework,查看权限x代表可执行权限

新建项目 编译,拷贝描述文件到目标App里,然后将权限entitlements的内容copy到一个plist文件中,找到位置修改名字为entitlements.plist,放在目标app同级目录下通过plist文件进行重签
替换签名信息

上面的步骤比较繁琐且过程中忘了一个步骤就会出现问题
利用xcode 重签名
首先创建一个同名工程,运行 找到app位置,然后将要替换的app中的watch和plugins(免费证书时)删掉,重签frameworks,修改info.plist的bundle id ,然后替换原有app,重新运行。
脚本重签
上面只是为了更好的了解重签名原理,开发中真正重签名可以通过脚本来重签。
注意: 可能不同设备拉的包可能运行不了,所以解压之后将info.plist中的UISupportedDevices直接删掉,然后重新压缩zip -ry xxx.ipa Payload
,再执行脚本。
脚本的话需要了解一些python语言,这里就不多赘述了,大家照着官网或者一些博客了解就行了。

运行状态

用户、组、权限
Unix和Linux都是多用户、多任务的系统,所以这样的系统里面就拥有了用户、组的概念。那么同样文件的权限也就有相应的所属用户和所属组了
通过ls -l 查看


文件类型
常见:
[d] 目录(directory)
[-] 文件
文件权限
[r]:read,读 [w]:write,写 [x]:execute,执行 。
注意:这三个权限的位置不会变,依次是rwx 。出现减号[-]在对应位置,代表没有此权限。
一个文件的完整权限,总共分为三组:
- 第一组:文件所有者的权限
- 第二组:这一组其他用户的权限
- 第三组:非本组用户的权限
改变权限 chmod
件权限的改变使用chmod命令。设置方法有两种:数字类型改变 和 符号类型改变。
由于文件权限分为三种身份:[user][group][other] 三个权限:[read] [write] [execute]
数字类型:
各个权限数字对照:r:4 w:2 x:1
如果一个文件权限为 [–rwxr-xr-x ]
User : 4+2+1 = 7
Group: 4+0+1 = 5
Other: 4+0+1 = 5
命令:chmod 755 文件名
符号类型:
chmod [u、g、o、a] [+(加入)、-(除去)、=(设置)] [r、w、x] 文件名称
补充
mkdir 文件夹 创建文件夹
zip -ry xxx.ipa Payload 压缩
网友评论