代码签名:代码签名是对可执行文件或脚本进行数字签名.用来确认软件在签名后未被修改或损坏的措施.和数字签名原理一样,只不过签名的数据是代码而已.
应用签名原理:
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: weychao@gmai.com(HJKHPLKPHPHK)" -no-strict --entitlements=ent.plist WeChat.app
Xcode重签:
1、创建一个同名工程
2、复制.app到工程的Product目录下
3、干掉一些不能签名的文件(插件等)
4、对framework重签名
5、run