
aapt给每一个非assets目录的资源定义一个资源ID,它是一个4字节(byte = 32bit)的数字,格式是PPTTNNNN,PP代表资源所属的包(package),TT代表资源的类型(Type),NNNN代表这个类型下面的资源名称(Entry ID)。
对签名后的apk进行解压缩,在META-INF目录下一般会有三个文件: MANIFEST.MF、CERT.SF和CERT.RSA 三个文件,这里用不同的证书和签名方式得到的名字可能不同。
APK包在安装的时候,是按照RSA->SF->MF的顺序依次校验的:**先用公钥孙枣信息还原签名信息,然后和.SF文件中的信息进行比对,然后用同样的摘要算法对.MF文件里的每一个条目计算对应的摘要信息,然后比对.MF是否一致。
缺点
简单来说,v2签名模式在原先apk块中添加了一个新的块(签名块),新的块存储了签名、摘要、签名算法、证书链和一些额外的属性等。这个块有特定的格式。
apk的格式签名后变成了下面4个部分
其中第三部分有一个偏移值直接指向了第二部分的开始位置,而每个第二部分如Central directory header1 .... Central directory header n 的有一个便宜字段大前指向了其中对应的第一部分。
签名块包括对apk第一部分、第二部分和第三部分的二进制内容做加密保护,摘要算法以及签名算法。签名块本身不做加密,这里需要特殊注意的是由于第三部分包含了对第二部分的引用偏移,因此如果签名块做了改变,比如在签名过程中增加了一种签名算法,或者增加签名者等信息就会导致这个偏移发生改变,因此在算摘要信息的时候需要剔除这个音粗要以第三部分对签则仿拆名块的偏移来做计算。
接下来我们看看具体的apk签名块格式,改格式分为4个部分:
怎样找到v2分块的位置:ZIP中央结尾记录->中央目录其实偏移量->固定magic值,然后就可以定位v2分块的位置。
v2签名块负责保护第1、3、4部分的完整性,以及第二部分包含的APK签名方案 v2分块中的 signed data 分块的完整性。第1、3、4部分的完整性是通过内容摘要来保护的,这些摘要保存在 signed data 分块中,而 signed data 分块的完整性是通过签名保证的。下面开计算摘要的过程
第1、3和4部分的摘要要采用以下的计算方法
从上面我们可以知道v2模式块有点类似于
一、原因1:手机上存在旧版本的app,新旧版版本签名冲突???
解决方案:卸载旧版本的app后,重新安装你友薯要安装的app
如果卸载旧版本后依然安装不上,检查以下是否有应用残留文件夹,删除相应文件夹后重新安装
如果依然安装不上,请看原因2及解决方歼陵案2
二、原因2:应用卸载不彻底???
这种情况的表现是,你的手机上已经没有和你安装的app的类似应用了(这里的类似,是指你app的开发以及测试版的一系列版本),同时,你也已经删除了相关的应用文件夹,这种情况是由于应用卸载不彻底导致的,解决方案如下:
前提:手机需要通过数据线连接电脑,处于传输文件,开发者模式的打开状态
下载adb和aapt并配置
下好改者载两个工具,adb和aapt,下载链接(https://download.csdn.net/download/learning_lb/10320312)
下载完成后解压文件夹,并在环境变量中配置
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)