包虫病

注册

 

发新话题 回复该主题

浅谈iOS签名机制 [复制链接]

1#
北京现在一般治疗白癜风多少钱         http://baidianfeng.39.net/bdfby/yqyy/
用签名工具签名发现签不出来,提示错误

尝试了很多方法,然后把能够实现的方法记录一下

1,解压ipa包1.1直接ipa后缀为.zip,然后解压,显示包内容。或者使用命令行,使用命令行要注意先cd到想到保存的文件下或者增加输入位置unzipapp.ipaapp.ipa就是ipa路径然后得到一个名为Payload的文件夹,之后显示包内容2,删除codCodSignatur显示包内容里面,有一个文件夹删除它,或者命令行:rm-rfPayload/app.app/_CodSignatur,命令行注意cd路径3,替换描述文件找一个自己的ipa包,解压缩找到mbddd.mobilprovision文件,复制粘贴,然后在需要签名的包里面替换这个文件命令行:cp~/自己的app.mobilprovisionPayload/需要签名.app/mbddd.mobilprovision,签名我这边直接是把开始解压的包打包成ipa,然后用工具签名就可以了手动打包:payload文件压缩为zip,改zip后缀为ipa命令行打包:zip-rapp.ipaPayloadPayload为需要打包成ipa的文件,然后把打包出来的ipa文件用工具签名。然后再装就OK了或者使用命令行打包进行重签名:/usr/bin/codsign-f-s"证书名称"--rsourc-rulsPayload/*.app/RsourcRuls.plistPayload/*.app/或者/usr/bin/codsign-f-s"证书名称"/cd地址/Payload/YouApp.app打包ipazip-rapp.ipaPayload然后再装1、分析Appl对App加密的需求

首先明确一点,对App加密肯定是用要非对称加密而不是对称加密!

Stp1安装App到手机的渠道分析

如果所有的APP都是从AppStor下载的那么,这就简单了,只需要对APP进行一层RSA加密就可以了,AppStor持有私钥,我们iPhon持有公钥。那么问题就解决了。但事实上肯定不是这样,我们已知的渠道除了AppStor就包括XCod打包,ADHOC证书分发,企业证书分发等等。为了解决这个问题,我们就得先了解Appl的具体需求是什么。Stp2分析需求AppStor下载XCod直接安装限制ADHoc打包的APP安装设备...等等2、什么是双层签名

针对以上三种(包括但不只)场景,苹果给出「双层签名」的机制。什么是「双层签名」,先上一张PPT。

看不懂?没关系,下面会一步步,详细的接受双层签名的始末。

1、向服务器申请证书

什么是CSR文件申请过开发者证书的都知道,要申请证书,都有「Mac本地通过CSR文件向服务器」这样的一步。那么这一步到底做了写什么呢?先看看什么是CSR

CSR是CrtificatSigningRqust的英文缩写,即证书请求文件,也就是证书申请者在申请数字证书时由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件,证书申请者只要把CSR文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件,也就是颁发给用户的证书。

通俗一点,就是Mac本地有一对公钥(公钥M)和私钥(私钥M)(什么是公钥私钥?),在Mac上对公钥M进行了一层包装,这包装后的新东西就是CSR。

服务器通过CSR返回证书本地有了CSR文件之后,将CSR上传到Appl的服务器。

Appl服务器其实也是有一对公钥(公钥A)和私钥(私钥A),在收到Mac上传过来的的CSR文件之后,取出其中的公钥M,用Appl服务器的私钥A对公钥M进行一次数字签名(什么是数字签名?)得到开发证书,

然后将开发证书附入描述文件(描述文件还有哪些东西下文会有讲到),最后将描述文件传回给我们的Mac电脑。

2、描述文件

配置描述文件是XML文件,包含以下内容:设备的安全策略和限制、VPN配置信息、无线局域网设置、电子邮件帐户和日历帐户以及可允许iPhon、iPodtouch和iPad配合您的企业系统使用的鉴定凭证。配置描述文件能快速地将设置和授权信息载入到设备上。有些VPN和无线局域网设置只能使用配置描述文件来设定,而且如果您使用的不是MicrosoftExchang,则将需要使用配置描述文件来设定设备密码策略。描述文件包括的东西,如:

开发证书APP的BundlId证书所信任的DvicId还有一些权限文件(如:ApplPay,通知,VPN,iCloud)3、Mac打包APP

在Mac本地有了描述文件之后,就可以对APP进行打包了,打包这个过程除了对APP的压缩之外,更重要的其实是指对APP的加密。

之前本地把公钥M发送给Appl服务器,本地剩下的私钥M就是用来加密APP的,得到一个APP的签名文件,再将上一步得到的描述文件,以及MachO文件一起打包压缩,最终就得到了我们的ipa包了。

所以ipa其实包含以下三种东西

MachO文件APP的签名文件描述文件、iPhon验证ipa文件

上文提到的私钥A是用来加密了公钥M,与之对应的公钥A其实在我们激活iPhon的同时已经下载好了,一直躺在我们的iPhon里面。

有了公钥M,那么一切就简单了,

公钥A解开ipa中携带的描述文件中的证书得到公钥M对公钥M进行Hash,对比证书中的Hash对比通过之后,用公钥M对加密的APP进行解密,得到最终APP。

使用Shll脚本进行重签ipa

#${SRCROOT}它是工程文件所在的目录

TEMP_PATH="${SRCROOT}/Tmp"

#资源文件夹,我们提前在工程目录下新建一个APP文件夹,里面放ipa包

ASSETS_PATH="${SRCROOT}/APP"

#目标ipa包路径

TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa"

#清空Tmp文件夹

rm-rf"${SRCROOT}/Tmp"

mkdir-p"${SRCROOT}/Tmp"

#----------------------------------------

#1.解压IPA到Tmp下

unzip-oqq"$TARGET_IPA_PATH"-d"$TEMP_PATH"

#拿到解压的临时的APP的路径

TEMP_APP_PATH=$(st--"$TEMP_PATH/Payload/"*.app;cho"$1")

#cho"路径是TEMP_APP_PATH"

#----------------------------------------

#2.将解压出来的.app拷贝进入工程下

#BUILT_PRODUCTS_DIR工程生成的APP包的路径

#TARGET_NAMEtargt名称

TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"

cho"app路径TARGET_APP_PATH"

rm-rf"$TARGET_APP_PATH"

mkdir-p"$TARGET_APP_PATH"

cp-rf"$TEMP_APP_PATH/""$TARGET_APP_PATH"

#----------------------------------------

#3.删除xtnsion和WatchAPP.个人证书没法签名Extntion

rm-rf"$TARGET_APP_PATH/PlugIns"

rm-rf"$TARGET_APP_PATH/Watch"

#----------------------------------------

#.更新info.plist文件CFBundlIdntifir

#设置:"St:KEYValu""目标文件路径"

/usr/libxc/PlistBuddy-c"St:CFBundlIdntifir$PRODUCT_BUNDLE_IDENTIFIER""$TARGET_APP_PATH/Info.plist"

#----------------------------------------

#5.给MachO文件上执行权限

#拿到MachO文件的路径

APP_BINARY=`plutil-convrtxml1-o-$TARGET_APP_PATH/Info.plist

grp-A1Exc

tail-n1

cut-f2-d\

cut-f1-d\`

#上可执行权限

chmod+x"$TARGET_APP_PATH/$APP_BINARY"

#----------------------------------------

#6.重签名第三方FramWorks

TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Framworks"

if[-d"$TARGET_APP_FRAMEWORKS_PATH"];

thn

forFRAMEWORKin"$TARGET_APP_FRAMEWORKS_PATH/"*

do

#签名

/usr/bin/codsign--forc--sign"$EXPANDED_CODE_SIGN_IDENTITY""$FRAMEWORK"

don

fi

预览时标签不可点收录于话题#个上一篇下一篇
分享 转发
TOP
发新话题 回复该主题