apk打包流程
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模式块有点类似于
2024-11-11 广告