苹果APP验证原理(1)
接着上一篇双向签名之后
有了上面那个流程后,看似安全了,可是他真的完美了吗?其实还是有一个缺陷的,开发者完全可以拿到证书后直接给手机安装上,这样做不是就绕开Appstore了吗,那怎么才能让开发者在调试的时候可以直接安装在手机上,而发布的时候必须在Appstore上呢?答案只有一个:描述文件.
描述文件
还记得咱们在申请证书之后想要成功的真机调试,还有一个重要步骤吧,就是分别配置开发模式、发布模式的描述文件吧"AAA.mobileprovision".你必须要在描述文件内部指定你的设备号,才能调试你对应的app吧。
描述文件是什么?其实就是一组权限控制的文件,它里面记录了可以被运行的设备、你的应用的appid、等其他权限类控制。口说无凭,我这里打开一个开发者模式的描述文件看一看。
security cms -Di test.mobileprovision
我们挑重要的看,它里面就直接记录了指定运行的手机设备号、这个证书日期、还有你开发者的相关信息,当然,你不要尝试着你手动更改他就能够绕过监控,看到那个<key>UIDI<key>了吗?这个描述文件也自带一组唯一编码的,也是会经过效验的,你想要更改信息,只能从苹果服务器去申请,他会随着你xocode打包的时候一起放入App。
签名信息
1.签名到底是什么?
hash值 = 数据(100元)进行一次hash,然后用私钥加密, 服务器用公钥解开这个hash值,自己把数据hash意思,和这个hash进行比较。 这个值只有客户端的私钥可以修改。
举一个小小的例子。你消费了100元,并将此消息发送到服务器执行对应操作。这个时候完全有可能出现一个第三方截获这个信息,将100元改为1000元再发给服务器啊。这时候,服务器只要将这个1000元进行一下hash,然后和你发过来的hash比较一下就知道了,因为你发过来的是对100元的hash。
hash是什么?消息摘要,签名是什么?就是对你的app的消息摘要!
2.签名信息
还是口说无凭,下面我来看一看。
解压你的app后这个文件夹里面就是你的签名,里面记录的是对你的资源类文件的签名:比如图片、音视频等。
找到你的macho文件,浏览一下,红圈的位置就是你二进制文件的消息签名。有了这两组签名,就保证了资源和二进制文件的一致性。 这就是我们常说的签名。