应用签名原理和重签名

代码签名:代码签名是对可执行文件或脚本进行数字签名.用来确认软件在签名后未被修改或损坏的措施.和数字签名原理一样,只不过签名的数据是代码而已.

应用签名原理:

Mac生成一对公钥M、私钥M, 向证书颁发机构请求证书,即把公钥M打包成CSR发给Apple服务器, Apple服务器用私钥A 对公钥M进行加密生成证书(这个证书会跟私钥M绑定,即钥匙串看到的证书); 打包时, Xcode用私钥M对代码加密, ipa包也包含Apple用私钥A加密后的证书, 程序启动时, iPhone系统先用公钥A去解密加密后的证书, 解密成功即

证书里边的p12即为私钥, 描述文件里边包含了公钥M、 Device id等

签名原理

一些命令行:

查看一个包的签名信息: $codesign -vv -d XXX.app 

列出电脑上的证书: $security find-identity -v -p codesigning

查看mach-o 文件: $otool -l WeChat

                              $otool -l WeChat > ~/Desktop/123.text

重签名framework: $codesign -fs "证书" xxx.framework

给可执行文件增加可执行权限: chmod +x WeChat 

otool -l WeChat | grep cry


利用codesign重签名应用:

条件:    砸壳IPA

1、列出电脑上证书,找到将要使用的证书;(用这个证书重签名签名)

$security find-identity -v -p codesigning

2、删除xx.app中的插件等一些不能被签名的文件

3、重签名framework

 $codesign -fs "证书" xxx.framework

4、Xcode真机跑个空工程,例bundle id: com.chor.xx, 更换包里边的描述文件

5、更改info.plist的 bundle id 为 com.chor.xx

6、对包进行重签名

$security cms -Di 描述文件, 查看描述文件的信息

描述文件里边的授权信息

将这些授权信息提取出来,生成ent.plist文件,对xxx.app 进行签名

codesign  -fs "iphone Developer: [email protected](HJKHPLKPHPHK)" -no-strict --entitlements=ent.plist WeChat.app


Xcode重签:

1、创建一个同名工程

2、复制.app到工程的Product目录下

3、干掉一些不能签名的文件(插件等)

4、对framework重签名

5、run

你可能感兴趣的:(应用签名原理和重签名)